ffmpeg の “fail to compensate for timestamp delta …”

ffmpeg でtsからmp4に変換しようとしたら、”fail to compensate for timestamp delta …”を延々と吐き続けるファイルがありました。

エンコードも途中で終わって再生できません。エンコードにリトライしたら、たまたま最後までエンコードしたように見えても途中から音声が出ません。

こんなとき、

-async 1

にしたら、ひとまず最後までエンコードできました。

もとのオプションは-async 1000でした。

ここで、asyncは音声の同期方法の指定オプションです。

値は、音がズレたときに1秒間で何サンプルまで変更していいかを指定する

-async 1 は特別で、音声の最初だけ同期して後続のサンプルはそのまま

とあります。

どうやら、同期するために変更する時に失敗していたようです。

このファイルだけの問題なのか、他の問題なのかは分かっていません。 今のところ他のファイルでは遭遇していません。

ffmpegのメーリング・リストには、似たような例のレポートがあります。(少し読みにくい)

上の2番目のリンクで -async 1について言及があったので、ためしてみたのです。メールの内容はオプションから -async 1 を削除したらどうかというものですが。