![[ffmpeg] -codec copy でシーク値が小さい場合、入力シークによって出力ファイルの継続時間が不正確になるようです](https://rvso.com/image/1585854/%5Bffmpeg%5D%20-codec%20copy%20%E3%81%A7%E3%82%B7%E3%83%BC%E3%82%AF%E5%80%A4%E3%81%8C%E5%B0%8F%E3%81%95%E3%81%84%E5%A0%B4%E5%90%88%E3%80%81%E5%85%A5%E5%8A%9B%E3%82%B7%E3%83%BC%E3%82%AF%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E5%87%BA%E5%8A%9B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%B6%99%E7%B6%9A%E6%99%82%E9%96%93%E3%81%8C%E4%B8%8D%E6%AD%A3%E7%A2%BA%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%88%E3%81%86%E3%81%A7%E3%81%99.png)
私は再エンコードせずにいくつかのmp4ファイルの先頭から数秒を削除しようとしていました。最初は出力シーク、つまり
E:\>ffmpeg -i input.mp4 -ss 00:00:05 -t 00:01:00 -c copy output.mp4
しかし、出力ファイルの冒頭で数秒間フレームがフリーズしてしまいました(これはキーフレームのシークに関係していると思われるので、フラグ-copyinkfを追加してみましたが、効果はありませんでした)。そこで、入力シークを使用しようとしました。
E:\>ffmpeg -ss 00:00:05 -i input.mp4 -t 00:01:00 -c copy output.mp4
結果として得られた出力ファイルは、出力ファイルの継続時間情報が実際の値と異なっていたことを除いて、最初はスムーズかつ正確に再生され、爽快でした。上記のコマンドは、継続時間が 00:01:00 のビデオ ファイルを生成するはずでした。しかし、代わりに 00:01:00 の長さのビデオを含む、継続時間が 00:01:05 のファイルが生成されました。また、より大きなシーク値で試してみましたが、問題なく動作しました。
E:\>ffmpeg -ss 00:00:10 -i input.mp4 -t 00:01:00 -c copy output10.mp4
E:\>ffmpeg -ss 00:00:15 -i input.mp4 -t 00:01:00 -c copy output15.mp4
なぜ両者に違いがあるのか分かりません。どなたか助けていただければ幸いです。ご協力いただければ幸いです。
ノート:
- ffmpeg バージョン N-93439-gb073fb9eea、いくつかの古いリリースを試してみましたが、同じ出力が得られました。
- 入力ファイルのビデオ コーデックとオーディオ コーデックはそれぞれ avc と aac です。