私はとても混乱しています...オーディオ/ビデオコーデック(どうやら「モデム」が実際に「変調器/復調器」であるような一種の「エンコーダー/デコーダー」の省略形です)とオーディオ/の違いは何ですかビデオフォーマット?
(私は正しい用語を使用していますか?)
例:「MPEG-4」であると言うことと「DivX」コーデックを使用することで何が違うのですか?なぜWindows Media Playerは時々.mpg
ファイル、場合によってはそうではありませんか?
また、次のうちどれがコーデックで、どれがファイル形式で、どれがどちらでもありませんか?
主な定義:
ご覧のとおり、ここでいくつかのことを説明する必要があります。
codecは、エンコーダー/デコーダーの略で、基本的には次のことを意味します。エンコーダーによって生成されたデータは、常に適切なデコーダーによってデコードできます。これはたまたまビデオ、オーディオで有効ですが、暗号化について考えることもできます(エンコーダーは、暗号化されたメッセージを表示するために適切なデコーダーが必要です)。
現在、ビデオコーデックが指定されている場合、ビデオコーデックに参加している機関は通常、標準の構文のみを指定しています。たとえば、「ビットストリーム形式はこのようにする必要があります」、「0x810429AAB
ここに変換されます」などです。多くの場合、リファレンスエンコーダーとデコーダーを提供しますが、エンコーダーはそのようなフォーマットに完全に一致するように書かれたものは、メーカー次第です。
これが、まったく同じコーデックに対して非常に多くのエンコーダが見つかる理由であり、それらのいくつかは市販されています。
用語を混同する前に、例を見てみましょう。 H.264 の場合を考えてみましょう。規格の名前はH.264です。これは実際のエンコーダの名前ではありません。 Mainconceptは非常に優れた商用エンコーダーですが、x264は無料でオープンソースのエンコーダーです。もちろん、どちらも良質を提供すると主張しています。
エンコーディングを最適化できるというだけの事実が、ここでの競争を生んでいます。どちらのエンコーダも、常にH.264準拠のデコーダでデコードできる標準化されたビットストリームを提供します。
つまり、全体として、エンコーダーが次のことを実行するとします。
次に、ビットストリームはコンテナに多重化されます。
デコーダーは:
どちらもコーデック標準に準拠しています。それで全部です!
最近では、おそらく以下で述べるコーデックでエンコードされたビデオのみが見つかるでしょう。興味深いことに、それらのほとんどすべては Motion Picture Experts Group (MPEG)によって作成されました。しかし、他にもいくつかの使用料無料のコーデックがあります。 GoogleまたはAlliance for Open Mediaによって作成されたもので、MPEG標準の競合相手です。
以下に示すように、「MPEG」はコーデックとコンテナの両方を指すことに注意してください。これは混乱を増しますが、「MPEG」だけでは何も意味しないことを知っておいてください。 「MPEG形式のファイルがあります」はveryあいまいです。
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パート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は、AppleによってiOSでビデオと画像を保存するためにも使用されます( [〜#〜] heif [〜#〜] を使用)。ただし、HEVCに関連付けられた複数の特許プールがあるという事実により、多くの企業(ほとんどすべてのアップルを除く)はロイヤルティフリーの代替品に移行しています。また、HEVCはすべてのブラウザーで ネイティブではサポートされていません であるため、Webストリーミングでは使用できません。
最もよく知られているエンコーダはx265です。 [〜#〜] nvenc [〜#〜]もあります。ビデオは通常MP4コンテナーに入っています。
VP9 (VP8の後継)は、主にGoogleが開発したコーデックです。オープンでロイヤルティフリーであり、 多くのブラウザに実装されている 。その品質はHEVCとほぼ同じで、時にはさらに優れています(Netflixによる この論文 を参照)。 VP9は、YouTubeをサポートするブラウザーでYouTubeを見ると得られるものです。
VP9はlibvpxエンコーダーでエンコードでき、WebMまたは[〜# 〜] mkv [〜#〜]コンテナ。
HEVCのさらに強力な競争相手を形成するために集まった企業もありますが、ロイヤリティフリーの代替品です。 AV1 はVP9の後継となり、VP10になるはずだったものに基づいています。 Alliance for Open Media(Amazon、Cisco、Google、Intel、Microsoft、Mozilla、およびNetflixによって設立された)に支えられています。 詳細はこちら をご覧ください。
libaomエンコーダーを使用してAV1ビットストリームを生成できますが、まだ実験段階です。
これまでは、生の「ビットストリーム」についてのみ説明しました。これは、基本的には本当に生のビデオデータです。実際にこのような生のビットストリームを使用してビデオを見ることができます。しかし、ほとんどの場合、それだけでは不十分であり、実用的でもありません。
したがって、ビデオをコンテナにラップする必要があります。理由はいくつかあります。
これらすべての理由により、コンテナー形式が発明され、いくつかは単純で、いくつかはより高度なものでした。それらがすべて行うのは、ビデオビットストリームを別のビットストリームに「ラップ」することです。
コンテナーは、ビデオフレームとオーディオフレームをプレゼンテーションタイムスタンプ(PTS)に従って同期します。これにより、フレームが正確に同時に表示されます。また、必要に応じて、ストリーミングサーバーの情報を追加し、ストリーミングサーバーがファイルのどの部分をいつ送信するかを認識できるようにします。
人気のあるコンテナをいくつか見てみましょう。
動画は主に次のコンテナにラップされています。他にもあまり人気のないものもありますが、私が言ったように、主にそれはそれらです:
オーディオビデオインターリーブ—これは最も基本的なコンテナーで、オーディオとビデオをインターリーブするためだけにあります。 1992年に作成され、現在も使用されていますが、レガシーと見なされているため、今後は使用しないでください。
MPEG-4 Part 14とも呼ばれ、QuickTimeファイル形式に基づいています。これはH.264ビデオの主要フォーマットですが、HEVC、MPEG-4パート2およびMPEG-2もラップします。
このコンテナはオーディオのみをラップすることもあります。そのため、ビデオではなく AACエンコード オーディオである.mp4ファイルが多数あります。これも.m4aファイル(異なる拡張子のみ)にあります。拡張子.m4vは通常、ビデオビットストリームに使用されます。
Matroska Video(MKV)は、オープンソースで無料のファイル形式であり、基本的にH.264からVP9までのあらゆるコーデック、そしてもちろん多くのオーディオコーデックもサポートしているため、今日よく見られます。
WebMはMKVに基づいており、主にVP9ビデオとOpusオーディオに使用されます。これらのコーデックが使用されている場合、Webストリーミングビデオに最適なコンテナーです。
Oggコンテナーは、Theiorビデオコーデック(およびVorbisオーディオ コーデック )に最適なコンテナーで、これもXiph.Org Foundationによって作成されました。また、(コーデックのように)無料でオープンソースです。
Flashビデオ形式は、ストリーミングアプリケーションで使用するためにAdobeによって作成されました。ストリーミングの方法がここ数年で大幅に変更されたため、これはあまり使用されていません。
また、次のうちどれがコーデックで、どれがファイル形式で、どれがどちらでもありませんか?
libavcodec
およびlibavformat
ライブラリに依存しています。今日見つけられるビデオツールのほとんどはそれに基づいています。余談:
正しい用語を使用していますか?
誤解を避けるために、「フォーマット」の代わりに「コーデック」と「コンテナ」を具体的に使用することを好むと思います。コーデックとの両方のコンテナがフォーマット(つまり、データの表現方法)を指定するため、理論的にはフォーマットは何でもかまいません。
そうは言っても、 FFmpeg の用語は、コンテナーに「フォーマット」を使用することです。これは、次の違いも原因です。
libavcodec
、エンコード/デコード用のライブラリlibavformat
、コンテナのライブラリ一般に、メディアの「形式」は実際にはコンテナであり、オーディオストリーム(一部のオーディオコーデックの)とビデオストリーム(一部のビデオコーデックの)、および場合によっては追加情報を含みます。あなたが持っているほとんどの「ファイル」は、コーデックではなくコンテナに基づくファイルタイプを持っています
FFmpegはコンテナーでもコーデックでもありません。多くのコンバーターや音楽プレーヤーの基礎となるファイル変換用のライブラリ、コーデック、ソフトウェアの多用途なスイートです。
H.264/AVCおよびxvid/divxはコーデックです
AVI(divx/xvidファイル)、mp4、mpegはコンテナーです。
Quicktime movについてはわかりません-.movはコンテナで、quicktimeはコーデックです。
codec sと containers (ファイル形式)があります。コーデックは、データがどのようにエンコード/デコードされるかを記述します。もう1つは、エンコードされたデータがファイル内にどのように配置されるかを示します。
ほとんどのメディアプレーヤーは、複数のコーデックとコンテナタイプをサポートしています。これは紛らわしいので、詳細については私のリファレンスを読むことをお勧めします