はじまり

おっ、ffmpegだな

これ便利ですよね。
MEGAでwebm形式の動画が再生できない問題の解決法
MEGAは便利なクラウドストレージサービスですが、webm形式の動画ファイルを再生しようとすると、以下のようなエラーメッセージが表示されることがあります。
CHUNK_DEMUXER_ERROR_APPEND_FAILED: Got a block with a timecode before the previous block.
このエラーは、webm形式の動画ファイルのタイムコードに関する問題が原因で発生します。特に、オーディオコーデックに「Opus」を使用している場合に発生しやすいことが分かりました。
そして、簡潔にこの事象の解決法を書くと、それは動画を変換する際に、オーディオコーデックを「Vorbis」として変換することです。まあ、それ以外にも有効なコーデックはあるのかもしれません。
様々なツールでのwebm形式の再生確認
まず、webm形式の動画が他のツールで正常に再生できるかどうかを確認しました。以下のツールでテストを行いました。(2025-04-26時点の結果です。)
- Google Photo ✅
- Google Drive ✅
- Android ✅
- ゆっくりムービーメーカー4 ❌(一部再生できない)
- Nextcloud ❓(未確認)
- MEGA ❌(一部再生できない)
また、Luma Dream Machineで生成した動画を変換したwebm形式の動画はMEGAでも問題なく再生できました。しかし、Androidで録画した動画やゆっくりムービーメーカーで出力した動画を変換したwebm形式の動画は再生できませんでした。これは、Luma Dream Machineで生成した動画には音声データが存在せず、音声コーデックもまた存在しないためです。
MEGAで再生できるwebm形式に変換する方法
テストの結果、MEGAでwebm形式の動画を再生できない主な原因は、オーディオコーデックにあることが判明しました。具体的には、Opusコーデックを使用している場合に問題が発生し、Vorbisコーデックに変更することで解決できました。
以下に、MEGAで再生可能なwebm形式に変換するためのffmpegコマンドを紹介します。
VP9ビデオコーデック + Vorbisオーディオコーデック(推奨)
このコマンドでは、ビデオコーデックにVP9、オーディオコーデックにVorbisを使用しています。ビデオビットレートは7Mbps、オーディオビットレートは128kbpsに設定しています。
ffmpeg -i "input.mp4" -b:v 7M -c:a libvorbis -b:a 128k -c:v libvpx-vp9 "output.webm"
AV1ビデオコーデック + Vorbisオーディオコーデック
AV1コーデックはVP9よりも高い圧縮効率を持ちますが、エンコード時間が長くなる傾向があります。
ffmpeg -i "input.mp4" -b:v 7M -c:a libvorbis -b:a 128k -c:v libaom-av1 "output.webm"
GPUハードウェアエンコーディングを使用する場合(NVIDIA GPUの場合)
NVIDIA GPUを使用している場合は、ハードウェアエンコーディングを利用することでエンコード時間を大幅に短縮できます。 ただし、ハードウェアエンコーディングは品質の低下とのトレードオフになる場合があります。また、VP9コーデックのハードウェアエンコーディングは現時点では十分にサポートされていないようです。
ffmpeg -i "input.mp4" -b:v 7M -c:a libvorbis -b:a 128k -c:v av1_nvenc "output.webm"
動画のビットレートを確認する方法
VLC media playerでビットレートを確認する方法
動画を変換する前に、動画のビットレートを確認することが重要です。確認すれば、動画をどれぐらいの品質へと圧縮するかどうかを決めるための判断材料になります。例えば、VLC media playerを使えば簡単に確認できます。
- メニューバーから「ツール」→「メディア情報」を選択するか、キーボードショートカットの Ctrl+I を押します
- 表示されたウィンドウの上部にある「統計情報」タブをクリックします
- 動画を少しだけ再生します
- 「入力/出力ビットレート」や「データレート」といった項目からビットレートを確認できます
ffprobeでビットレートを確認する方法
ffmpegに付属しているffprobe
コマンドを使用すると、より詳細な情報を取得できます。このコマンドを実行すると、動画ストリームのビットレートが表示されます。
ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.webm
圧縮率を上げる方法
動画ファイルのサイズを小さくするために、圧縮率を上げる方法を検討しました。FFmpegでは、主に以下の2つの方法があります。
1. 定数品質モード(CRF: Constant Rate Factor)
定数品質モードでは、ビットレートを直接指定するのではなく、品質レベルを指定します。これにより、シーンの複雑さに応じて適切なビットレートが自動的に選択されます。
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libvorbis -b:a 128k output.webm
CRFの値は0〜63の範囲で指定でき、値が小さいほど高品質(低圧縮)、値が大きいほど低品質(高圧縮)になります。一般的には、20〜35の範囲が適切です。
2. 固定ビットレートモード(CBR: Constant Bit Rate)
固定ビットレートモードでは、ビットレートを直接指定します。
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 2M -c:a libvorbis -b:a 128k output.webm
テストの結果、定数品質モードの方が効率的に圧縮でき、かつ品質を維持しやすいことが分かりました。ただし、固定ビットレートモードでは、変換処理後にファイルサイズが増えることもあるため、用途に応じて適切な方法を選択する必要があります。
ゆっくりムービーメーカー4との互換性に関する注意点
ゆっくりムービーメーカー4で音声を出力する際に問題が発生することがあります。Vorbisコーデックで圧縮された音声ファイルを使用すると、ゆっくりムービーメーカー4で音声を出力できなくなる場合があります。
そして、ゆっくりムービーメーカーの制作者によると、リニアPCM(LPCM)で音声データを扱うことが推奨されています。Vorbisのような非可逆圧縮コーデックを映像制作の音源として利用するのは避けた方が良いでしょう。
したがって、以下のような使い分けが推奨されます。
- 映像制作に使用する予定の動画ファイル → Opusコーデックを使用(ただしMEGAでは再生できない可能性あり)
- 単純に視聴するための動画ファイル → Vorbisコーデックを使用(MEGAでは再生可能だが、ゆっくりムービーメーカーでは音声が再生されない)
まとめ
MEGAでwebm形式の動画を再生できない問題は、主にオーディオコーデックが原因であることが分かりました。Opusコーデックを使用している場合に問題が発生し、Vorbisコーデックに変更することで解決できます。
ffmpegを使用して、以下のコマンドでMEGAで再生可能なwebm形式に変換できます。
ffmpeg -i "input.mp4" -b:v 7M -c:a libvorbis -b:a 128k -c:v libvpx-vp9 "output.webm"
ただし、Vorbisコーデックを使用した動画ファイルは、ゆっくりムービーメーカー4などの映像制作ソフトとの互換性に問題がある場合があるため、用途に応じて適切なコーデックを選択することが重要です。
おしまい

色んなmp4があるんだなあ

奥が深いです。
以上になります!
コメント