この記事では、コンテナのコンセプトなど、メディア ファイルの基本と、ストリームで使用できる多くのコーデック形式のいくつかについて説明します。さらに、アダプティブ ストリーミング、ビットレート、解像度などのトピックにも簡単に触れますが、これらについては後のセクションで詳しく説明します。
動画ファイルの配信
ビデオカメラから未加工ファイルを取り出して、そのままウェブにアップロードできると考える方もいらっしゃるかもしれません。たとえば、YouTube や Vimeo などの動画ストリーミング サイトでは、カメラの HDMI ポートに接続してキャプチャ カードによる処理を行うといった、ライブ ストリーミング機能も提供しています。これらのサービスにより、動画の処理とアップロードが大幅に簡素化され、アダプティブ ストリーミングとさまざまな解像度に必要な多くのファイルとマニフェストが生成されます。そのうえ、セルフホスティングを面倒なものにするために、複雑で繊細な要件が数多く存在します。ユーザー自身のサイト(おそらく別のメディア サーバー)から動画を準備して配信する方法は、ユーザー エクスペリエンスに配慮して未加工のカメラファイルをアップロードするよりもやや複雑です。
動画ファイルにはさまざまな形式があります。カメラで標準搭載されている形式は、通常は .mov
ファイルです。最新の優れたミラーレス カメラを使用している場合は .mp4
です。ただし、.mov
は録画や編集、その他の初期のポストプロダクション プロセスには適していますが、ウェブでのストリーミングには適していません。また、4K の未加工の .mp4
のファイルサイズは、そのファイルをモバイルで再生することを非常に困難にします。ブラウザはさまざまなファイル形式をサポートしているため、複数の最適化されたファイルを作成する必要があります。また、アダプティブ ストリーミングをサポートする場合は、マニフェストを 1 つ作成する必要があります。ファイルを変換する前に、ファイルとその特性について、いくつかの基本を理解する必要があります。
コンテナとコーデック、ストリーム
オペレーティング システムのシェルに表示されるファイルはコンテナであり、ファイル拡張子(.mp4
、.webm
、.ogg
など)で識別されます。コンテナには 1 つ以上のストリームが格納されています。メディア ファイルには任意の数のストリームを含めることができ、ここで説明するよりも多くの形式があります。
このセクションで後ほど使用するサンプル ファイルには、最大 2 つのストリーム(音声ストリームと動画ストリーム)が含まれています。他に目にする可能性があるタイプには、字幕とデータがありますが、いずれもこの記事では説明しません。音声ストリームと動画ストリームが別々に扱われる場合もあります。ほとんどのファイルには、1 つの音声ストリームと 1 つの動画ストリームしか含まれていません。
音声ストリームと動画ストリームでは、実際のデータはコーデックを使用して圧縮されます。コーデック(コーダー/デコーダ)は、動画データまたは音声データの圧縮形式です。コンテナとコーデックの区別は重要です。同じコンテナにファイルであっても、コンテンツを異なるコーデックでエンコードできるからです。
以下の画像は、この構造を示しています。左側は、2 つのストリームを持つ基本的なコンテナ構造です。右側は、単一の WebM ファイルに対するその構造の詳細です。
WebM コンテナ内のファイルは他の形式に比べて桁違いに小さくなるため、モバイルサイトのストリーミングに適しています。残念ながら、すべてのブラウザが最新のコンテナとコーデックをサポートしているわけではありません。たとえば、WebM は高品質でオープンソースのオプションとしてウェブ用に作成されていますが、そのサポートはまだ普遍的ではありません。特に Safari では、この記事の執筆時点での「使用できるもの」によれば、埋め込み動画で WebM がサポートされていません。ただし、WebM は、WebRTC で使用される VP8 コーデックと VP9 コーデックを部分的にサポートしています。代替動画を用意することをおすすめします
コーデックの形式
多くのファイル形式では、同じコンテナ内の複数のコーデックがサポートされています。利用可能な動画コーデックとオーディオ コーデックの完全なリストは、ウェブサイト全体になります。ここで紹介したリンクは、ウェブで使用できる機能に関する MDN の実用的なリストです。現在推奨されているファイル形式と、使用できるコーデックを以下に示します。 ファイル形式のリンクをクリックすると、そのファイル形式に対応しているブラウザが表示されます。
* 優先する動画コーデックを示します。
ビットレートと解像度
ビットレートは、ストリームの 1 秒間のエンコードに使用される最大ビット数です。 1 秒間のストリームのエンコードに使用されるビットが多いほど、詳細度と忠実度が高くなります。このコンセプトについて詳しくは、ビットレートをご覧ください。
解像度とは、動画の 1 フレームあたりの情報量を、各次元の論理ピクセル数で表したものです。このコンセプトについて詳しくは、解決策をご覧ください。
次のメディアアプリの基本では、Shaka Packager と FFmpeg の 2 つのコマンドライン ツールを使用して、これらの特性を調べる方法について説明します。