ffmpegを使用してメディアファイルを別のものと全く同じに再エンコードする

ffmpegを使用してメディアファイルを別のものと全く同じに再エンコードする

非常に短いメディア ファイルを長いメディア ファイルの真ん中に配置できるプログラムを作成しています。これには ffmpeg を使用したいと思います。長いファイルを半分に分割し、3 つのファイルを連結できることは知っています (長いビデオの前半 > 短いビデオ > 長いビデオの後半)。連結フィルターを使用してこれを実行しようとしましたが、管理されている Kubernetes プロバイダーに GPU リソースのオプションがないため、非常に長い時間がかかります。

最初と最後のクリップは常にまったく同じ形式になるので (同じソース ファイルから分割されているため)、真ん中の非常に短いクリップだけを 2 つの半分に一致するように変換すればよいことに気付きました。すると、3 つのクリップすべてがその形式になり、単純に concat remuxer を使用できるようになります。

短いクリップも、オーディオ クリップ上で同じ単一フレームを何度もループすることで ffmpeg によって生成されました。したがって、私のアイデアが実現可能であれば、ffmpeg はオーディオと単一のループ フレームのみをトランスコードする必要があります。長いクリップ全体と短いクリップを最初からトランスコードするよりもはるかに優れています。

ffmpegでビデオを再エンコードして別のビデオと一致させるにはどうすればよいですか?その通りそれで、それらを連結して再多重化できますか?

答え1

コメントで @Rotem が述べているように、ffprobe適切なスクリプトを使用して元のビデオのプロパティを分析することはできますが、これでは (おそらく) 十分ではありません。

ストリーム全体をトランスコードせずに任意のタイムスタンプでビデオ ストリームを適切にカットすることはできません (少なくとも ffmpeg では)。キーフレームの境界でのみ可能です。したがって、キーフレームの位置も分析し、それに応じてカット タイムスタンプを選択する必要があります (このトピックを参照してください)。FFmpeg を使用して、指定されたタイムスタンプより前の最も近いキーフレームのタイムスタンプを取得するにはどうすればよいですか?

関連情報