ブラウザ上でのFFmpegによる直接的なAVIからMP4への変換:M3 MacのストレステストとWebAssemblyの真実

最近、ブラウザ内で完全に動作し、FFmpegコアを搭載した動画変換ツールという小さなユーティリティのコーディングに時間を費やしました。その機能をテストするため、16GB RAMを搭載したMacBook Air M3をテスト機として使い、Google Chrome上で直接古いAVIファイルをMP4に変換してみました。
得られた結果は面白く(笑)、技術的にも興味深いものでした。ストップウォッチは正確に747.44秒(12.5分強)で止まり、発熱が少ないことで有名なM3チップにより、アルミニウム製の筐体が触ってわかるほどに熱くなりました。
では、なぜ現在市場で最も強力なチップの一つを搭載したコンピュータが、単に動画のフォーマットを変更するだけで12分以上も「汗をかく」必要があったのでしょうか? 本記事では、このプロセスを支える技術的な仕組みを解剖し、「そんなに遅いのであれば、なぜブラウザベースの処理ツールが必要なのか?」という究極の疑問にお答えします。
1. 最初のボトルネック:RemuxとTranscode
テストにこれほど時間がかかった最大の理由は、マシンではなく、元のファイルにありました。私が選んだファイルは、DivXやXvidのような古い圧縮規格(コーデック)を使用した古いAVIフォーマットでした。
動画処理の世界では、2つの重要な概念を区別する必要があります:
- Remux(コピー - 非常に高速): 元の動画がすでにH.264のような最新のコーデックを使用している場合、FFmpegは動画と音声の「コア」を抽出し、新しいMP4の「ラッパー」に詰め込むだけです。このプロセスは基本的にあるフォルダから別のフォルダにデータをコピーするようなもので、わずか数秒しかかかりません。
- Transcode(DecodeとEncode - 非常に低速): 私のAVIファイルはMP4と互換性のない時代遅れの規格を使用していたため、FFmpegは「ゼロから再構築」することを余儀なくされました。古い動画のすべてのフレームをDecodeし、その膨大なフレームの山を最新のH.264 / H.265規格にEncodeする必要があったのです。このピクセルごとの処理は、CPUに信じられないほどの負荷をかけます。
2. ブラウザにおけるWebAssembly (WASM) の現実
...
