FFmpegでWebMをMP4に変換すると、編集ソフトやスマホでも扱いやすくなります。WebMは、ブラウザの画面録画やWebRTCのキャプチャなどで使われる形式です。Web用途には向いていますが、編集ソフト・スマホ・古いメディアプレーヤーはVP8/VP9映像やOpus/Vorbis音声をうまく扱えないことがよくあります。変換は多くの場合H.264 + AACへの再エンコードで、これならほぼどの環境でも再生できます。

1. WebMが通常は再エンコードを必要とする理由

MP4(ISOベースメディアファイルフォーマット)は、コンテナとして「許可されたコーデック」が決まっています。iPhone・Premiere Pro・スマートTVで再生できる組み合わせは、実質的にH.264/HEVC映像 + AAC音声です。

一方、WebMに入っているコーデックは次のとおりです。

ストリーム WebMのコーデック MP4と互換性あり?
映像 VP8、VP9、AV1 VP9/AV1は技術的には可、VP8は不可
音声 Opus、Vorbis Opusは可(非対応の再生環境あり)、Vorbisはほぼ非対応

MP4内のOpusはブラウザなどでは再生できるものの対応していない環境もあり、Vorbisはほとんど再生できません。VP8はそもそもMP4で有効になりません。そのため、映像・音声ともH.264 + AACに再エンコードするのが安全な既定です。これで大半のプレーヤー・端末で再生できます(ただしプロファイル・レベル・ピクセルフォーマット・端末側の制限が影響することはあり、必ず再生できるわけではありません)。

2. ほぼすべてのWebMに使える1コマンド

基本のコマンドです。映像をH.264、音声をAACに再エンコードし、Webでそのまま再生できる形にします。

ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4
  • -c:v libx264 … 映像をH.264でエンコード(最も互換性の高いコーデック)
  • -crf 23 … 一定品質の目標値。小さいほど高画質・大容量
  • -c:a aac -b:a 128k … 音声を128kbpsのAACに再エンコード
  • -movflags +faststart … moovアトムを先頭へ移動し、ダウンロード完了前に再生開始できるようにする

この1行で、VP8・VP9・Opus・Vorbisのどの入力も同じように処理できます。ただし10bitのVP9(プロファイル2)のWebMなら、-pix_fmt yuv420p を付けてください。付けないとMP4も10bitのH.264(High 10)になり、再生できない機器が多くなります。

3. CRF値の選び方(画質と容量)

画質と容量は、主にCRF(Constant Rate Factor/固定品質係数)で調整します。CRFは見た目の品質を一定に保つように、ビットレートを変動させます。

CRF 画質 主な用途 容量
18 視覚的にロスレス アーカイブ・マスター 大
20 非常に良い 高画質アップロード 中〜大
23 とても良い(既定) 汎用 中
26 良い Webプレビュー・下書き 小
28 許容範囲 簡易共有・容量節約 最小

CRFを±6変えると、おおむね容量が半分または倍になります。まず23から始めて調整してください。

ffmpeg -i input.webm -c:v libx264 -crf 20 -preset slow -c:a aac -b:a 192k -movflags +faststart output.mp4

-preset slow はエンコードに時間がかかる代わりに、圧縮効率が上がります。

4. VP9はストリームコピーでき、VP8はできない

MP4には仕様上VP9映像を格納できます。再生側がMP4内のVP9に対応していれば、映像ストリームをコピーして、時間のかかる映像の再エンコードを省けます。

ffmpeg -i input.webm -c:v copy -c:a aac -b:a 128k -movflags +faststart output.mp4

VP9映像はそのまま(瞬時・無劣化で)保ち、音声だけをAACに再エンコードします。

注意点:

  • この方法が使えるのはVP9(とAV1)だけです。VP8はMP4で有効な映像コーデックではなく、コピーしようとするとFFmpegが Could not find tag for codec vp8 というエラーで止まります(第7節のエラー2)。
  • 多くの再生環境(古いiPhone、一部のスマートTV、Premiere Pro)は、コンテナ仕様上は許可されていてもMP4内のVP9に対応していません。互換性が目的なら、第2節のコマンドでH.264に再エンコードしてください。

判断の前に、WebMが実際にどのコーデックを使っているかを確認します。

ffprobe -hide_banner input.webm

Video: vp8 と表示されたら映像の再エンコードが必須です。Video: vp9 で再生側が対応していれば -c:v copy も選択肢になります。

5. 音声:Opus/VorbisをAACへ

WebMの音声は、ほとんどがOpus(新しい)かVorbis(古い)です。MP4内のOpusは対応していない再生環境があり、Vorbisはほとんど再生できないため、AACに再エンコードします。

ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac -b:a 192k -ar 48000 -movflags +faststart output.mp4
  • -b:a 192k … 音楽中心の素材向けに高めの音声ビットレート(音声中心なら128kで十分)
  • -ar 48000 … 48kHzにリサンプリング。動画で一般的かつ安全なサンプルレート

音声トラックが元々ない場合、FFmpegは映像のみのMP4を生成し、-c:a オプションは無視されます。

6. エンコードを高速化する

H.264のエンコード速度は -preset で制御します。速いプリセットほど早く終わりますが、圧縮効率は下がります。同じCRFでも画質と容量はプリセットによって変わり、遅いプリセットで必ず小さくなるとは限りません。

プリセット 速度 圧縮効率
ultrafast 最速 最低
veryfast 速い 低め
medium 既定 基準
slow 遅い 高め
veryslow 最遅 最高

手早く「十分な品質」で変換したい場合:

ffmpeg -i input.webm -c:v libx264 -crf 23 -preset veryfast -c:a aac -b:a 128k -movflags +faststart output.mp4

時間より画質を優先するアーカイブ用マスターなら、低めのCRFと -preset slow または -preset veryslow を使います。

7. トラブルシューティング

エラー1: VLCでは再生できるがスマホで再生できない

原因: VP9をストリームコピー(-c:v copy)しましたが、スマホがMP4内のVP9に対応していません。 解決策: 第2節のコマンドでH.264に再エンコードします。

エラー2: Could not find tag for codec vp8 in stream

原因: VP8のWebMに -c:v copy を使いました。VP8はMP4コンテナに入れられません。 解決策: 映像を再エンコードします。-c:v copy の代わりに -c:v libx264 を使います。

エラー3: 変換後に音が出ない

原因: -c:a copy で音声をOpus/Vorbisのまま残しています。MP4内のOpus/Vorbisに対応していないプレーヤーでは音が出ません。 解決策: -c:a aac -b:a 128k で音声を再エンコードします。

エラー4: オンラインで再生開始までに時間がかかる

原因: moovアトムがファイル末尾にあります。 解決策: -movflags +faststart を付けます(上記のコマンドにはすべて含まれています)。

エラー5: 色がやや薄く見える

原因: 一部のキャプチャでは色情報が引き継がれません。 解決策: 標準的なHDの色空間(BT.709)であることを示すタグを付けます。setparams はタグを書き込むだけで、映像の画素は変えません。

ffmpeg -i input.webm -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709" -c:v libx264 -crf 20 -c:a aac -b:a 128k -movflags +faststart output.mp4

出力オプションの -colorspace bt709 -color_primaries bt709 -color_trc bt709 を使う方法もよく紹介されていますが、FFmpeg 8.1 では色空間のタグしか付きません。さらに、元の映像を BT.601 とみなして画素を変換するので、色が少し変わります。

よくある質問

Q1. WebMからMP4への変換で画質は落ちますか。 A. 再エンコード(H.264)は非可逆なので劣化します。CRF 18〜23なら劣化はわずかで、通常は見て分かりません。-c:v copy でVP9をストリームコピーすれば映像はビット単位で同一で、変わるのは再エンコードされる音声だけです。

Q2. VP9のままにすべきか、H.264にすべきか。 A. 互換性(スマホ・編集ソフト・TV)を最優先するならH.264です。視聴者が最新のブラウザだけならVP9の方が効率的ですが、その場合はWebMのまま使うほうが合理的です。

Q3. WebMに音声がありません。コマンドは失敗しますか。 A. しません。FFmpegは映像のみのMP4を生成し、使われない音声オプションは無視されます。

Q4. AAC音声のビットレートはどれくらいが良いですか。 A. 音声中心や一般的な素材なら、128kで元の音と聞き分けにくい品質になります。音楽中心なら192kをおすすめします。ステレオAACでは、256kを超えてもほとんど効果はありません。

Q5. 画面録画のWebMも同じ方法でMP4化できますか。 A. できます。ブラウザの画面録画は標準的なVP8/VP9 + OpusのWebMを出力するので、第2節のコマンドがそのまま使えます。

Q6. ざっくりプレビューだけ欲しい場合の高速な方法は。 A. -preset veryfast と、CRF 26程度の高めの値を使います。画質は少し下がりますが、処理は速く終わります。

関連記事