ffmpeg concat demuxing の期間とインポイント

ffmpeg concat demuxing の期間とインポイント

私にはたくさんの h265 クリップがあり、すべて 6 秒の長さです。今、これらを ffmpeg でつなぎ合わせたいのですが (できれば再エンコードせずに)、各クリップの 2 秒目から 4 秒目までの部分だけを使用します。私は concat デマルチプレクサを使用してこれを行いますが、インポイントと継続時間を指定するとすぐに、結果がかなりランダムになります。エラーは発生せず、新しいクリップが生成されますが、長さとインポイントが完全にずれています。
私のクリップは h265 でかなり短いので、編集できるキーフレームがないのではないかと最初に疑いました。そこで、Quicktime Prores クリップ (フレーム内エンコード) でも同じことを試してみましたが、同じように奇妙な結果になりました。問題は別の場所にあるのではないかと考えています。

これは私のコードです(Python から呼び出します):

subprocess.call(['ffmpeg', '-f', 'concat', '-safe', '0', '-i', 'concatlist.txt', '-c', 'copy', '-hide_banner', '-loglevel', 'error', output])

これは私の(自動生成された)テキスト ファイルのサンプルです。

file videos_squares/vt_5Hn8lze0G8A.mp4
inpoint 2.0
duration 2.0
file videos_squares/vt_J8DuC93hLq0.mp4
inpoint 2.0
duration 2.0
file videos_squares/vt_u8twUOpagZs_seg3.mp4
inpoint 2.0
duration 2.0

答え1

concat デマルチプレクサを使用して期間を制限するには、outpoint(値 inpoint + 意図した期間) を設定します。

このdurationキーワードの名前は不適切で、基本的には現在のクリップの開始タイムスタンプを基準として次のクリップの開始タイムスタンプのオフセットを設定します。ただし、現在のクリップからの出力を制限するものではありません。

関連情報