那么,如何使用 ffmpeg 录制带有背景声音的屏幕并输入音频?您还可以同时录制屏幕上的两个区域吗(例如,录制期间左下角显示另一个区域)? —RD
答案1
我有一个可靠的起点供您扩展。这是我用来选择要录制的特定区域的方法,默认为脉冲音频源。确保检查音频混音器或alsamixer
,并确保输入设备处于“监视器”状态。
#!/bin/bash
time_stamp=$(date +"%Y_%m_%d-%H_%M_%S")
count_down() {
echo -e "Recording in...\n"
for i in {5..1}; do echo -n "$i..."; notify-send "$i..."; sleep 1; done
}
load_stop() {
yad --notification --skip-taskbar --image="process-stop" --text="Click to STOP recording." --command="killall ffmpeg && killall yad & exit 0"
}
slect_area_rec() {
echo -e "Click X coordinate (top left)\n"
xdotool selectwindow &>/dev/null
x1=$(xdotool getmouselocation | awk '{print $1}')
y1=$(xdotool getmouselocation | awk '{print $2}')
echo -e "Click Y coordinate (bottom right)\n"
xdotool selectwindow &>/dev/null
x2=$(xdotool getmouselocation | awk '{print $1}')
y2=$(xdotool getmouselocation | awk '{print $2}')
x1_coord=$(echo "${x1/*x:/}")
y1_coord=$(echo "${y1/*y:/}")
x2_coord=$(echo "${x2/*x:/}")
y2_coord=$(echo "${y2/*y:/}")
width=$((x2_coord - x1_coord))
height=$((y2_coord - y1_coord))
screen_width=$(xdotool getdisplaygeometry | awk '{print $1}')
screen_height=$(xdotool getdisplaygeometry | awk '{print $2}')
crop_params="crop=$width:$height:$x1_coord:$y1_coord"
count_down
ffmpeg -hide_banner -f pulse -i default -f x11grab -i "$DISPLAY" -c:v libx264 -c:a aac -preset ultrafast -crf 20 -vf "$crop_params" "desk_rec_${time_stamp}.mkv" & load_stop
}
fullscreen_rec() {
ffmpeg -hide_banner -f pulse -i default -f x11grab -i "$DISPLAY" -c:v libx264 -c:a aac -preset ultrafast -crf 20 "desk_rec_${time_stamp}.mkv" & load_stop
}
clear
echo -e "\nDeskRec 1.2\n\na: fullscreen b: select area c: cancel"
while true; do
read -p ": " option
case ${option} in
a)
count_down
fullscreen_rec
;;
b)
slect_area_rec
;;
c)
echo "Cancelled."
break
;;
*)
echo "Invalid option."
;;
esac
done
exit 0
使用 ALSA 脉冲:
ffmpeg -f alsa -ac 2 -i pulse
内置麦克风:
-f oss -i /dev/dsp1
捕捉两个区域和音频源主要取决于系统的能力。这是可行的。只要你有一台相当快的机器。
录制时显示在左下角?我得考虑一下……
我可能有个主意ffmpeg -re
……一个闪屏风格的窗口,始终设置在最上面?
我会看看我能想出什么办法。
答案2
您可以使用以下命令与 ffmpeg 一起录制音频和视频:
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0+0,0 -f alsa -i pulse -c:v libx264 -preset ultrafast -c:a aac output.mp4
此命令将以 1920 x 1080 像素的分辨率和每秒 30 帧的帧速率录制屏幕。它还将录制系统音频。录制内容将存储在当前目录中,文件名为 output.mp4。