動画コンテナーとコーデックをやさ〜しく説明しちゃうよ。ファイル形式入門講座!

動画ファイル入門

こんにちは、みなさん。

動画、見まくってますよね。きっとそうだ。色んなアレとfmaofoffnaka kdszz

動画というと、.MP4、.MKV、.FLV、.AVI、.MOV、.3GP、.WEBM、を思い浮かびますよね。 全部動画なのに、なんでファイル拡張子がそれぞれ違うのか、気になりませんか? パソコンが無事にMP4を再生しているのに、なんで一つのMP4が再生されないのか、気になりませんか?

いいえ、気になりませ 気になりますね!!!!!

今回は動画ファイルについて、詳しく勉強しましょう!

ファイル形式と、動画コーデック

ファイル形式

まずは、ファイル形式とはなんでしょう?

ファイル形式とは、情報がコンピューターに読み取れるように、情報を構造する方法のことです。

この整数の配列って、何を表そうとしているかわかりますか?

227   7   8  19  30  51  32  10  33  90  29  80  30  43  31  32

人間だったら少し考えれば解読するツワモノがいるとおもいます。でもコンピューターにはこの整数の配列の意味を察することはできません。

果たして、この配列は何を表現しているのでしょうか。

実は、2019年8月19日以来の温度と降雨の確率(%)なのです。(227 + 7 = 0b11111100011 = 2019)

つまり、

日付 温度 降雨の確率
2019年8月19日 30℃ 51%
2019年8月20日 32℃ 10%
2019年8月21日 33℃ 90%
2019年8月22日 29℃ 80%
2019年8月23日 30℃ 43%
2019年8月24日 31℃ 32%

このように、ファイル形式は、情報を一つの方法で、情報を整えます。 情報の整え方さえわかれば、上記みたいな数字の羅列でも意味がわかるはずです。 ファイル形式はその整え方なのです。

動画の話だと、そのファイル形式は多くの場合、「コンテナー」といいます。

動画には、動いてる画像だけではなく、(複数の)音声も、たまには(複数の)字幕も入ってますよね?いろんなことを一つのファイルにまとめるのは、コンテナーの役目ってわけです。

動画と音声を一つのファイルにまとめるのは簡単な作業ではありません。

ここで、すごく簡単な説明をしましょう。簡略化されているため、100%正確な説明ではありませんが。

動画の情報をこれ

VVVVVVVVVV VVVVVVVVVV VVVVVVVVVV

音声の情報をこれ

AAAAAAAAAA

としましょう。音声情報が短いのは、使う容量が動画より少ないからです。

このように混在させるのはNGです。

VVVVVVVVVV VVVVVVVVVV VVVVVVVVVV AAAAAAAAAA

その理由は、同時に動画と音声を再生するには、ファイルを先に全部ダウンロードしなきゃいけないのです。映画の場合は大変なことになります。

こんな混ぜ方もだめです。

AVAVAVAVAV AVAVAVAVAV VVVVVVVVVV VVVVVVVVVV

その理由は、音声が動画より先に終わってしまいます。(*すごく簡単化された説明です。この理由には限りません)

正解は、

VVVAVVVAVV VAVVVAVVVA VVVAVVVAVV VAVVVAVVVA

もちろん、実際にはこう簡単に混ぜられませんが、簡単に説明するとこの仕組みになってます。

動画と音声(と字幕)の混ぜ方を決めてるのは、そのコンテナーです。

今良く使われているコンテナーはこちらです:

  • MP4 (MPEG 4) - ISOに定義されたコンテナー。Webでよく見られるコンテナーです。
  • MKV (Matroska Video) - Steve Lhommeさんに開発されたオープンなコンテナー形式。これも結構見かけます。特に画質・音質にこだわってるファイルに。
  • WEBM (Web Movie) - Googleに開発されたコンテナー。YouTubeはMKVの他にこれも使ってます。
  • Ogg - Xiphに開発されたオーペンなコンテナー形式。今は、MKVが代わりに多く使われていますが、Wikipediaなどのサイトにまだ良く使われるコンテナー。
  • FLV (Flash Video) - Adobeに開発されたコンテナー。今はもう使われていません。YouTubeと、フラッシュゲームなどに使われていましたが、今はもう死んでます。
  • AVI (Audio Video Interleave) - Microsoftに開発されたコンテナー。これも今はもう使われていません。昔のデジカメなどはこのコンテナーを使ってました。
  • MOV (QuickTime File Format) - Appleに開発されたQuickTime用コンテナー。これは実際に見たことがありませんが、Macを使ってないため、まだ使われているかどうかわかりません。とりあえず、汎用性の低いコンテナーですので、サイトを開発するなら、使えるもんでも使わないほうがいいです。

コーデック

では、コーデックとは何でしょうか?

コンピューターには音声を直接録音することはできません。コンピューターには、整数の配列しか保存できません。それでは、コンピューターはどうやって音声を保存しているのでしょうか?

(実際の)写真と音を、整数の配列に変換する方法とは、コーデックのことです。

例えば、この写真だったらどのようにまとめるでしょうか。

もし、画素(ピクセル)を、それぞれRGBの値を保存するなら行ける? でも、パソコンが読み込むときは、どうやってその解像とサイズを解読する? つまり、サイズ(W+H)を、先に保存すればいいのです!

ということで、結果は

  3   3
  0 255 255 255   0   0 255   0   0
  0 255   0 255   0   0   0 255   0
255   0   0 255   0   0   0 255 255

(※改行は読みやすくするため入れたものです。ファイルには、改行がありません。)

になりますよね!実は、Microsoftの開発したBMPは、かなり近いです!(いくつの違いは、RGBではなく、BGRで保存していて、逆に【下から上まで】スキャンして、保存しています。)

こうやって、画像の変換方法が決まれば、画像の読み書きができるようになります!

コーデックもかなり複雑なものです。画像と音声をそのまま保存すると、特に1080pの動画だとそのサイズがものすごいことになってしまいますので、 コーデックにも、圧縮の機能などが入っています。動画と音声圧縮は別の記事で話しましょう!

音声と動画の保存方法を決めるのは、コーデックのことです。

今YouTubeの主に使っている動画コーデックはこちらです:

  • AVC (H.264) - 144p, 240p, 360p, 480p, 720p, 1080p
  • VP9 - 144p, 240p, 360p, 480p, 720p, 1080p
  • AV1 - 144p, 240p, 360p, 480p, 720p

古い動画では、その他のコーデックも使われていますが、現在では主にこれらを使っています。

ちなみに、世界初よく使われるようになった動画コーデックを知っていますか? はい、1993年に開発された、AVC(H.264)の祖父のH.261です!

例として、これがH.261(動画、1993年)とMP2(音声、1993年、MP3の前任者ですよ!)の動画です!

そして、もし最先端のコーデック・H.264(動画、2003年)とOpus(音声、2012年)を使うのならこうなります!

すごいことは、H.261版は857キロバイトで、H.264版は605キロバイトだけど、H.264の方の画質(音質も)が優れていますね!技術ってすごいですね!

*注意:H.261に対応しているブラウザーがないため、この動画は実はH.264になっています。なお、SafariはOpusに対応していないため、MP3で提供する必要があります。それでも、この動画は本当にH.261の動画から変換されているものですので、画質と音質に変わりはありません。

コンテナーに合うそれぞれのコーデック

コンテナーによっては、合うコデックもあります。例えば、MP4コンテナーは、主にAVC(H.264)と一緒に使います。

この表には、音声コーデックも入ってますが、音声コーデックについては、他の記事で詳しく話しましょう!

コンテナー よく使う動画コーデック よく使う音声コーデック
MP4 H.264、H.265 MP3、AAC
MKV なんでも なんでも(公式にはWavPackがおすすめ)
WEBM VP8、VP9 Vorbis、Opus
Ogg Theora Vorbis、Opus
FLV Sorenson/VP6 MP3
AVI Indeo、MJPEG、H.264など WAVなど

まとめると、答えは

全部動画なのに、なんでファイル拡張子がそれぞれ違うのか

画像データと音声データの混ぜ方によっては、コンテナーが違うからです^^

MP4として保存されたファイルに、.MKVのファイル拡張子をつけると、パソコンがそのファイルをMKVとして勘違いして、MKVとして読み取ろうとしますが、もちろん読み取れません。

Windowsの場合はそうですが、Linuxでは「Magic Number」というファイルの中の情報を確認して再生しますので、MP4ファイルにMKVファイル拡張子をつけても、勘違いせずに、ファイルが正しく認識されて、ちゃんと再生されます。もちろん、全然ファイル拡張子をつけなくても問題ありません。

この写真のように、拡張子のついてないファイルは、Windowsでは表示されなくなりますが、Linuxでは表示されるままです。

パソコンが無事にMP4を再生しているのに、なんで一つのMP4が再生されないのか

おそらく、そのパソコンはMP4の中のAVC(H.264)に対応していますが、そのMP4の中の動画コデックはAVCではないかもしれません。(H.261かな?)

最後に

いかがでしたでしょうか!ちょっとマニアックですが、楽しいですよね。

参考にしていただけたら嬉しいです!

次回は、いろんな動画コーデックを(最新技術も含めて)比べてみましょう!!(サンプル作ります)

ではでは〜 ぜひ案件依頼してね♪