私は一部を切り取ろうとしている.aviコマンドを使用してファイル
ffmpeg -ss 346 -i input.avi -t 5 -c copy -y output.avi
出力ビデオの合計時間は約13秒で、必要な時間より8秒長くなります。しかし、出力ファイルの拡張子を次のように指定すると、.mp4、カットは正確です。なぜこのようなことが起こるのか理解したいと思います。
どのような助けでも大歓迎です。
答え1
AVI と MP4 はデータ ストリームのコンテナーであり、MP4 の方がはるかに優れています。
MP4コンテナでは、内部的にリストを編集。
たとえば、ソース ビデオから 346 秒から 351 秒をコピーするとします (実際にそうしているように見えます)。346 秒より前の最も近いキーフレームが 338 秒にある場合、ffmpeg は実際には 338 秒からビデオをコピーしますが、MP4 の編集リスト マジックを使用して、メディア プレーヤーに最初の 8 秒をスキップするように指示します。
同じ論理かもしれないカットの最後にも適用されます (確信はありません。テストする必要があります)。そうであれば、編集リストはメディア プレーヤーに再生を早く停止するように指示します。
AVI は MP4 のように編集リストをサポートしていないため、AVI コンテナでは 13 秒のカット全体が表示されます。
これが意味を成すことを願っています。質問がある場合はコメントを残してください。明確に説明できるよう努めます。
編集ffmpeg が何をしているかを視覚的に示すために図を作成しました。