OBSに追加された「Hybrid MP4」は通常のMP4と何が違うのか?
動画配信・キャプチャーソフトのOBSは、2024年7月に正式リリースされたバージョン30.2で「Hybrid MP4」に対応しました。このHybrid MP4と通常のMP4は何が違うのかについて、OBSの開発チームが公式ブログで解説しています。
Writing an MP4 Muxer for Fun and Profit | OBS
https://obsproject.com/ja/blog/obs-studio-hybrid-mp4
MP4の前身は、Appleが開発した「QuickTime File Format(QTFF)」です。QTFFは通常「MOV」という拡張子で知られており、マルチメディアコンテンツを効率的に格納し再生する目的で1990年代に開発されました。2001年、国際標準化機構(ISO)がQTFFを基にして、ISOベースメディアファイルフォーマット(BMFF)のPart12として、「MP4ファイルフォーマット」を採用しました。
MP4フォーマットの拡張性は、その基本構造である「ボックス」あるいは「アトム」と呼ばれるシステムに由来します。各ボックスは、サイズ、タイプ、そして実際のデータから構成されています。サイズは通常4バイトまたは8バイトのフィールドでボックス全体のサイズを示しており、タイプは4文字のコードでボックスの内容や目的を示します。以下の図だと、「ftyp」はファイルタイプボックス、「moov」はムービーボックス、「mdat」はメディアデータボックスを表します。
さらに、ボックスはあるボックスが他のボックスを含むような階層構造を形成することができ、複雑なデータ構造を効率的に表現することが可能。例えば、「moov」ボックスには、各トラックの情報やメタデータを含む複数のサブボックスを含むことがあります。この構造によって、新しいタイプのボックスを追加することでMP4フォーマットを拡張することが容易になるため、新しいコーデックのサポートやDRM機能の追加などを既存の互換性を損なうことなく導入できるというわけです。
しかし、従来のMP4形式の最大の問題点は、ファイルの最後に書き込まれる「moov」ボックスに依存していることでした。もし電源喪失やディスク容量不足、ブルースクリーンなど、録画中に予期せぬ中断が発生した場合、「moov」が正常に書き込まれず、ファイルが完全に再生不可能になる可能性があります。これは長時間の録画や重要なイベントの記録において特に深刻な問題でした。
そこで、ISO/IECで14496-12として標準化された「Fragmented MP4」技術が登場しました。これはメディアデータを断片化する技術で、録画中にPCがシャットダウンしたりソフトがクラッシュしたりしても正常にファイルを開くことができ、特にHTTPライブストリーミング(HLS)やMPEG-DASHなどのアダプティブビットレートストリーミング技術の基盤となっています。
ただし、Fragmented MP4の断片化されたファイルのmoovは不完全で、ビデオフレームやオーディオセグメントなど特定のサンプルに関する情報は各断片の先頭にあるムービー・フラグメント・ボックス(moof)に格納されています。この仕様によって、Fragmented MP4で断片化されたファイルをサポートしているアプリケーションは限られ、映像編集ソフトやプレイヤーの中にはFragmented MP4ファイルを適切に扱えないものもありました。
また、Fragmented MP4のファイルはHDDやネットワークドライブでのアクセス速度が遅いという問題もあります。これは、ファイルのメタデータが複数の断片に分散しているため、再生を開始するためにはファイル全体のメタデータを読み込む必要があるからです。また、ファイルのメタデータが分散しているため、ファイルブラウザが簡単にファイルの総再生時間を取得できず、Windows Explorerなどのファイルブラウザでファイルの再生時間が正しく表示されないという問題もありました。
そこで、OBSの開発チームは「録画中はFragmented MP4として機能し、録画終了時に迅速に従来のMP4形式のように見える方式」の開発に着手しました。この方式が「Hybrid MP4」です。
Hybrid MP4は録画中、基本的にFragmented MP4として機能します。各断片には「moof」ボックスが含まれており、そのフラグメント内のメディアデータを記述します。断片化されたファイルの録画が完了すると、OBSは「ソフトリマックス」と呼ばれるプロセスを逐一実行し、ファイルの最後に通常のMP4ファイルと同様に「moov」ボックスを書き込みます。この「moov」ボックスにはメディアサンプルの位置と時間情報が索引化されています。そして、録画が正常に終了するとファイル開始部分にある「free」ボックスを巨大な「mdat」ボックスのヘッダーで上書きします。この巨大な「mdat」ボックスは実質的にファイル内のすべての断片化されたファイルを包含します。
Hybrid MP4は、断片化されたファイルの「moof」とMP4ファイルのメタデータである「moov」の両方を管理します。これにより、ファイルが中断された場合はフラグメントのメタデータを使用し、正常に完了した場合は通常のMP4のメタデータを使用できるので、録画中のデータ損失耐性とファイルの広範な互換性を両立させています。
また、MP4ボックスのサイズフィールドは通常4バイトなのですが、この制限のために正しく処理できるファイルサイズが最大4GBとなってしまいます。Hybrid MP4は必要に応じて8バイトの拡張サイズフィールドを使用しているので、4GB以上の大きなファイルでも正しく処理できるようになっています。
さらに、OBSはHybrid MP4の実装に際して、チャプターマーカーやエンコーダー設定などの追加メタデータをファイルに統合する機能も追加しました。これらの情報は、最終的なmoovボックス内に適切に格納されます。メタデータには正しい作成日やエンコード日も含まれるようになったため、名前を変更しても、ファイルが最初に記録された日付を追跡できます。
なお、OBSの開発チームによると、Hybrid MP4をOBSに統合した数日後に、偶然にもFFmpegでHybrid MP4と同様の機能を追加するパッチが提出されたそうです。
10/15 07:00
GIGAZINE