0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

同じ .mp4 でも処理できたりできなかったり — コンテナとコーデックは別物

0
Posted at

同じ二つの .mp4、一方はちゃんと処理できて、もう一方はインポートした途端に「非対応」と出る。最初はツールのバグに見えるが、実は「コンテナ」と「コーデック」を同じものと思っているだけだ。この二層は分かれていて、拡張子は外側の層しか言っていない。

.mp4、.mov、.webm、.mkv はコンテナ、音声と映像のトラックを入れる箱を指す。箱の中の映像データが何のコーデックで圧縮されているかは別の話だ。同じ MP4 の箱でも中身は H.264 かもしれないし、H.265 や AV1 かもしれない。WebM なら VP9 か AV1。拡張子は箱の形を言うだけで、中身がいまの環境で開けるものかは言っていない。

コンテナ(拡張子) 中にあり得る映像コーデック
.mp4 / .mov H.264、H.265(HEVC)、AV1…
.webm VP8、VP9、AV1
.mkv ほぼ任意の組み合わせ

だから「処理できるか」という問いは、拡張子ではなく、中のトラックの本当のコーデック、そしていまのブラウザがそれを復号でき、望む出力コーデックを符号化できるかを問うている。ブラウザが H.264 を復号できるのはよくあるが、H.265 は限らない。H.264 を符号化できても AV1 はとは限らない。これらは互いに独立で、どれか一つでも満たさなければ、その「.mp4」はこの端末では処理できない。

ImgIng の動画圧縮では、インポート後に拡張子を信じず、コンテナ内の本当の音声・映像トラックのコーデックを直接調べる。説明もはっきりしている——MP4、MOV、WebM、MKV はコンテナに過ぎず、中身はいまのブラウザが非対応のコーデックかもしれない、と。この一手は過剰な慎重さではなく、「UI 上はインポート成功、符号化の途中で失敗」を避けるためだ。中に何が入っていて、この端末が処理できるかを先に確かめてから、処理させるかを決める。

AV1 が典型だ。圧縮率は高いが符号化コストが大きく対応も狭いので、ImgIng は実行時の能力検出が通ってから開放する。UA から「たぶん対応」と推測するのではなく、いまの環境が実際に AV1 を符号化できるか探ってから提示する。「ブラウザが対応と表示するのに実際は符号化できない」とは別世界だ。片方は UI の約束が実行で崩れ、もう片方は実行前に確認する。

ここで私の境界を。動画のコーデック自体はブラウザの WebCodecs を通り、私が作ったエンジンではない。私の層はインポート時のトラック検査と能力探索のスケジューリングだ。そこから言えるのは、「同じ MP4 で処理できたりできなかったり」に出くわしたら、ツールを疑う前に二つのファイルの本当の映像コーデックを見ること。多くは一方が H.264、もう一方が H.265 か別物で、端末は前者しか復号できない。

結論は一言。拡張子は箱、コーデックが中身、処理可否は中身と端末が一緒に決める。 ある動画があるツールで処理できるかは、.mp4 か .webm かではなく、中のトラックの本当のコーデックを見て、この端末が復号・符号化できるかを見る。もう一つ硬い条件がある。WebCodecs のローカル変換には HTTPS か localhost の安全なコンテキストが要る。これが無ければ以上のすべては成り立たない。使ったのは ImgIng(imging.ai)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?