撮影した動画がMP4じゃないせいで再生できない、スマホやSNSにアップロードできない……そんな経験はありませんか?FFmpegを使えば、AVI・MKV・MOVなどあらゆる動画フォーマットをMP4に変換できます。この記事で、基本から応用まで必要なコマンドをすべて紹介します。


この記事でわかること

  • 任意の動画形式(AVI, MKV, MOV, WMV など)を MP4 に変換するコマンド
  • 映像品質の調整方法(CRF パラメーター)
  • 映像を再エンコードせずにコンテナだけ変換する方法(ストリームコピー)
  • エンコード速度と品質のトレードオフ(preset)

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

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


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

  • コンテナ(拡張子): .mp4, .mkv, .avi など。映像・音声データの「入れ物」
  • コーデック: データの圧縮形式。映像は H.264 (libx264), 音声は AAC が MP4 の標準

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
  • メリット: 一瞬で完了、画質劣化なし
  • 注意点: 入力コーデックが MP4 非対応の場合は失敗します。その場合は -c:v libx264 -c:a aac に切り替えてください。

音声ビットレートの指定

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


よくある質問

どんな動画でも MP4 に変換できる?

コンテナレベルではほぼすべて対応可能(WebM / MOV / MKV / AVI / FLV / TS など)。ただしコーデックによっては再エンコードが必要 — 例えば VP9(WebM)→ MP4 は H.264 への再エンコードが必要。

MP4 に変換するとなぜサイズが変わる?

コンテナ自体のオーバーヘッドはほぼ同じだが、コーデック / ビットレートが変わると変動。同コーデックでコンテナだけ変える remux なら数 KB の差。再エンコードなら大きく変動。

Web ブラウザで再生できる MP4 にしたい

-c:v libx264 -profile:v high -level 4.0 -pix_fmt yuv420p -c:a aac -movflags +faststart の組み合わせが最大互換。+faststart は moov atom を先頭に置いてプログレッシブ再生を可能にする。

iPhone で撮った MOV を MP4 に変えたい

コンテナだけ変えれば OK: ffmpeg -i input.mov -c copy output.mp4。中身が HEVC なら H.264 への変換も推奨(汎用性高): -c:v libx264 -c:a aac

画質を落とさず MP4 化したい

元コーデックが H.264 / AAC なら -c copy で完全無劣化。それ以外なら CRF 17〜18 で視覚的にほぼ無劣化(ただしファイルサイズは増加)。