コンピュータの動画ファイル
コンピュータの動画ファイルとは、オーディオとビデオを含んだファイルです。動画ファイルは複数のコンポーネントからなっており、各コンポーネントは大抵はモジュール構造になっています。モジュール構造とは、他の部分に影響を与えずに、簡単に取り換えられるという意味です。このページでは、様々なタイプのモジュールを説明し、一般的な例を挙げてゆきます。
重要: このページ(とサブページ)には主観的な品質比較が書いてある事があります。しかし、最終的な判断は自分の目(または耳)で行うものですから、そのへんは話半分に読んで下さい。
コンテナ
コンテナは全てのものを統合するパートです。映像(実際の画像)、オーディオ、その他に必要なものは全てコンテナの中に入れておく必要があります。複数のファイルをZipアーカイブの中に入れるような感じです。
コンテナが必要な理由は次のようなものです:
- 再生ソフト・ハードが各コンポーネントの取り扱いを便利にできるようにする。
- 付加的な機能をファイルに加えられるようにする。例えば:
- ストリームのインデックス付け
- メタデータ(内部のストリームに関する情報)
- エラー・リカバリー能力
- チャプタなどのメタ・ナビゲーション
- ストリーミング
サブページ「コンテナ(英文試訳)」に様々なコンテナの情報があります。
ビデオストリーム
ビデオストリームには実際に表示される映像データが入っています(ここで"動画ファイル"と言う場合はオーディオとビデオが入ったものを指します。"ビデオストリーム"は映像のみの場合に使います)。ひらたく言うと、圧縮された映像です。
ひらたくない説明(でも完璧ではない):
ビデオコデックは一般にI、P、Bの三種類のフレームを使います。
- I-フレーム(イントラフレーム、内部的なという意味)はキーフレームです。特定のフレームをjpgにしたようなものと考えて下さい(と言っても似ているのはどちらも静止画を圧縮したもの、といった程度です)。キーフレームは映像を短い範囲に区切り、他のフレームはこれを参照します。他のフレームに依存しなくてもデコードできるので、'イントラ'と呼ぶわけです。
- P-フレームは予測フレーム(predicted frame)です。これは二つの部分からできている事を意味します。最初の部分はI-フレーム同様ですが、フレームの一部分を(全体ではありません)jpgに似た方式で保存します。残りの部分が '予測'の由来となります。前のフレームから拝借してくるのです。これは少し説明が必要でしょう。例えば、フレームの中央に顔のアップがあって、左に流れていくとします(パン)。最初のフレームが I-フレームであれば、2番目はP-フレームにできますから、「フレーム#01から情報を拝借してきて、左に4ピクセルずらせ、そしてその右側を新しいデータで埋めろ」みたいな事ができます。これが P-フレームです。マジでそんなカンジ。
- B-フレームはこの理屈をさらに延長したものです。Bは双方向(Bi-directional)という意味です。これだけでもなんとなくわかるでしょ?B-フレームは前と後ろの両方のフレームから予測されます。それに加えてオリジナルの情報を書くこともできます。画像の作り方も前と同じで、違いは未来(*後方*)のフレームも参照できることだけです。詳しい事を知るまでは、単に使い物になるとだけ覚えておいて下さい。なぜ使い物になるのか考えると夜も眠れなくなってしまいますから。
※訳注:実際問題、これでなぜ圧縮効率が向上するのかは完全には明らかになっていない(教科書p48)。
※訳注:H.264/AVC規格のBは双予測(Bi-predictive、前後問わず2枚、教科書p22)、x264のBは双方向(man MEncoderの記述はBi-directionalで統一)。
規格とコデックの違いについて:
規格とは、ビデオフォーマット(に限りませんが)の仕組みを解説した仕様書の束です。
※例:http://akuvian.org/src/x264/ITU-T_H264.pdf.gz エンコーダ(別名コデック)とは、規格を実装、具現化したものです。
違いわかります?例えばMPEG-4 ASPという
規格が出来上がると、様々な人たちが独自の
エンコーダを作るという事です。DivX とかXviDとか。はいつまりDivXでエンコードしたファイルはXviDの再生に使うのと同じデコーダで再生できると言う事です。もちろん、現実はそんなに甘くなくて、それぞれのエンコーダは規格のなかから思い思いの機能を実装し、さらに独自の機能を加えたりもします。現実が甘く無い例としては:
- Quicktime h264 はMPEG-4AVC規格のうち基本的な機能しか使っていません。x264のようなエンコ−ダが使うのは、実用上、規格上の機能のほとんど全てです。これは、QT上でファイルを作る限り、x264同等の画質を達成するのは困難な事を意味します。
※訳注:「画質」だけならApple-h264でx264同等のものを作るのは特に困難とは思いません。問題は圧倒的な遅さです。優秀なインタレ解除やデノイズがフリーでは見当たらない事、Appleは一般ユーザーをiTMSでのデータ購入に誘導すべくQuickTimeインフラに様々な障壁を設けている(ように見える)事、などと合わせるとQuickTimeベースのエンコードを習得するのは非効率だと思います。
サブページ「
Video(
英文試訳)」に様々なビデオフォーマットの情報があります。
オーディオストリーム
オーディオストリームには音声に関するデータが入っています。「オーディオフォーマット」という用語は前項の規格とコデックの関係に似ていますのでそちらを読んで下さい。
サブページ「
audio(
英文試訳)」に様々なオーディオフォーマットの情報があります。
字幕(Subtitle)
ここでは、'the subtitles'とはソフトサブを意味します。ソフトサブは動画ファイルの再生中にオーバーレイ表示するものです。逆に映像の中に直接エンコードしてしまうものをハードサブと言います。ソフトサブのメリットはかなりたくさんありますので、ここでは主なものをいくつか挙げておきます:
- 複数の字幕ストリームを保存できる(他言語や、様々なスタイルなど)
- 字幕のオンオフができる(オーディオストリームが母国語の場合など)
- 映像と分離しているので、映像の圧縮効率が若干良い。
サブページ「
字幕(
英文試訳)」に様々なサブタイトルフォーマットの情報があります。
そのほかの要素
その他の要素を詰め込める先端的なコンテナもあります。チャプタとか埋め込みフォントとか。以下に若干の例を挙げます。
アタッチメント
Matroskaは無駄の少ない小さなコンテナですが、如何なる種類のファイルでもアタッチ(*添付*)する事が出来ます。公開年度の情報を書いたテキスト?オリジナルサウンドとラックのZipファイル?DVDのジャケット?なんでもおっけー!。今の所そうしたものを展開できるソフトはmkvextractというCLIのものだけなのですが、GUIがたくさんあります。添付ファイルは巨大なこともありますから、ディスクスペースに注意して下さい。
エンベッデッド(埋め込み)・フォント
これも Matroska のみの機能。 SSA/ASS字幕をmuxする時に、小洒落たフォントを使いたいがそれが再生されるコンピュータにあるとは限らない、といった事があります。Matroskaファイルのそのフォントをアタッチしてしまえば、vsfilter(デファクトのdirectshow用字幕レンダラ)がそのフォントを使って字幕を再生してくれます。
チャプタ
これが何なのかは説明する必要はないでしょう。フォーマットによりチャプタのスタイルは異なります。以下はMatroskaの例です。
<Chapters>
<EditionEntry>
<EditionUID>1</EditionUID>
<EditionFlagHidden>1</EditionFlagHidden>
<EditionFlagDefault>0</EditionFlagDefault>
<ChapterAtom>
<ChapterUID>1</ChapterUID>
<ChapterFlagHidden>0</ChapterFlagHidden>
<ChapterFlagEnabled>1</ChapterFlagEnabled>
<ChapterDisplay>
<ChapterString>Part A</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
<ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
</ChapterAtom>
<ChapterAtom>
<ChapterUID>2</ChapterUID>
<ChapterFlagHidden>0</ChapterFlagHidden>
<ChapterFlagEnabled>1</ChapterFlagEnabled>
<ChapterDisplay>
<ChapterString>Part B</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
<ChapterTimeStart>00:09:48.000000000</ChapterTimeStart>
</ChapterAtom>
</EditionEntry>
やっかいですね。次はOGG フォーマットのチャプタです:
CHAPTER01=00:00:00.000
CHAPTER01NAME=Chapter 1
非常に簡単です。もちろん、Matroskaのほうが機能が豊富です。ここでは深入りしませんが、オーダード・チャプタについてだけ少し解説しておきます。
Ordered Chapters
再生時に、動画ファイルの一部分として、他のmatroskaファイルを参照するチャプタ。例えば、TVシリーズをエンコードしたとしましょう。まず、全エピソードのオープニングとエンディングをカットしてそれぞれ独立したファイルを2個作ります。次に、本編ファイルにオーダード・チャプタを使えば、再生時にオープニングとエンディングを自動的に再生してくれます。
アナモルフィック・フラグ
MKV と MP4コンテナに埋め込める機能。再生時に使うアスペクト(*縦横*)比の値、 anamorphic再生とも言います。例えば、16:9の映画を4:3のアスペクト比でエンコードした場合、MKVにmuxする際に再生時のアスペクトを 16/9と指定してやれば、再生ソフトは自動的にそのアスペクト比にリサイズして再生してくれます。
スポンサーサイト