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