FFmpeg がビデオの一部をカットすると、カットされたビデオ部分の最初の 1 秒がフリーズする

FFmpeg がビデオの一部をカットすると、カットされたビデオ部分の最初の 1 秒がフリーズする

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

関連情報