WebCodecsのAACエンコーダは音声を44ミリ秒遅らせる——Mediabunnyが「Project Sync」で完全同期に挑む
Project Sync: The journey to sample-perfect audio/video sync with WebCodecs
Mediabunnyの作者Vanilagyが、WebCodecsを使った音声変換で映像と音声がずれる問題を追及した記録。原因はAACエンコーダが加える「エンコーダプライミング遅延」で、Appleの実装では2112サンプル(44ミリ秒)に達する。WebCodecsはこの遅延を通知せず、タイムスタンプを0から始めると誤って扱う。そこでインパルス信号を使い、実行環境ごとに遅延を実測して補正する仕組みをMediabunnyに組み込んだ。さらにMP4、WebM、MPEG-TSなど各コンテナで負のタイムスタンプを扱えるよう改修している。
私の完全に根拠のない推測だが、人間は遅れて届く音を正しく知覚するように進化したのではないだろうか。現実世界では音速が驚くほど遅いため、実生活でも「ずれ」は起こり得るのだ。