この記事でわかること

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

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


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

動画ファイルを扱うときに最も混乱しやすいのがコンテナコーデックの区別です。

概念説明
コンテナ(拡張子)映像・音声・字幕などをまとめる「入れ物」.mp4, .mkv, .webm, .mov, .avi
映像コーデック映像データの圧縮方式H.264, H.265, VP9, AV1
音声コーデック音声データの圧縮方式AAC, MP3, Opus, Vorbis

拡張子を変えるだけでは変換になりません。たとえば .avi ファイルの中身が H.264+AAC であれば、コンテナをMP4に「詰め替える」だけで済みます(ストリームコピー)。一方、VP9映像が入ったWebMをMOVに変換するには、コーデックの再エンコードが必要になる場合があります。


コーデックの確認方法(ffprobe)

変換前にコーデックを確認しておくと、適切な方法を選択できます。

ffprobe -v error -show_streams -select_streams v:0 input.mp4
ffprobe -v error -show_entries stream=codec_name,codec_type -of default=noprint_wrappers=1 input.mkv

-hide_banner-show_streams のみで出力ファイルを持たないコマンドは text ブロックに記載しています。


ストリームコピー(-c copy)の使いどころ

コンテナだけ変換したい場合(コーデックはそのまま)は -c copy が最速です。

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

メリット:

注意点・失敗するケース:


主要な変換コマンド

MKV → MP4(ストリームコピー)

MKVの中身がH.264+AACなら1コマンドで瞬時に変換できます。

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

中身が別コーデックで失敗した場合は再エンコードします。

ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac output.mp4

MOV → MP4(iPhone・Mac動画の変換)

iPhoneやMacで撮影したMOVファイルはH.264/HEVCがほとんどなので、ストリームコピーが有効なケースが多いです。

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

HEVC(H.265)映像を含む場合で互換性優先なら再エンコードします。

ffmpeg -i input.mov -c:v libx264 -crf 22 -c:a aac output.mp4

AVI → MP4(古い形式からの変換)

AVIはコーデックが多様なため、安全のために再エンコードを推奨します。

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4

MP4 → MKV(コンテナ変換のみ)

MKVはほぼすべてのコーデックを収容できるため、ストリームコピーが安定して動作します。

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

MP4 → WebM(Web配信向け)

WebMはVP8/VP9映像とVorbis/Opus音声の組み合わせが標準です。ブラウザ配信に適しています。

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
オプション意味
-c:v libvpx-vp9VP9エンコーダーを使用
-crf 30 -b:v 0品質固定モード(CRFモード)
-c:a libopusOpusエンコーダーを使用(WebMの推奨音声)

コーデック自動選択の仕組み

出力コンテナを指定するだけでFFmpegがデフォルトコーデックを自動選択します。

ffmpeg -i input.avi output.mp4

このコマンドでは、MP4コンテナのデフォルトである libx264(映像)と aac(音声)が自動選択されます。ただし品質コントロールができないため、-crf などを明示的に指定することを推奨します。


各コンテナの主要対応コーデック

コンテナ主な映像コーデック主な音声コーデック
MP4H.264, H.265AAC, MP3
MKVH.264, H.265, VP9, AV1 などAAC, MP3, Opus, FLAC など
WebMVP8, VP9, AV1Vorbis, Opus
MOVH.264, H.265, ProResAAC, PCM
AVIH.264, DivX, Xvid などMP3, PCM など

よくあるエラーと対処法

Could not write header for output file エラー

コーデックとコンテナの互換性問題です。-c copy から -c:v libx264 -c:a aac に切り替えてください。

Encoder not found エラー

インストールしたFFmpegビルドに該当コーデックが含まれていません。公式サイトや gyan.dev(Windows)からフル機能ビルドを再インストールしてください。

WebMへの変換が極端に遅い

VP9はエンコードに時間がかかります。速度優先なら -cpu-used 4 オプションを追加してください。


関連記事


動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-formats.html / trac.ffmpeg.org/wiki/Encode/H.264