ffmpeg はあらゆる形式の音声・動画を入出力し、エンコード・デコード・フィルタ処理・切り出し・連結・録画などを行うコマンドラインツールです。
実務ではフォーマット変換、ビットレート/解像度変更、サムネ生成、クリップ作成、字幕焼き込み、連結、ストリーミングなどに使います。
構文(Syntax)
ffmpeg [GLOBAL_OPTIONS] {-i INPUT | -f demuxer -i INPUT} ... [MAPPING] [ENCODE_OPTIONS] OUTPUT
# 代表的な書式
ffmpeg -i IN.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 192k OUT.mp4
# クリップ(先頭5秒スキップして10秒間)
ffmpeg -ss 5 -i IN.mp4 -t 10 -c copy OUT.mkv
# フィルタ(スケール・FPS・字幕焼き込み)
ffmpeg -i IN.mp4 -vf "scale=1280:-2,fps=30,subtitles=sub.srt" OUT.mp4
- 入力は複数指定可(
-iを複数)。出力も複数可。 - ストリーム選択は
-map、エンコード指定は-c:v/-c:a等、フィルタは-vf/-af/-filter_complexを使用。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-i INPUT | 入力を指定(複数可) | ffmpeg -i in.mp4 ... |
-c[:STREAM] CODEC / -codec | コーデック指定(copy で再エンコードなし) | -c:v libx264, -c:a aac, -c copy |
-map SPEC | 入出力ストリームの明示的マッピング | -map 0:v:0 -map 0:a:m:language:eng |
-ss TIME | 先頭からのオフセットへシーク(入力/出力側どちらにも置ける) | -ss 00:02:00 -i in.mp4 |
-t SEC / -to TIME | 長さ(秒)/終了時刻までを指定 | -t 10, -to 00:10:00 |
-vf FILTERS / -af FILTERS | 映像/音声フィルタ | -vf "scale=1280:-2,fps=30" |
-r FPS | フレームレート設定(入力/出力で意味が異なる) | -r 30 |
-b:v RATE / -b:a RATE | 固定ビットレート | -b:v 4M -b:a 192k |
-crf N(x264/265) | 品質(小さいほど高品質・大きいほど低ビットレート) | -crf 23 |
-preset NAME(x264/265) | 速度/圧縮率のトレードオフ | -preset veryslow |
-pix_fmt FMT | ピクセルフォーマット | -pix_fmt yuv420p |
-movflags +faststart | MP4 のメタを先頭へ移動(Web再生向け) | -movflags +faststart |
-an / -vn / -sn | 音声/映像/字幕を除去 | -an |
-shortest | 最も短いストリームに出力を揃える | -shortest |
-f MUXER | 出力フォーマットを明示 | -f mp4, -f concat |
-y / -n | 出力上書き許可/禁止 | -y |
-threads N | エンコードスレッド数 | -threads 8 |
| HWエンコーダ例 | GPU等のハードウェアを利用 | -c:v h264_nvenc / hevc_nvenc / h264_qsv / h264_videotoolbox |
-ssを 入力の前に置くと高速(キーフレーム単位)。入力の後に置くと精密(再エンコードが必要になりやすい)。
実行例
高品質なH.264/AACに変換(Web再生向け最小公倍数)
説明: 互換性の高い設定でエンコードし、ストリーミング開始を速くします。
コマンド:
ffmpeg -i in.mov \
-c:v libx264 -crf 22 -preset medium -pix_fmt yuv420p \
-c:a aac -b:a 192k \
-movflags +faststart out.mp4
再エンコードせずに部分切り出し(高速・キーフレーム境界)
説明: 5秒地点から10秒分をコピー。
コマンド:
ffmpeg -ss 5 -i in.mp4 -t 10 -c copy clip.mkv
※ カット位置が厳密でない場合があります(キーフレーム依存)。
音声だけを抽出してMP3に変換
説明: 映像を除去し、可変品質でエンコード。
コマンド:
ffmpeg -i in.mp4 -vn -c:a libmp3lame -q:a 2 out.mp3
複数ファイルを連結(同じコーデック/パラメータ)
説明: concatデマルチプレクサを使い、再エンコードなしで連結。
コマンド:
# mylist.txt(各行)
# file '/path/to/a.mp4'
# file '/path/to/b.mp4'
ffmpeg -f concat -safe 0 -i mylist.txt -c copy merged.mp4
720p・30fpsに変換+英語字幕を焼き込み
説明: 画質・サイズを揃え、外部SRT字幕を映像に焼き込みます。
コマンド:
ffmpeg -i in.mkv -vf "scale=-2:720,fps=30,subtitles='sub_en.srt'" \
-c:v libx264 -crf 23 -preset fast -c:a aac -b:a 160k out.mp4
エラー例:未インストールのエンコーダ指定
説明: libx264 が無い環境で指定すると失敗します。
コマンド:
ffmpeg -i in.y4m -c:v libx264 out.mp4
出力例(例):
Unknown encoder 'libx264'
対処: そのコーデックを含むビルドを入れるか、利用可能なコーデック(ffmpeg -encoders)を選択。
関連コマンド
ffprobe: メディアのメタデータ/ストリーム情報を表示(解析に便利)。ffplay: シンプルな再生プレイヤー(動作確認)。sox/mediainfo: 音声処理・メタ情報確認の補助ツール。mp4box(GPAC) : MP4 最適化・分割/結合の補助。
備考
- ストリーム選択: 多音声/多字幕では
-mapを明示しないと自動選択に依存します。確実にしたい場合は-map 0:v:0 -map 0:a:0 -map 0:s?のように指定。 - 品質パラメータ: H.264/265 の
-crfは一般に 18–28 が実用範囲。-presetは遅いほど圧縮効率が上がります。 - 色空間/互換性: Web/再生機器互換のため
-pix_fmt yuv420pを指定するのが無難。 - 正確なカット: 精密カットは
-iの後に-ss(および-to/-t)を置き、必要に応じ再エンコード。 - 字幕: 焼き込みは映像フィルタ(
subtitles)で不可逆。可逆にしたい場合はコンテナにソフト字幕として多重化(例:-c:s mov_textで MP4)。 - ハードウェアエンコード:
h264_nvenc(NVIDIA)、hevc_nvenc、h264_qsv(Intel)、h264_videotoolbox(macOS)など。画質/速度/機能はドライバ・GPUに依存。 - 入出力の自動検出: 拡張子でなく実データで判定します。うまく読めない場合は
-fで明示。 - 安全上の注意: 既存ファイルを上書きする際は
-yを付けるか、省略して確認プロンプトに注意。 - ビルド差: ディストリや配布元により含まれるコーデックが異なります(特に AAC、x264/x265、各HWエンコーダ)。
参考
- FFmpeg ドキュメント(
ffmpegCLI): https://ffmpeg.org/ffmpeg.html - フィルタ一覧(
filters): https://ffmpeg.org/ffmpeg-filters.html - 連結(concat デマルチプレクサ/フィルタ): https://trac.ffmpeg.org/wiki/Concatenate
- ストリーム選択(
-mapなど): https://ffmpeg.org/ffmpeg.html#Stream-selection - H.264 エンコードガイド(FFmpeg Wiki): https://trac.ffmpeg.org/wiki/Encode/H.264
- 公式トップ/ダウンロード: https://ffmpeg.org/
- FAQ: https://trac.ffmpeg.org/wiki/FAQ

コメント