🎬 FFmpeg個人リファレンス

画面録画

画面の動きを動画として録画します。静止画と同じ入力デバイス(avfoundation / gdigrab / x11grab)を使い、 -t で録画時間を指定します(省略すると q または Ctrl+C で停止するまで録画)。

macOS(avfoundation)

入力は "画面番号:音声番号" の形。番号は画面キャプチャ-list_devices で確認します。

# macOS: 画面を録画("画面番号:音声番号"。3=画面, 0=マイク)
ffmpeg -f avfoundation -framerate 30 -i "3:0" -t 20 -c:v libx264 -pix_fmt yuv420p screen.mp4
# macOS: 映像のみ(音声なし)
ffmpeg -f avfoundation -framerate 30 -i "3:none" -t 20 -c:v libx264 -pix_fmt yuv420p screen.mp4
ヒント
-pix_fmt yuv420p を付けないと一部プレイヤーで再生できないことがあります。録画では必須級です。

Windows(gdigrab + dshow)

# Windows: デスクトップ録画(映像のみ)
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -pix_fmt yuv420p -t 20 screen.mp4

# Windows: マイク音声も同時に(デバイス名は dshow で確認)
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="マイク名" -c:v libx264 -pix_fmt yuv420p -c:a aac -t 20 screen.mp4

デバイス名を調べる

# Windows: 利用できる音声/映像デバイス名を一覧表示
ffmpeg -list_devices true -f dshow -i dummy

Linux(x11grab + pulse)

# Linux: 画面録画(映像のみ)
ffmpeg -f x11grab -framerate 30 -i :0.0 -c:v libx264 -pix_fmt yuv420p -t 20 screen.mp4

# Linux: マイク音声(PulseAudio)も同時に
ffmpeg -f x11grab -framerate 30 -i :0.0 -f pulse -i default -c:v libx264 -pix_fmt yuv420p -c:a aac -t 20 screen.mp4
ヒント
録画が重い・カクつく場合は -framerate を下げる、-preset ultrafast を付ける、解像度を下げると軽くなります。

録音(マイク / システム音 / 両方)

録画で録れる音は2種類あります。マイク音声と、PCで再生している音そのものであるシステム音です。 マイクは各OSとも標準で録れますが、システム音は仮想オーディオデバイスが必要になることが多いです。

1. マイク音声を録る

# macOS: 画面=3, マイク=0
ffmpeg -f avfoundation -framerate 30 -i "3:0" -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4

# Windows: マイク名は -list_devices で確認
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="マイク名" -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4

# Linux: PulseAudioの既定マイク
ffmpeg -f x11grab -framerate 30 -i :0.0 -f pulse -i default -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4

2. システム音(PCの再生音)を録る

「画面に映っている動画・アプリの音」を録るケースです。OSごとに用意が異なります。

# macOS: BlackHole等の仮想デバイス番号を指定(例: 画面=3, BlackHole=2)
ffmpeg -f avfoundation -framerate 30 -i "3:2" -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4

# Windows: ステレオミキサー(または仮想ケーブル)
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="ステレオ ミキサー" -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4

# Linux: 出力のmonitorソースを指定(pactl list sources で名前確認)
ffmpeg -f x11grab -framerate 30 -i :0.0 -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4
メモ
仮想オーディオデバイスの導入メモ
・macOS: 標準ではシステム音を録れません。BlackHole 等を入れると音声デバイスとして番号が振られ、それを指定して録れます。自分でも音を聞くには「Audio MIDI設定」で複数出力装置を作成します。
・Windows: 「ステレオ ミキサー」を有効化するか、VB-CABLE などの仮想ケーブルを使います。
・Linux(PulseAudio): 出力先の monitor ソースを指定します(pactl list sources で名前を確認)。

3. マイク+システム音を両方録る(合成)

音声入力を2つ指定し、amix フィルタで1本に混ぜます。下はLinuxの例(マイク=default、システム音=monitor)。

# Linux: マイク(default) + システム音(monitor) を amix で合成
ffmpeg -f x11grab -i :0.0 -f pulse -i default -f pulse -i SINK.monitor -filter_complex "[1:a][2:a]amix=inputs=2[a]" -map 0:v -map "[a]" -c:v libx264 -pix_fmt yuv420p -c:a aac screen.mp4
注意
画面録画は映像と音声がズレやすいです。音が遅れる/早い場合は、音声入力の直前に -itsoffset 0.3(秒)を入れてタイミングを微調整します。

操作説明の短いクリップはGIF化、配信用に整えるならYouTube用へ。