MP4 ファイルから一部を切り取るにはこれを使います:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4
動作は良好ですが、ビデオ画像は常に最初に 1 秒間フリーズします。
どのビデオファイルから一部を切り取ろうとしても、ビデオが始まるまでに 1 秒ほどかかります。
例を挙げます私が見ているものの。
答え1
問題は、ビデオがフレーム間のカットではなくキーフレームのみに基づいてカットしようとしていることと、初期時間がキーフレームより数秒進んでいることにある可能性があります。解決策は、オプション00:36:18
を使用することです。-copyinkf
マニュアルには次のように記載されています:
ストリームのコピーを行うときに、先頭にある非キー フレームもコピーします。
したがって、コマンドは次のようになります。
ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4
-copyinkf
次に、次のように調整して混ぜ合わせる必要があります。
ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4
答え2
コピー元のタイムスタンプはキー フレーム間にあります。インター フレーム コーデックをコピーし、入力がキー フレームで開始しない場合は、-vcodec copy を使用すると常にこの動作が発生します。
オプションは、完全なエンコード (つまり、-vcodec コピーなし) を実行するか、別のタイムスタンプを選択して検索するかのいずれかです。ffprobe を使用して、すべてのキー フレームの場所を見つけることができます。
ffprobe -select_streams v -show_frames -print_format csv -show_entries frame=key_frame,pkt_dts_time input.mp4 | grep "frame,1"
3 番目の列には、すべてのキー フレームのタイムスタンプ (秒単位) が含まれます。ターゲット タイムスタンプに最も近いが、ターゲット タイムスタンプより後ではないものを選択します。
答え3
私もこの問題に遭遇しましたが、なぜこれが起こったのか、またどのように解決したのか全くわかりません。ただ、このコードで私の場合は解決しました:
ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4