录制两个特定区域 + 背景声音和输入音频(使用 ffmpeg)

录制两个特定区域 + 背景声音和输入音频(使用 ffmpeg)

那么,如何使用 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。

相关内容