改めてメディアファイル形式の話をまとめてみよう
この記事は #VJアドベントカレンダー2024 の 16日目の記事です。 前日は Fumi さんの 電音部のオタクが諸々の経験値ゼロからVJシステムをTouchDesignerで自作するまで でした。
はじめに
この記事は、以前某 Discord サーバー内の人を集めて実施した、動画コンテナやコーデックについてラフに触れようというプチ勉強会の内容をまとめたものです。
「拡張子に mp4 とか mov があるのは知ってるけど、それと H.264 とかとの関係がわからない」という方向けの内容になっていると思います。
あらかじめ断っておきますが自分はコーデックのプロではないのと、動画に関するお仕事などはしていないため、記載内容に誤りや古いものが含まれる可能性があります! 見かけた際はコメントなどで指摘いただけますと幸いです・・・。
目次
メディアファイルの基本的な構造
基本的には「コンテナ」と呼ばれるデータが存在し、そのコンテナが動画データや音声データ、時によっては字幕やその他メタデータをすべて包み込むような構成になっています。

この「コンテナ」には複数の形式(コンテナフォーマット)が存在し、良く知られているものが MP4 や QuickTime (MOV) になります。
また、動画ファイルの拡張子には、.mp4 や .mov など、使用されているコンテナフォーマットが特定できる文字列が使われていることが多いように見受けられます(例外は .mp3 など)。
コンテナに含まれる動画データや音声データは何らかの方法で圧縮されていますが、その圧縮の方式が「コーデック」と呼ばれています。動画コーデックでは H.264、音声コーデックでは AAC が認知されているかと思われます。

また、コンテナには映像や音声以外にも、字幕やその他メタデータなどを持たせることもできます。
コンテナフォーマットとコーデック一覧
拡張子とコンテナフォーマット
| 拡張子 | 名称 | 説明 |
|---|---|---|
.avi |
AVI | 古のコンテナフォーマット。 |
.mov |
QuickTime | Apple製。仕様が公開されている*1。MP4 はこれをベースに設計されたため類似点も多い。 |
.mp4, .m4a |
MP4 | 幅広く使われいる。ISO/IEC 14496-12として策定。iTunes などApple系のソフトにおいて、中身が音声のみの MP4 ファイルの拡張子を .m4a とすることがある。 |
.mkv |
Matroska | OBS で動画でキャプチャしたときにデフォルトで使われる(MP4 と違って、録画中に一部データの破損があってもファイル全体が開けないことはなく復旧しやすいから*2らしい)。 |
.wav |
WAVE | 実はコンテナフォーマット。仕様上圧縮された音声も持てるが大体のユースケースで非圧縮の音声を持たされる。 |
.webm |
WebM | Google製のロイヤリティフリーなコンテナフォーマット。YouTube などで使用されている。Matroska がベース*3。 |
動画コーデック
| 名称 | 説明 |
|---|---|
| H.264, MPEG-4 AVC | 幅広く使われている。ITU-T Rec. H.264 などの形で策定。ファイルサイズを小さくしても人間にとって綺麗に見えることが大事なので、再生時の負荷はそれなりに大きい。 |
| H.262, MPEG-2 Video | 地デジや DVD で使われている。 |
| Motion JPEG | JPEG パラパラ漫画。昔の監視カメラの録画や、VJ 等でも使われていた。 |
| HAP | VJ ソフト VDMX を開発している Vidvox が策定したコーデック。仕様が公開されている*4。Snappy という圧縮技術を採用しており、圧縮率は高くないが高速なデコードが可能。 |
| DXV | VJ ソフト Avenue, Arena を開発している Resolume によるコーデック。仕様が公開されていない。 |
音声コーデック
いろいろなサービスや場面での動画形式の例
動画共有サイト
スマートフォンなどで視聴されるため、可能な限り圧縮率が高くなることが求められます。
| コンテナ | 動画コーデック | 音声コーデック | |
|---|---|---|---|
| 構成例 (YouTube) | WebM | VP9 | Opus |
| 構成例 (ニコニコ動画) | MP4 | H.264 | AAC |
ロイヤリティーフリー動画素材
Apple ProRes など、動画編集向けに策定されたコーデックが使用されることがあります。
| コンテナ | 動画コーデック | 音声コーデック | |
|---|---|---|---|
| 構成例 | QuickTime | Apple ProRes |
地上デジタルテレビ放送
ARIB STD-B10 などで詳細が定義されています。番組の内容や番組表などの情報も MPEG-2 TS 内にパケットとして含まれます。
| コンテナ | 動画コーデック | 音声コーデック | |
|---|---|---|---|
| 構成例 | MPEG-2 TS | MPEG-2 Video | AAC |
VJ
| コンテナ | 動画コーデック | 音声コーデック | |
|---|---|---|---|
| 構成例 (VDMX) | QuickTime | HAP | |
| 構成例 (Resolume) | QuickTime | DXV3 | |
| 2014年頃の自分 | QuickTime | Motion JPEG |
小ネタ
faststart
動画を mp4 や mov で書き出す際に、一部のソフトでは Fast start や類似したオプションが利用できることがあります。
そもそも mp4 や mov には様々な種類のデータ (atom) が格納されており、ftyp atom (ファイルの互換性に関するデータらしい)・mdat atom(動画・音声データ本体)・moov atom(動画の再生に必要なメタデータ群)などが実際に存在します。
普通に mp4 や mov 形式の動画を生成すると ftyp → mdat → moov の順番にデータが格納されるのですが、このままだと動画ファイルの末尾の moov まで読みこまないと動画を再生できず、ウェブサイトで動画をダウンロードしながら再生するといった方法が使えません。
そこで moov atom を mdat atom よりも手前に持ってくることで、動画ファイル全体をダウンロードしなくとも動画の再生を開始できるようにする加工を Fast start と読んだりします。
OBS の Hybrid MP4
OBS は 30.2 から動画の保存形式として Hybrid MP4 を追加しました。OBS のページによると、データを工夫しながら書き出すことで、突然の電源遮断などが起きても従来の MP4 のようにファイル全体が破損せず、正常な区間の復旧がしやすくなるとのことです。
ただ書き出し中は特殊な形でデータを書き出すものの、最終的には一般的な MP4 になるようファイナライズするとのことでした。なので新しいファイル形式を作ったというよりは、ファイル形式を維持したままファイル破損への耐性を高める保存方法を作ったということだと思います。
おわりに
動画形式を変換したり各種ソフトで再生したりする際に、これらの知識があるとトラブルシューティングは少ししやすくなるかな~という内容でした。ちょっとでもお役に立てば幸いです。