概要
ffmpegを使ってサクッとデスクトップ画面+音声をキャプチャしてファイルに保存します。実行環境はWindows 10を想定しています。
デスクトップをキャプチャする
ffmpegではgdigrab
(Linuxではx11grab
)を使うことでデスクトップ画面をキャプチャできます。
ffmpeg -video_size 1920x1080 -framerate 30 -f gdigrab -i desktop -vcodec libx264 -pix_fmt yuv420p desktop.mp4
オプションの解説
video_size
無指定だと画面全体をキャプチャします。このオプションを指定すると画面の左上を基準に指定した範囲をキャプチャします。
framerate
キャプチャ動画のフレームレートを指定します。
f, i
-f
オプションにgdigrabまたはx11grabを指定し、-i
オプションにdesktop
を指定することでデスクトップ画面をエンコードの入力映像として指定します。
vcodec
出力ファイルのコーデックを指定します。画面キャプチャはリアルタイムでの処理が要求されるため、出力設定にはPCのスペックに見合ったものを指定する必要があります。最新のデスクトップPCならばlibx264
コーデックでフルHD解像度ならば処理は可能かと思います。PCの性能に不安があったり、出力動画がカクつく場合は、-preset
オプションでエンコードの負荷を下げたり、-s
オプションで出力解像度を下げたり、-r
オプションでフレームレートを下げることで負荷を下げることができます。
pix_fmt
このオプションにはyuv420p
を指定することで再生可能な動画プレイヤーソフトが増えます。無指定の場合、VLC Media Playerでは再生可能でしたが、Windows10標準の「映画&テレビ」アプリでは黒画面となってしまいました。
デスクトップ音声をキャプチャする
先程の例でデスクトップ画面をキャプチャすることはできましたが、音声はキャプチャできていませんでした。音声はdshow
を使うことでキャプチャできます。
まずは、音声のみをキャプチャしてみましょう。
ffmpeg -f dshow -i audio="ステレオ ミキサー (Realtek(R) Audio) " -acodec aac audio.m4a
オプションの解説
f, i
-f
オプションでdshow
を指定し、-i
オプションにはaudio="<キャプチャしたい音声デバイス>"
を指定します。音声デバイスの名称は各々のPCによって異なるため、環境に合わせたものを指定しましょう。
どうやって調べるか分からないよ!という方は、VLC Media Playerを起動して、「メディア -> キャプチャーデバイスを開く」で表示されたダイアログからオーディオデバイスを選択し、ダイアログ下部の詳細設定オプションの表示
にチェックを入れると、オプションの編集
欄に音声デバイス名が表示されるので、それをコピペすると良いです。
acodec
今回は音声コーデックにaac
を指定しています。音声のみをキャプチャする場合は出力ファイルの拡張子から自動設定されるため、無指定でも構いません。
b:a
今回は指定していませんが、-b:a 256k
などと指定すると出力ファイルの音声ビットレートを設定できます。
音声付きでデスクトップ画面をキャプチャする
画面のみのキャプチャ、音声のみのキャプチャを組み合わせることで音声付きでデスクトップ画面をキャプチャできます。
ffmpeg -video_size 1920x1080 -framerate 30 -f gdigrab -i desktop -f dshow -i audio="ステレオ ミキサー (Realtek(R) Audio)" -vcodec libx264 -pix_fmt yuv420p -acodec aac -map 0:v:0 -map 1:a:0 desktop.mp4
このコマンドのキモはmap
オプションを使用していることです。これを設定することで別々の入力である動画と音声を一つの出力に組み合わせることができます。