MP4 が再生できない理由と、コンテナーの正体
再生できない MP4 が壊れていることは、めったにありません。拡張子が示しているのはコンテナー、つまりストリームとそのタイムスタンプを収めた入れ物の名前だけです。デコードしなければならないのは中身のコーデックであり、同じ .mp4 が、10 年前のスマートフォンでも再生できる H.264 を収めていることもあれば、2 年前のテレビが手も出せない AV1 を収めていることもあります。ある MP4 は再生できて別の MP4 は再生できないのは、これが理由です。
どの動画ファイルにも当てはまる問いが 2 つあります。どの入れ物に入っているのか、そして映像はどう圧縮されているのか、です。入れ物を替えるのはたいてい無料ですが、圧縮を替えるのは決して無料ではありません。
コンテナーは入れ物、コーデックは映像
| コンテナー | 映像コーデック | 音声 | 対応状況 |
|---|---|---|---|
| MP4 | H.264、H.265、一部の AV1 | AAC、MP3 | どこでも |
| WebM | VP8、VP9、AV1 | Opus、Vorbis | ブラウザーのみ |
| MKV | ほぼ何でも | AC-3、DTS、何でも | デスクトップの再生ソフト。ブラウザーは不可 |
| MOV | H.264、H.265、ProRes | AAC、PCM | Apple 環境、編集用途 |
| AVI | DivX、Xvid、MJPEG | MP3、PCM | 古い Windows |
MKV は何でも許容するコンテナーで、保管には向いていますが配信には向きません。妥当な MKV であっても、どのブラウザーも開けない組み合わせを収められるからです。MOV と MP4 は構造の大半を共有しているので、両者の変換はインデックスを書き直すだけで済むことがよくあります。ファイルの中身を調べてみましょう。
input.mp4
Stream #0:0 Video h264 (High) 1920x1080 30 fps 4200 kb/s
Stream #0:1 Audio aac (LC) 48000 Hz stereo 128 kb/s
重要なのは「Video」の後ろにある語です。「mp4」という語からは、ほとんど何も分かりません。
どのコーデックがどこで再生できるか
| コーデック | 同等品質に必要なビット数 | ライセンス | 対応状況 |
|---|---|---|---|
| H.264 (AVC) | 基準。100% とする | パテントプール。ほぼどこでもライセンス済み | ほぼすべての環境 |
| H.265 (HEVC) | 50 ~ 65% | 複数のプールが競合。高額で未解決 | Apple は対応。ブラウザーはまちまち |
| VP9 | H.265 と同程度 | ロイヤリティフリー | Chrome、Firefox、Edge、Android |
| AV1 | 30 ~ 50% | ロイヤリティフリー | 現行のブラウザー、比較的新しいハードウェア |
H.265 は技術的には優秀ですが商業的に扱いにくく、そのため対応状況は技術ではなくベンダーの線に沿って分かれています。AV1 は圧縮率が最も高い一方でエンコードがはるかに遅く、ときには 1 桁遅くなります。そのため、一度エンコードして何度も視聴される動画に向いています。視聴環境が分からない相手には、依然として MP4 に入れた H.264 が答えであり、Compress Video もこれを対象にしています。
ビットレート、解像度、フレームレート
ビットレートは出力 1 秒あたりのビット数であり、ファイルサイズはこれだけで決まります。再生時間を掛ければ、そのままファイルサイズになります。
1920 x 1080 x 30 fps x 3 bytes = about 186 MB per second raw
delivered at 4 Mb/s = about 0.5 MB per second
解像度を 2 倍にすると画素数は 4 倍になりますが、必要なビット数は 4 倍にはなりません。大きなフレームでは隣り合う画素どうしがより似ており、圧縮が効くからです。おおむね 2 ~ 3 倍と見込んでください。したがって幅と高さを半分にするのは、ファイルを小さくする最も安上がりな手段の 1 つです。これが Resize Video で、Crop Video は画素そのものを捨てます。フレームレートの影響はもっと穏やかで、30 から 60 に上げても 100% ではなく 20 ~ 40% の増加にとどまります。Change Video Speed は、その代わりにタイムラインを短くします。
レートの制御方法は 3 つあります。
- 固定ビットレート は全体を通して 1 つのレートを保ちます。静止したカットではビットを無駄にし、激しい動きでは破綻します。帯域に厳格な上限がある回線に向いています。
- 目標値付きの可変ビットレート は平均をならし、シーンどうしでビットを融通させます。サイズが予測できるので、出力を決められた上限に収める必要があるときに使います。
- 固定品質 は通常 CRF 値で指定し、品質を固定してビットレートを必要なところに使わせます。サイズは予測できませんが品質は均一で、ストリーミングではなく視聴されるものの既定の選択肢です。
H.264 の CRF は 0 から 51 までで、値が小さいほど高品質です。18 なら元の映像とほぼ区別がつかず、23 が妥当な既定値、28 を超えると動きが破綻します。この尺度はコーデック間で共通ではありません。
キーフレームと、トリムが無料になることがある理由
I フレーム、つまりキーフレームは、それ単体でデコードできる完全な画です。P フレーム は、前のフレームからの変化分だけを保存します。B フレーム は前後両方のフレームから予測するもので、最も圧縮が効きます。デコーダーが表示前にフレームを保留することがあるのは、このためです。
キーフレームとそれに依存するフレームの集まりがピクチャーグループで、Web 向けのエンコーダーはこれを 2 秒程度ごとに置きます。グループの途中で切ると、残ったフレームがファイルに存在しない画を参照することになります。トリムに 2 つのモードがあるのは、そのためです。ストリームをコピーする方式は瞬時で無劣化ですが、キーフレームにしか着地できないため、開始位置が最大でグループの長さぶんずれます。再エンコードする方式は指定した位置にキーフレームを置きますが、時間と品質を犠牲にします。Trim Video は両方を提供しています。フレーム単位の正確さが要らないならコピーを使ってください。
再エンコードが品質を損なうのは、非可逆処理のたびに、モデルが最も見えにくいと判断した部分を捨てるからです。もう一度エンコードすると、2 回目の処理は 1 回目のアーティファクトを本物のディテールとして扱い、それを保存した上で自分のアーティファクトも加えます。こうして誤差が世代ごとに積み重なります。コンテナーだけを変えるならストリームをコピーし、音声だけを外すなら映像をコピーしてください。後者を行うのが Mute Video です。Rotate Video は画素を回さずに回転フラグを立てることもできますが、このフラグを無視する再生ソフトでは元の向きのまま表示されます。画素を変える必要があるときは、すべてを 1 回の処理でまとめて変えてください。
もう半分は音声トラック
音声は独立したストリームであり、独自のコーデック、サンプルレート、チャンネル配置を持ちます。そして、ファイルが再生できない原因としてもよくあるものです。H.264 の映像は問題なくデコードできるブラウザーでも、AC-3 や DTS のサラウンドはデコードできないことがあり、無音になるか、ファイル全体が再生できなくなります。MKV に入ったディスクのリッピングは、この形で頻繁に失敗します。
サンプルレートは波形を測定した頻度です。CD 由来なら 44100 Hz、映像の標準は 48000 Hz です。配信で安全な選択肢は 48000 Hz ステレオの AAC で、話し声なら 128 kb/s 前後、音楽なら 192 kb/s 前後です。Extract Audio はトラックを MP3、WAV、AAC、Opus として取り出します。
動画を GIF にする
GIF は 1987 年の静止画フォーマットに、動き補償を持たないアニメーション機能を後付けしたものです。各フレームはおおむね単独で圧縮されるため、同じ映像が無音の MP4 なら数百キロバイトで済むところ、5 秒で数メガバイトに達することがあります。1 フレームあたり 256 色が上限で、透明度は 1 ビット、音声はありません。
品質の勝負どころは、この色数の制限です。汎用の固定パレットはグラデーションに縞を生じさせ、強いディザリングを強います。そのノイズはほぼランダムなので圧縮が効かず、ファイルを肥大させます。クリップ自体からパレットを作り、そこに各フレームを対応付ければ、画は良くなり、ファイルも小さくなることが多いです。Video to GIF はこの処理を行います。GIF は短く、幅も抑えて作ってください。2 ~ 3 秒、幅 480 ~ 640 ピクセル、毎秒 10 ~ 15 フレームが目安です。配信先が動画を受け付けるなら、無音の MP4 を送りましょう。
Web で通用する設定
- とにかく再生できることが最優先なら、MP4 に入れた H.264 と AAC 音声。
- CRF は 23 前後。細かい文字が入る画面録画なら 20 まで下げ、背景用の映像なら 26 まで上げる。
- 表示される幅にリサイズする。圧縮の後ではなく前に行う。
- faststart を有効にする。インデックスが先頭に置かれ、ダウンロードが終わる前に再生を開始できる。
ここで挙げた処理はすべて手元のマシンのブラウザー内で動くため、何もアップロードされませんし、制約になるのはサーバーの割り当てではなくメモリです。長い 4K ファイルのデコードバッファーはタブのメモリを使い切ることがあるので、まずトリムし、次にリサイズしてください。