主な定義:
- コーデック(H.264、HEVC、VP9など)は、ビデオまたはオーディオ部分のみを担当し、1つ以上のコーデックをコンテナにマージできます。
- コンテナ(MP4、MKVなど)は、それらをまとめて保持する責任があり、これは通常、選択したメディアプレーヤーで開くものです。
- 特定のエンコーダー(x264、libvpxなど)は、入力ストリームをコーデック準拠のビットストリームに変換します。多くの場合、1つの特定のコーデックに対して複数のエンコーダーがあります。
ご覧のとおり、ここでいくつか説明する必要があります。
コーデックとは何ですか?
コーデックは、エンコーダによって生成されたデータは、常に適切なデコーダによってデコードすることができる。基本的には次のことを意味し、エンコーダ/デコーダの略です。これはたまたまビデオ、オーディオに有効ですが、暗号化について考えることもできます(暗号化されたメッセージを表示するには、エンコーダーに適切なデコーダーが必要です)。
最近では、ビデオコーデックが指定されると、それに参加する機関は通常、標準の構文のみを指定します。たとえば、「ビットストリーム形式はこのようにする必要があります」、「0x810429AAB
ここにそれを変換する」など。フォーマットは完全にメーカー次第です。
これが、まったく同じコーデック用の非常に多くのエンコーダーを見つける理由であり、そのうちのいくつかは市販のものさえあります。
事例– H.264
用語を混同する前に、例を見てみましょう。H.264の場合を考えます。標準の名前はH.264です。これは実際のエンコーダーの名前ではありません。Mainconceptは非常に優れた商用エンコーダですが、x264は無料のオープンソースエンコーダです。もちろん、どちらも良質を提供すると主張しています。
エンコードを最適化できるという事実だけが、ここでの競争になります。両方のエンコーダーは、H.264準拠のデコーダーで常にデコードできる標準化されたビットストリームを提供します。
要約する
全体として、エンコーダーが次のことを行うとだけ言ってみましょう。
- ビデオフレームを撮ります
- 有効なビットストリームを生成します
その後、ビットストリームはコンテナに多重化されます。
デコーダーは:
- その有効なビットストリームを取る
- それからビデオフレームを再構築します
どちらもコーデック標準に準拠しています。それで全部です!
現在のコーデック
最近では、おそらく以下で説明するコーデックでエンコードされたビデオのみを見つけるでしょう。興味深いことに、それらのほとんどすべては、Motion Experts Group(MPEG)によって作成されました。ただし、GoogleやAlliance for Open Mediaが作成したMPEG標準の競合製品など、その他のロイヤリティフリーのコーデックもあります。
以下に示すように、「MPEG」はコーデックとコンテナの両方を参照できることに注意してください。これは混乱を助長しますが、「MPEG」だけでは意味がないことを知っておいてください。たとえば、「MPEG形式のファイルがある」というのは非常に曖昧です。
MPEG-2はかなり古いです。1996年からの最初の公開リリースです。MPEG-2ビデオは、DVDとTV放送(DVB-Tや衛星など)、および互換性が重要なレガシーアプリケーションに主に使用されます。MPEG-2ビデオは、主に.MPGコンテナにあります。
これはおそらく、2000年代半ばにWeb向けのビデオをエンコードするために主に使用されていたものですが、その間に取って代わられました。実用的なファイルサイズで高品質を提供します。つまり、長さ90分の映画全体を600 MBのCDに書き込むことができます(MPEG-2ではDVDが必要だったので、こちらの回答を参照してください)。HDや4Kコンテンツではうまく機能しなくなりました。
MPEG-4 Part 2ビデオを出力するエンコーダーには、DivX、オープンソースのリップオフXviD、およびNero Digitalがあります。
MPEG-4パート2ビデオのほとんどはAVIコンテナに入っていますが、MP4もよく見られます。
これは、MPEG-4 Advanced Video Coding(AVC)またはH.264とも呼ばれます。現在最も使用されているコーデックです。小さいファイルサイズで高品質を提供するため、インターネットまたはモバイルデバイス用のあらゆる種類のビデオに最適です。H.264は、携帯電話からカムコーダーまで、ほとんどすべての最新のアプリケーションにあります。Blu-rayディスクでは、ビデオはH.264でエンコードされるようになりました。
そのためのエンコーダーは、x264、NVENC(NVIDIA製)、Mainconceptです。ビデオは主にMP4、MKV、またはMOVコンテナーで提供されます。
MPEG-Hパート2とも呼ばれ、MPEG-4パート10 / AVC / H.264の後継です。高解像度(最大8K)を目指しており、H.264と比較して(品質とビットレートの点で)最大50%高いエンコードパフォーマンスを提供できます(たとえば、このペーパーを参照)。
この規格は2013年に公開され、ゆっくりと、たとえばIPTVやオンラインビデオ送信などにコーデックがますます使用され始めています。HEVCは、iOSでビデオと画像を(HEIFを使用して)保存するためにもAppleによって使用されます。ただし、HEVCに関連する特許プールが複数あるという事実により、多くの企業(ほとんどAppleを除く)がロイヤリティフリーの代替に移行しています。また、HEVCはすべてのブラウザーでネイティブにサポートされているわけではないため、Webストリーミングには使用できません。
最も有名なエンコーダはx265です。NVENCもあります。通常、ビデオはMP4コンテナーに入っています。
VP9(VP8の後継)は、主にGoogleが開発したコーデックです。オープンでロイヤルティフリーで、多くのブラウザに実装されています。その品質はHEVCとほぼ同等であり、時にはさらに優れています(Netflixによるこのペーパーを参照)。VP9は、それをサポートするブラウザーでYouTubeを視聴すると得られるものです。
VP9はlibvpxエンコーダーでエンコードでき、多くの場合WebMまたはMKVコンテナーに含まれています。
一部の企業は、HEVCに対してさらに強力な競争相手を形成するために集まったが、ロイヤリティフリーの代替手段として。AV1はVP9の後継であり、VP10になるはずであったものに基づいています。Alliance for Open Media(Amazon、Cisco、Google、Intel、Microsoft、Mozilla、およびNetflixが設立)が支援しています。詳細はこちらをご覧ください。
libaomのエンコーダは、AV1ビットストリームを生成するために使用することができますが、それはまだ実験的なものです。
フォーマット(コンテナ)とは何ですか?
これまで、基本的には生のビデオデータである生の「ビットストリーム」についてのみ説明してきました。実際には、このような生のビットストリームを使用してビデオを見ることができます。しかし、ほとんどの場合、それは十分ではないか、実用的ではありません。
したがって、ビデオをコンテナにラップする必要があります。いくつかの理由があります。
- たぶん、あなたはビデオとともにいくつかのオーディオが欲しい
- ビデオの特定の部分(「1:32:20.12に移動」など)にスキップしたい場合があります
- オーディオとビデオの両方が完全に同期する必要があります
- ビデオは、信頼できるネットワークを介して送信し、パケットに分割する必要がある場合があります
- ビデオは損失の多いネットワーク(3Gなど)を介して送信され、パケットに分割される前に
これらのすべての理由から、コンテナ形式が発明されました。一部は単純なもので、一部はより高度なものです。それらはすべて、ビデオビットストリームを別のビットストリームに「ラップ」します。
コンテナは、プレゼンテーションタイムスタンプ(PTS)に従ってビデオフレームとオーディオフレームを同期します。これにより、正確に同時に表示されるようになります。また、必要に応じてストリーミングサーバーの情報を追加し、ストリーミングサーバーがファイルのどの部分をいつ送信するかを把握できるようにします。
人気のあるコンテナを見てみましょう。
人気のコンテナ
ほとんどの場合、ビデオは次のコンテナにラップされています。他にもあまり人気のないものがありますが、私が言ったように、主にそれは次のとおりです。
オーディオビデオインターリーブ—これは最も基本的なコンテナであり、オーディオとビデオをインターリーブするためだけにあります。1992年に作成され、現在も使用されていますが、レガシーと見なされているため、使用しないでください。
MPEG-4 Part 14とも呼ばれ、QuickTimeファイル形式に基づいています。これは、H.264ビデオに適した形式ですが、HEVC、MPEG-4 Part 2、およびMPEG-2もラップします。
このコンテナはオーディオのみをラップする場合もあります。そのため、ビデオではなくAACエンコードオーディオである.mp4ファイルが.m4aファイル(拡張子が異なる)でも非常に多く見つかります。通常、拡張子.m4vはビデオビットストリームに使用されます。
Matroska Video(MKV)は、H.264からVP9までの基本的にすべてのコーデック、そしてもちろん多くのオーディオコーデックをサポートしているため、最近よく見られるオープンソースの無料ファイル形式です。
WebMはMKVに基づいており、主にVP9ビデオとOpusオーディオに使用されます。これらのコーデックが使用される場合、Webストリーミングビデオに最適なコンテナです。
Oggコンテナは、同じくXiph.Org Foundationによって作成されたTheoraビデオコーデック(およびVorbisオーディオコーデック)に最適なコンテナです。また、無料のオープンソース(コーデックと同様)です。
Flashビデオ形式は、ストリーミングアプリケーションで使用するためにAdobeによって作成されました。ストリーミングが行われる方法が過去数年間で大幅に変更されたため、これはあまり使用されていません。
一般的なコーデックとフォーマット
また、次のうちどれがコーデックで、どれがファイル形式で、どれがどちらでもありませんか?
- Quicktime MOV:.movは、Appleが作成したコンテナであるQuickTime File Formatのファイル拡張子です。このコンテナは後にMP4に適合しました。あらゆる種類のコーデックを伝送できます。Quicktimeは実際にはメディアフレームワーク全体であり、実際にはコーデック自体を指定するものではありません。
- MPEG(1、2、3、4):Motion Picture Experts Groupによって定義された標準。詳細については、上記の私の投稿を参照してください。
- WMV:Windows Mediaビデオ。実際には、Advanced Systems Formatコンテナにラップされたコーデックであり、.wmv拡張子を再び使用します。奇妙なことですが、それはそうです。
- FFmpeg:これはコーデックでもコンテナでもありません。また、異なるコーデックとコンテナ間の変換を可能にするビデオツールのライブラリです。FFmpegは、コーデックとコンテナをそれぞれ作成するために、オープンソース
libavcodec
とlibavformat
ライブラリに依存しています。あなたが今日見つけるビデオツールのほとんどはそれに基づいています。
- AVC:MPEG-4 Part 10またはH.264の同義語。
- DivX:MPEG-4パート2ビデオ用の別のタイプのエンコーダ。
- Xvid:MPEG-4パート2ビデオ用のエンコーダーの1つのタイプ。それはただのオープンソースであり、DivXの無料版であり、もちろん論争を巻き起こしました。
- H.264:MPEG-4 Part 10またはAVCの同義語。
サイドノート:
正しい用語を使用していますか?
誤解を避けるために、「フォーマット」ではなく「コーデック」と「コンテナ」を具体的に使用した方がいいと思います。コーデックとコンテナの両方が形式(つまり、データの表現方法)を指定するため、形式は理論的には何でもかまいません。
そうは言っても、FFmpegの用語では、コンテナに「フォーマット」を使用します。これは、次の違いがあるためでもあります。
libavcodec
、エンコード/デコード用のライブラリ
libavformat
、コンテナのライブラリ