web-dev-qa-db-ja.com

ffmpegで画面と内部オーディオを記録する

画面と内部オーディオを記録するための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"

ビデオは取得できますが、オーディオは取得できません。

parecord  -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  example.wav # index: 1

オーディオを取得します。

3
user1133275

フレームレートは両方のストリームに適用されますが、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"

どこ

#A=1
#F=2018121711440500.mkv
#V=2560x1440
  • ffmpegツール
  • -loglevel error印刷エラーのみ
  • -video_size "$V"画面の解像度(またはサブセクションのみを記録したい場合は、それ以下)
  • -f x11grab画面を記録します(ウェイランドでは画面の記録ができない場合がありますか?)
  • -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の実行中にのみオーディオを再マップできることに注意してください。

4
user1133275