使用 ffmpeg 录制屏幕和内部音频

use*_*275 4 ubuntu ffmpeg recording pulseaudio

录制屏幕和内部音频的 ffmpeg 命令是什么(在 Ubuntu 18.04 上)?

我将省略我尝试过的许多不起作用的东西,并跳到与我正在寻找的东西相近的东西;

V="$(xdpyinfo | grep dimensions | perl -pe 's/.* ([0-9]+x[0-9]+) .*/$1/g')"
A="$(pacmd list-sources | grep -PB 1 "analog.*monitor>" | head -n 1 | perl -pe 's/.* //g')"
F="$(date --iso-8601=minutes).mkv"
ffmpeg -video_size "$V" -framerate 10 -f x11grab -i :0.0 -f pulse -ac 2 -i "$A" "$F"
Run Code Online (Sandbox Code Playgroud)

我可以获取视频但没有音频。

parecord  -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  example.wav # index: 1
Run Code Online (Sandbox Code Playgroud)

会得到音频。

use*_*275 6

帧率适用于两个流,但由于 ffmpeg 文档示例分散,我将在这里留下答案

A="$(pacmd list-sources | grep -PB 1 "analog.*monitor>" | head -n 1 | perl -pe 's/.* //g')"
F="$(date --iso-8601=minutes | perl -pe 's/[^0-9]+//g').mkv"
V="$(xdpyinfo | grep dimensions | perl -pe 's/.* ([0-9]+x[0-9]+) .*/$1/g')"
ffmpeg -loglevel error -video_size "$V" -f x11grab -i :0.0 -f pulse -i "$A" -f pulse -i default -filter_complex amerge -ac 2 -preset veryfast "$F"
Run Code Online (Sandbox Code Playgroud)

在哪里

#A=1
#F=2018121711440500.mkv
#V=2560x1440
Run Code Online (Sandbox Code Playgroud)
  • ffmpeg 工具
  • -loglevel error 只有打印错误
  • -video_size "$V" 屏幕分辨率(如果您只想记录一个小节,则可以更小)
  • -f x11grab 录屏(Wayland 可能无法录屏?)
  • -i :0.0 X11 屏幕 ID,(也可以添加 +x,y 用于偏移)
  • -f pulse 音频驱动程序
  • -i "$A" 音频流的 id
  • -f pulse 再次音频驱动程序(可能不需要?)
  • -i default 通常是系统麦克风
  • -filter_complex amerge 合并 2 个音频流
  • -ac 2 将 4 个音频通道转换为 2 个
  • -preset veryfast 重视视频编码以避免口吃
  • "$F" 输出文件

请记住,参数顺序很重要,并且pavucontrol只能在 ffmpeg 运行时重新映射音频。