MKV↔MP4・MOV→MP4・MP4→WebM などのフォーマット変換は、FFmpeg でできます。つまずく最大の原因は、コンテナ(入れ物)とコーデック(圧縮方式)の混同です。この違いがわかると、再エンコード不要で一瞬に終わるケースと再エンコードが避けられないケースを自分で見分けられ、無駄な待ち時間と画質劣化を防げます。
ファイル名について:
input.mkv、input.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
ストリームコピー(-c copy)の使いどころ
コンテナだけ変換したい場合(コーデックはそのまま)は -c copy が最速です。
ffmpeg -i input.mkv -c copy output.mp4
メリット:
- 再エンコードなしで完了(数秒〜数十秒)
- 画質・音質の劣化ゼロ
注意点・失敗するケース:
- 出力コンテナが入力コーデックに対応していない場合は失敗します
- 例: ASS字幕が入ったMKVを
-map 0 -c copy(全ストリームを残す指定)でMP4にすると、MP4はASS字幕を格納できないためエラーになります -c copyが失敗したら再エンコードに切り替えてください
主要な変換コマンド
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は映像・音声のコーデックならほぼすべて収容できるため、ストリームコピーはたいてい成功します。ただし、MP4のテキスト字幕(mov_text)はMKVにコピーできません。字幕がある場合は -c:s srt を付けてSRTに変換します。
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-vp9 |
VP9エンコーダーを使用 |
-crf 30 -b:v 0 |
品質固定モード(CRFモード) |
-c:a libopus |
Opusエンコーダーを使用(WebMの推奨音声) |
コーデック自動選択の仕組み
出力コンテナを指定するだけでFFmpegがデフォルトコーデックを自動選択します。
ffmpeg -i input.avi output.mp4
このコマンドでは、MP4コンテナのデフォルトである libx264(映像)と aac(音声)が自動選択されます。ただし品質コントロールができないため、-crf などを明示的に指定することを推奨します。
各コンテナの主要対応コーデック
| コンテナ | 主な映像コーデック | 主な音声コーデック |
|---|---|---|
| MP4 | H.264, H.265 | AAC, MP3 |
| MKV | H.264, H.265, VP9, AV1 など | AAC, MP3, Opus, FLAC など |
| WebM | VP8, VP9, AV1 | Vorbis, Opus |
| MOV | H.264, H.265, ProRes | AAC, PCM |
| AVI | H.264, DivX, Xvid など | MP3, PCM など |
よくあるエラーと対処法
Could not write header (incorrect codec parameters ?) エラー
コーデックとコンテナの互換性問題です。-c copy から -c:v libx264 -c:a aac に切り替えてください。
Encoder not found エラー
インストールしたFFmpegビルドに該当コーデックが含まれていません。gyan.dev(Windows)などの配布ビルドやパッケージマネージャーで、フル機能版を入れ直してください。
WebMへの変換が極端に遅い
VP9はエンコードに時間がかかります。速度優先なら -cpu-used 4 オプションを追加してください。
関連記事
よくある質問
コーデックを変えずにコンテナだけ変更したい
ffmpeg -i input.mov -c copy output.mp4 で、再エンコードなしにコンテナだけを入れ替えられます(remux)。MOV ↔ MP4、MKV → MP4 などは、コーデックが出力先のコンテナに対応していれば瞬時に終わります。
WebM を MP4 に変換すると音が出ない
WebM の Vorbis / Opus 音声は、MP4 との互換性が完全ではありません。-c:a aac -b:a 128k で AAC に再エンコードしてください。
AVI から MP4 への変換で画質が落ちる
AVI 内のコーデックをそのまま MP4 に入れられる場合(DivX/Xvid → MP4 など)は、ストリームコピーで劣化しません。再エンコードが必要な場合も、CRF 18 なら視覚的に同等です。
動画コンテナによって何が違うの?
中身(コーデック)が同じでも、コンテナによって対応プレーヤー、メタデータの持ち方、ストリーミングへの向き不向きが変わります。Web 配信なら MP4、PC 中心なら MKV、Apple 製品中心なら MOV が向いています。
iPhone で撮った HEIC / HEVC は変換が必要?
一般的な Web 共有なら、H.264 の MP4 への変換をおすすめします。ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4 で変換できます。Apple 製品同士で共有するなら、HEVC のままで問題ありません。