web-dev-qa-db-ja.com

コーデック(DivXなど)とは何ですか。また、ファイル形式(MPGなど)とどう違うのですか?

私はとても混乱しています...オーディオ/ビデオコーデック(どうやら「モデム」が実際に「変調器/復調器」であるような一種の「エンコーダー/デコーダー」の省略形です)とオーディオ/の違いは何ですかビデオフォーマット?
(私は正しい用語を使用していますか?)

例:「MPEG-4」であると言うことと「DivX」コーデックを使用することで何が違うのですか?なぜWindows Media Playerは時々.mpgファイル、場合によってはそうではありませんか?

また、次のうちどれがコーデックで、どれがファイル形式で、どれがどちらでもありませんか?

  • Quicktime MOV
  • MPEG(1、2、3、4)
  • WMV
  • FFmpeg
  • AVC
  • Xvid
  • DivX(パリンドロームXvidとどう違うのですか?)
  • H.264
95
user541686

主な定義:

  • コーデック(H.264、HEVC、VP9など)は、ビデオまたはオーディオ部分のみを担当し、1つ以上のコーデックをコンテナにマージできます。
  • コンテナー(MP4、MKVなど)はそれらをまとめて保持する役割を果たします。これは、通常、選択したメディアプレーヤーで開くものでもあります。
  • 特定のエンコーダー(x264、libvpxなど)は、入力ストリームをコーデック準拠のビットストリームに変換します。多くの場合、1つの特定のコーデックに複数のエンコーダがあります。

ご覧のとおり、ここでいくつかのことを説明する必要があります。

コーデックとは何ですか?

codecは、エンコーダー/デコーダーの略で、基本的には次のことを意味します。エンコーダーによって生成されたデータは、常に適切なデコーダーによってデコードできます。これはたまたまビデオ、オーディオで有効ですが、暗号化について考えることもできます(エンコーダーは、暗号化されたメッセージを表示するために適切なデコーダーが必要です)。

現在、ビデオコーデックが指定されている場合、ビデオコーデックに参加している機関は通常、標準の構文のみを指定しています。たとえば、「ビットストリーム形式はこのようにする必要があります」、「0x810429AABここに変換されます」などです。多くの場合、リファレンスエンコーダーとデコーダーを提供しますが、エンコーダーはそのようなフォーマットに完全に一致するように書かれたものは、メーカー次第です。

これが、まったく同じコーデックに対して非常に多くのエンコーダが見つかる理由であり、それらのいくつかは市販されています。

事例– H.264

用語を混同する前に、例を見てみましょう。 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

MPEG-2はかなり古いものです。最初の公開リリースは1996年からです。MPEG-2ビデオは主にDVDやTV放送に使用されています。 DVB-Tまたはサテライト、および互換性が重要なレガシーアプリケーション。 MPEG-2ビデオは主に。MPGコンテナにあります。

MPEG-4パート2

これはおそらく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パート10/AVC/H.264

これはMPEG-4 Advanced Video Coding(AVC)またはH.264とも呼ばれます。今日最も使用されているコーデックです。小さなファイルサイズで高品質を提供するため、インターネットやモバイルデバイスのあらゆる種類のビデオに最適です。 H.264は、電話からカムコーダーまで、ほとんどすべての最新のアプリケーションにあります。 Blu-rayディスクでは、ビデオはH.264でエンコードされます。

それのためのいくつかのエンコーダーは次のとおりです:x264[〜#〜] nvenc [〜#〜](NVIDIAから)、Mainconcept。ビデオは主にMP4[〜#〜] mkv [〜#〜]またはで提供されます[〜#〜] mov [〜#〜]コンテナ。

HEVC/H.265

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およびAV1

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ビットストリームを生成できますが、まだ実験段階です。


フォーマット(コンテナ)とは?

これまでは、生の「ビットストリーム」についてのみ説明しました。これは、基本的には本当に生のビデオデータです。実際にこのような生のビットストリームを使用してビデオを見ることができます。しかし、ほとんどの場合、それだけでは不十分であり、実用的でもありません。

したがって、ビデオをコンテナにラップする必要があります。理由はいくつかあります。

  • 多分あなたはビデオと一緒にいくつかのオーディオが欲しい
  • ビデオの特定の部分にスキップしたい場合があります(「1:32:20.12に移動」など)。
  • オーディオとビデオの両方が完全に同期されている必要があります
  • ビデオは信頼できるネットワークを介して送信され、パケットに分割される必要があるかもしれません
  • ビデオは損失の多いネットワーク(3Gなど)を介して送信され、パケットに分割される場合もあります。

これらすべての理由により、コンテナー形式が発明され、いくつかは単純で、いくつかはより高度なものでした。それらがすべて行うのは、ビデオビットストリームを別のビットストリームに「ラップ」することです。

コンテナーは、ビデオフレームとオーディオフレームをプレゼンテーションタイムスタンプ(PTS)に従って同期します。これにより、フレームが正確に同時に表示されます。また、必要に応じて、ストリーミングサーバーの情報を追加し、ストリーミングサーバーがファイルのどの部分をいつ送信するかを認識できるようにします。

人気のあるコンテナをいくつか見てみましょう。


人気のコンテナ

動画は主に次のコンテナにラップされています。他にもあまり人気のないものもありますが、私が言ったように、主にそれはそれらです:

[〜#〜] avi [〜#〜]

オーディオビデオインターリーブ—これは最も基本的なコンテナーで、オーディオとビデオをインターリーブするためだけにあります。 1992年に作成され、現在も使用されていますが、レガシーと見なされているため、今後は使用しないでください。

MP4

MPEG-4 Part 14とも呼ばれ、QuickTimeファイル形式に基づいています。これはH.264ビデオの主要フォーマットですが、HEVC、MPEG-4パート2およびMPEG-2もラップします。

このコンテナはオーディオのみをラップすることもあります。そのため、ビデオではなく AACエンコード オーディオである.mp4ファイルが多数あります。これも.m4aファイル(異なる拡張子のみ)にあります。拡張子.m4vは通常、ビデオビットストリームに使用されます。

[〜#〜] mkv [〜#〜] および WebM

Matroska Video(MKV)は、オープンソースで無料のファイル形式であり、基本的にH.264からVP9までのあらゆるコーデック、そしてもちろん多くのオーディオコーデックもサポートしているため、今日よく見られます。

WebMはMKVに基づいており、主にVP9ビデオとOpusオーディオに使用されます。これらのコーデックが使用されている場合、Webストリーミングビデオに最適なコンテナーです。

Ogg

Oggコンテナーは、Theiorビデオコーデック(およびVorbisオーディオ コーデック )に最適なコンテナーで、これもXiph.Org Foundationによって作成されました。また、(コーデックのように)無料でオープンソースです。

[〜#〜] flv [〜#〜]

Flashビデオ形式は、ストリーミングアプリケーションで使用するためにAdobeによって作成されました。ストリーミングの方法がここ数年で大幅に変更されたため、これはあまり使用されていません。


一般的なコーデックとフォーマット

また、次のうちどれがコーデックで、どれがファイル形式で、どれがどちらでもありませんか?

  • Quicktime MOV。movQuickTime File Format のファイル拡張子で、containerですアップルが作成。このコンテナは、後でMP4に適合しました。あらゆる種類のコーデックを伝送できます。 Quicktimeは実際にはメディアフレームワーク全体であり、私が関係している限り、実際にはコーデック自体を指定していません。
  • MPEG(1、2、3、4):動画専門家グループによって定義された規格。詳細については、上記の私の投稿を参照してください。
  • [〜#〜] wmv [〜#〜]:Windows Media Video。これは実際には Advanced Systems Format コンテナにラップされたcodecであり、再び。wmv拡張を使用します。奇妙ですが、それはそうです。
  • FFmpeg:これはコーデックでもコンテナでもありません。これは、さまざまなコーデックやコンテナ間の変換を可能にするビデオツールのライブラリです。 FFmpegは、コーデックとコンテナを作成するために、それぞれオープンソースのlibavcodecおよびlibavformatライブラリに依存しています。今日見つけられるビデオツールのほとんどはそれに基づいています。
  • [〜#〜] avc [〜#〜]:MPEG-4パート10またはH.264の同義語。
  • DivX:MPEG-4パート2ビデオ用の別のタイプのエンコーダー。
  • Xvid:MPEG-4パート2ビデオ用のエンコーダの1つのタイプ。これは単なるオープンソースのDivXの無料バージョンであり、当然、いくつかの論争を引き起こしました。
  • H.264:MPEG-4パート10またはAVCの同義語。

余談:

正しい用語を使用していますか?

誤解を避けるために、「フォーマット」の代わりに「コーデック」と「コンテナ」を具体的に使用することを好むと思います。コーデックの両方のコンテナがフォーマット(つまり、データの表現方法)を指定するため、理論的にはフォーマットは何でもかまいません。

そうは言っても、 FFmpeg の用語は、コンテナーに「フォーマット」を使用することです。これは、次の違いも原因です。

  • libavcodec、エンコード/デコード用のライブラリ
  • libavformat、コンテナのライブラリ
150
slhck

一般に、メディアの「形式」は実際にはコンテナであり、オーディオストリーム(一部のオーディオコーデックの)とビデオストリーム(一部のビデオコーデックの)、および場合によっては追加情報を含みます。あなたが持っているほとんどの「ファイル」は、コーデックではなくコンテナに基づくファイルタイプを持っています

FFmpegはコンテナーでもコーデックでもありません。多くのコンバーターや音楽プレーヤーの基礎となるファイル変換用のライブラリ、コーデック、ソフトウェアの多用途なスイートです。

H.264/AVCおよびxvid/divxはコーデックです

AVI(divx/xvidファイル)、mp4、mpegはコンテナーです。

Quicktime movについてはわかりません-.movはコンテナで、quicktimeはコーデックです。

3
Journeyman Geek

codec sと containers (ファイル形式)があります。コーデックは、データがどのようにエンコード/デコードされるかを記述します。もう1つは、エンコードされたデータがファイル内にどのように配置されるかを示します。

ほとんどのメディアプレーヤーは、複数のコーデックとコンテナタイプをサポートしています。これは紛らわしいので、詳細については私のリファレンスを読むことをお勧めします

1
uSlackr