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 のままで問題ありません。