fMP4.mp4.m4s
Fragmented MP4 / エフエムピーフォー
MP4を「目次とデータの小さな組」の連続として書く形式です。途中から読み込んだり、書き込みの途中で止まっても手前までを再生できたりするため、HLSやMPEG-DASHの配信セグメントや、録画ソフトの記録形式に使われます。
- 拡張子
- .mp4(配信の断片は .m4s が多い)
- 土台の規格
- ISOBMFF(ISO/IEC 14496-12)のムービーフラグメント
- 構成
- 初期化セグメント(ftyp と moov)と、moof と mdat の組の繰り返し
- 主な用途
- HLS、MPEG-DASH、CMAF の配信セグメント、録画ソフトの記録
- HLSでの扱い
- EXT-X-MAP タグで初期化セグメントを指定する
- ffmpegでの作り方
- -movflags frag_keyframe+empty_moov
普通のMP4は、録画が途中で止まると丸ごと再生できなくなります。ファイルの目次にあたる情報を最後にまとめて書く作りだからです。fMP4はこの目次を小分けにして、データの断片ごとに添えていく書き方で、配信と録画の両方でこの性質が効いてきます。
fMP4が使われる場面
いちばん大きいのは、ネット配信です。HLSやMPEG-DASHは、映像を数秒ずつの断片に切ってサーバーに置き、プレーヤーが順に取りに行く仕組みです。この断片の入れ物としてfMP4が使われます。HLSは長くTSだけを使っていましたが、2016年にAppleがfMP4への対応を加え、今ではHEVCをHLSで配信するならfMP4を使うことになっています。HLSとDASHで同じ断片を使い回すためのCMAFも、fMP4を土台にした規格です。
ブラウザーの中でも出てきます。hls.jsのようなJavaScriptのプレーヤーは、ブラウザーのMedia Source Extensionsに映像を渡すとき、fMP4の形で流し込みます。
録画の現場では、OBS Studioの記録形式に「Fragmented MP4」があります。配信中にソフトが落ちたりパソコンが止まったりしても、最後の断片以外は再生できる状態で残るのが利点です。
fMP4の仕組み
fMP4のファイルは、先頭の初期化セグメントと、その後に続く断片の組でできています。初期化セグメントには ftyp と moov があり、コーデックや解像度といった再生に必要な設定だけが入っています。断片ごとに moof(その断片の目次)と mdat(映像と音声の本体)がセットで並びます。
配信では、初期化セグメントを1つのファイル(init.mp4 など)にし、断片を segment_001.m4s のような別ファイルに分けます。HLSのプレイリスト(m3u8)では、EXT-X-MAP タグで初期化セグメントの場所を示します。
fMP4が編集ソフトで開けない・扱いにくいとき
fMP4は通常のMP4と同じ拡張子なのに、編集ソフトによってはシークが遅い、長さが正しく出ない、読み込みで止まる、といった症状が出ることがあります。断片ごとに目次が散らばっているため、ファイル全体の構造を前提にするソフトと相性が悪いのです。
対処は、ffmpegで -c copy を付けて通常のMP4に書き直すことです。再エンコードをしないので画質は変わらず、処理も短時間で済みます。OBS Studioでは、断片で書きつつ最後に通常のMP4の形に仕上げる「Hybrid MP4」という形式も用意されています。
配信用の断片(.m4s)は、単体では再生できません。初期化セグメントと組み合わせて初めて映像になるので、動画として保存したいときは、プレイリストごとffmpegに渡して1本のMP4にまとめます。
よくある質問
fMP4とMP4の違いは何ですか
中に入る映像や音声は同じで、目次の持ち方が違います。MP4は目次を1か所にまとめ、fMP4は断片ごとに目次を添えます。途中から読める、途中で止まっても残る、というのがfMP4の利点です。
HLSはTSとfMP4のどちらを使うべきですか
HEVCやDolby Visionを配信するならfMP4が必要です。H.264だけで古い機器まで広く対応したい場合はTSを選ぶ現場もあり、両方の断片を用意する構成もあります。
m4sファイルはどうやって再生しますか
m4sは配信の断片なので、単体ではほとんどのプレーヤーで再生できません。同じフォルダの初期化セグメントやm3u8と一緒にffmpegやVLCに渡すと再生できます。
この用語を扱ったコラム
似ている形式との違い
関連する用語
最終更新
