この記事でわかること

テスト済みバージョン: FFmpeg 6.1(ubuntu-latest / CI 検証済み) 対象 OS: Windows / macOS / Linux

ファイル名について: この記事では入力ファイルを input.aviinput.mkv などの仮ファイル名で記載しています。実際のコマンドでは処理したいファイルのパスに置き換えてください。


前提: コーデックとコンテナの違い

MP4 コンテナに入れられる主なコーデックは H.264 または H.265 (HEVC) の映像と AAC の音声です。


基本コマンド

ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
オプション意味
-i input.avi入力ファイルを指定
-c:v libx264映像コーデックに H.264 (libx264) を指定
-c:a aac音声コーデックに AAC を指定
output.mp4出力ファイル名(拡張子 .mp4 でコンテナが決まる)

一次ソース: FFmpeg Wiki - H.264 Encoding Guide


画質の調整(CRF)

-crf で映像品質を指定します。値が小さいほど高品質(ファイルサイズ大)。

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4
CRF 値品質目安用途
18視覚的無損失に近いアーカイブ
23デフォルト。バランス良好一般用途
28圧縮強めサイズ優先
51最低品質ほぼ使用しない

「一般視聴用なら 18〜28 の範囲を推奨」 — FFmpeg H.264 Guide


エンコード速度の調整(preset)

-preset でエンコード速度と圧縮効率のトレードオフを調整します。

ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k output.mp4
preset速度圧縮効率
ultrafast最速
fast速いやや低
mediumデフォルトバランス
slow遅い
veryslow最遅最高

CRF 一定のとき、遅い preset ほど同品質でファイルサイズが小さくなります。 一次ソース: H.264 Guide - preset


ストリームコピー(再エンコードなし)

入力がすでに H.264/AAC のとき、再エンコードなしでコンテナだけ変換できます。

ffmpeg -i input.mkv -c copy output.mp4

音声ビットレートの指定

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4
-b:a用途
96k音声のみの低品質
128k一般的な動画
192k音楽・音声品質優先
320k最高品質(AAC の上限目安)

よく使うコマンド例まとめ

ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
ffmpeg -i input.mkv -c:v libx264 -crf 22 -preset slow -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c copy output.mp4
ffmpeg -y -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4

最後の -y フラグは出力ファイルが既に存在する場合に上書き確認をスキップします(バッチ処理向け)。


トラブルシューティング

Encoder libx264 not found と表示される

原因: インストールした FFmpeg が libx264 を含まないビルド 解決策: 公式サイトまたはパッケージマネージャーから FFmpeg を再インストールしてください。Windows では gyan.dev の Full ビルド を推奨します。

出力ファイルが大きすぎる

CRF 値を上げる(28〜32)か、-preset fast に変更してファイルサイズを削減してください。

ストリームコピーが失敗する

-c copy は入力コーデックが出力コンテナと互換性がある場合のみ動作します。失敗した場合は -c:v libx264 -c:a aac で再エンコードしてください。


一次ソース: FFmpeg H.264 Wiki / FFmpeg AAC Wiki