2025年7月18日金曜日

ffmpeg(ver 7.1.1) 動画をカットしたら音声だけ抜け落ちた

最近古い動画ファイルの不要な部分をカットしようとしたところ音声がない動画ファイルになってしまうという症状に悩んでいました。

やってることは再エンコなしで

ffmpeg -to 00:15:00 -i FileName -c copy CutedFileName

といった感じで不要な末尾をカットしているだけなのですが…

動画ファイルの日付を見ると2022/10/05とか結構昔のファイルです。

ffprobeで元ファイルとカット後のファイルを比べてみると映像と音声のストリームは存在するものの、音声ストリームのDURATIONが00:00:00.000000000となってしまっている。

確かにファイルサイズも音声分サイズが小さくなっている感じにw

色々と検索して調べてみるものの、似たような現象はあるものの、そちらでは音声のみ切り出せるようなのですが、こちらでは切り出しは行えず、再エンコーディングすれば音声を取り出せるのみ。

少し現象が違うものの、原因はffmpegの過去のバグに起因するっぽい感じ。 

aacで再エンコするとかなり高音域の音が歪まくるのでflacを使用するという手もあるのですが、ファイルサイズがそれなりに大きくなってしまうので、割り切って作業を進めることもできず途方に暮れていました。最悪、ffmpegのソースに手を入れて、バグ回避させてビルドすることも考えたのですが、手元にgcc環境が無いので少し時間をおいてみることに。

そして今日、過去のffmpegのバイナリーを使って試してみようかと。

現状メインで使っているのはffmpeg 7.1.1ですが、公式のリンクから存在したのはオートビルドのバイナリが格納されているBtbNさんのところで、現時点で最古のものはAuto-Build 2023-08-31 12:54のもの。

試しにmasterではなく、バージョン4.4.4-6を試してみました。

結果としては、あっさりと音声付きの動画を作ることができました。

同様に、5.1.3-16, 6.0-34でも問題なく動画が作成されました。

これらのバージョンで作成された後のファイルは7.1.1でも正しく処理が通るようになりました。 

今度は逆にどこまでのバージョンがこのバグ回避が行えるか気になったので調べてみると、Auto-Build 2025-07-17 14:10の6.1.2-192でも問題なし。しかし7.1.1-56では音声が無くなる状況に。

version 7ベースで最古のものが Auto-Build 2024-04-30 12:51に含まれていた7.0-21を試したところ、こちらは音声が含まれ問題がなさそうでした。

結論として7.1以上では、どうもバグのあるファイルでは-acodec copyが機能しなくなるのでしょう。

公式でwindows版のビルドを公開しているhttps://www.gyan.dev/ffmpeg/builds/ではprevious release version: 7.0.2が残っているので試したところ問題はない様子。

問題がなければ、現状ffmpegは7.0.2を使うのが幸せなのかな?
  

0 件のコメント:

コメントを投稿