當 FFmpeg 剪切影片的一部分時,剪切影片部分的第一秒被凍結

當 FFmpeg 剪切影片的一部分時,剪切影片部分的第一秒被凍結

我用它從 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

我也遇到了這個問題,我對為什麼會發生這種情況以及如何解決它一無所知。只要知道這段程式碼為我解決了這個問題:

ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4

相關內容