映像とコーデック
動画ファイルにまつわる混乱のほとんどは、「箱」と「その中身」という一つの区別から生まれています。ここではその両方を表す言葉と、両者の間でものを移動させる操作を表す言葉をまとめます。
-
コンテナ
ラッパー、フォーマット -
映像・音声・字幕の各トラックをまとめて保持し、それぞれがどこにあるかを記述するファイル構造。MP4、MKV、AVI、WebMはいずれもコンテナです。コンテナ自体は何も圧縮しません。
内容物のラベルが貼られた収納箱だと考えてください。箱にはこう書いてあります——ここに映像トラックが1つ、この方式でエンコードされている。あそこに音声トラックが2つ、それぞれこの言語で。このオフセットに字幕がある、と。それらがどう圧縮されたかについて、箱自体は何の意見も持ちません。
同じ動画が画質もファイルサイズもまったく同じままMP4にもMKVにも存在でき、しかも片方はiPhoneで開けてもう片方は開けない、という現象が起きるのはこのためです。違うのは箱であって、中身ではありません。
-
コーデック
coder-decoder(符号化・復号方式) -
映像や音声のストリームを圧縮し、再生のために再び展開する方式。H.264、HEVC、AV1、AAC、MP3はいずれもコーデックです。コーデックはファイル形式ではありません。
名前自体がcoder-decoder(符号化器・復号化器)の短縮形です。エンコードは気づかれにくいよう計算されたやり方で細部を捨て、デコードは残された情報から元の近似を再構築します。優れたコーデックほど、同じサイズでも失われた部分が気づかれにくくなります。
デバイスがファイルを再生できるのは、コンテナを読み取れて*かつ*中の全コーデックをデコードできるときだけです。両方が必要で、ファイルは開くのに何も表示されないときは、後者が失敗しています。
以下も参照してください。 コンテナハードウェアデコード
-
H.264
AVC、MPEG-4 Part 10 -
ほぼすべてがデコードできる映像コーデック。2003年公開で、互換性の面では今も最も無難な選択肢であり、過去15年に作られたあらゆる電話・パソコン・テレビでハードウェアアクセラレーションが効きます。
H.264はあまりに徹底的に普及したため、「どこでも再生できるか」と「これはH.264か」がほぼ同じ問いになっています。利用可能な中で最も効率のよいコーデックではありません——HEVCもAV1も、より少ないビット数でより多くを表現できます——が、対応範囲の広さでは他の追随を許しません。
H.264にはいくつかのプロファイルがあり、その一つがApple製デバイスで問題を起こします。しばしばHi10Pと表記されるHigh 10は、色チャンネルあたり8bitではなく10bitでエンコードします。ハードウェアデコーダーは8bit専用のため、Hi10Pのファイルはソフトウェアによる代替経路を持たないデバイスでは、音は出るのに映像が出ません。
以下も参照してください。 HEVCハードウェアデコード10bit
-
HEVC
H.265 -
H.264の後継で、同じ画質でおおよそ半分のサイズになります。2015年以降のあらゆるApple製デバイスがハードウェアでデコードでき、iPhoneが撮影に使うのもこの形式です。
HEVCは、スマホで4Kを実用的なものにしました——同じ画をおおよそ半分のビットレートで実現できるからです。Appleは早くから、そして徹底的にHEVCを採用したため、Apple製ハードウェア上ではH.264と同じくらい安心して使えます。
他の環境ではもう少し複雑です。HEVCをめぐる特許ライセンスは対立が大きく、Webブラウザの対応が遅れました。AV1が生まれたのは、まさにこの隙間を埋めるためでした。
-
AV1
-
2018年公開のロイヤリティフリーなコーデックで、HEVCより効率がよく、HEVCとは違いライセンス紛争もありません。Apple製デバイスでハードウェアデコードが載ったのはiPhone 15 Proからです。
AV1が生まれたのは、HEVCのライセンス問題によって大手のストリーミング企業やブラウザ企業が、誰にも支払わずに出荷できる代替を求めたからです。今では大量のWeb動画がこの形式で配信されています。
難点はデコードのコストです。ハードウェア対応がない場合、AV1はソフトウェアでデコードされ、それ自体は可能でもバッテリーを目に見えて消耗し、高解像度ではカクつくこともあります。古い端末では、同じ動画のH.264版のほうが扱いやすいファイルです。
以下も参照してください。 HEVCハードウェアデコード
-
ビットレート
-
映像や音声の1秒あたりに使われるデータ量で、通常はメガビット毎秒(Mbps)で表されます。ファイルサイズと、デバイスがどれだけ働く必要があるかの両方を左右する主要な要素です。
注目されがちなのは解像度ですが、ファイルの実際の見え方を左右するのはビットレートです。低ビットレートの4Kファイルは、高ビットレートの1080pファイルより見劣りすることがあります。エンコーダーが目標のサイズに達するために、より多く情報を捨てているからです。
カクつきの原因もたいていここにあります。パソコンでは滑らかに再生できる動画がスマホでカクつくとき、ファイル自体に問題はありません。単に、そのチップがこなしたい以上のデコード処理を、1秒あたりに要求しているだけです。
以下も参照してください。 コーデックアダプティブビットレート
-
再多重化
リマックス -
既存の映像・音声ストリームを、再エンコードせずに別のコンテナへ移すこと。無劣化で、プロセッサーではなくディスクの速度で制限されるほど高速です。
再多重化はストリームをコピーするだけで、1フレームにも触れません。H.264とAACを保持する1時間分のMKVは、数秒でMP4になり、映像も音声もビット単位で同一のままです。
これがうまくいくのは、移動先のコンテナが元の中身を受け入れる場合だけです——MP4はH.264とAACを受け入れますが、VP9やVorbisは受け入れません。変換が「一瞬」で終わったと言う人がいたら、それは再多重化されたということです。1時間かかったなら、何かが再エンコードされたということです。
-
再エンコード
トランスコード、変換 -
ストリームをデコードし、別のコーデックやより低いビットレートで再びエンコードすること。時間がかかり、しかも毎回劣化を伴います——画質は二度と戻りません。
人々が「動画を変換する」と言うとき指しているのはたいていこれで、実際に負荷の大きい処理です——すべてのフレームがデコードされ、処理され、再び圧縮されます。コーデックが本当に非対応のときや、ファイルを小さくする必要があるときには正しい選択です。
「スマホで開けない」という問題に対しては、本来なら再多重化で済んだはずなのに間違った答えになりますし、DTS音声トラックだけが問題のファイルに対しても不向きな答えです——音声トラックだけを差し替えれば、映像には一切手を触れずに済みます。
-
ハードウェアデコード
-
メインプロセッサーではなく専用チップで映像をデコードすること。はるかに高速で、発熱も少なく、バッテリーにも優しい——ただし、そのために作られたコーデックしか扱えません。
どのスマホにも、H.264とHEVCを極めて効率よく処理する専用の映像デコーダーが搭載されています。それが対応していないものはソフトウェアの処理に回され、動作はしますがバッテリーと発熱を消費し、高解像度では追いつかないこともあります。
スマホでの形式対応が単純な「はい・いいえ」で語れない理由はここにあります。あるデバイスは、あるコーデックを1080pではソフトウェアで完璧に再生できても、4Kでは同じコーデックに失敗することがあり、そのどちらの結果も、ファイルが壊れていることを意味しません。
-
10bit
Hi10P、High 10 -
色チャンネルあたり8bitではなく10bitで保存し、より滑らかなグラデーションを実現する映像。HEVCでは普通のことで十分に対応されていますが、H.264では、iPhoneで音は出るのに映像が出ないファイルの最も一般的な原因です。
チャンネルあたりのビット数が多いほど、色の階調が細かくなり、暗い空やゆっくりしたフェードで見えるような色の帯(バンディング)が消えます。HDRにとってこれは改良ではなく必須要件です。
問題となるのはH.264だけです。10bitのH.264はハードウェアデコーダーが実装している範囲の外にあり、Appleのシステムプレーヤーにはそのためのソフトウェア経路がないため、音声は再生されても映像は決して届きません。アニメのリリースでよく使われる形式であるため、この形式全体のシェアから想像するよりもずっと頻繁にこの問題が発生します。
以下も参照してください。 H.264ハードウェアデコード
-
キーフレーム
Iフレーム -
前のフレームとの差分ではなく、完全な状態で保存されているフレーム。シークはキーフレームにしか着地できないため、動画が指定した瞬間より少しずれた場所に飛ぶことがあります。
映像圧縮は、ほとんどのフレームを前後との「変化分」として記述することで成り立っています。単独で存在するのはキーフレームだけで、通常は2〜10秒おきに現れます。
シークバーをドラッグすると、プレーヤーは最も近いキーフレームを探してそこから再生を始めます。キーフレームの間隔を広げるとファイルは小さくなりますがシークは粗くなります。このトレードオフはエンコード時に決まり、再エンコードなしには後から変更できません。