將關鍵幀添加到視頻中間,無需重新編碼整個視頻

將關鍵幀添加到視頻中間,無需重新編碼整個視頻

我需要在廣告插播處將I 幀添加到mp4 的中間,以便我可以分段到HLS 並在視訊提示返回時添加I 幀。操作點,但我寧願剪掉需要關鍵幀的點(可能是影片的 1 秒),添加關鍵幀,然後將影片拼接在一起。這應該會大大減少編碼時間,因為除了添加 I 幀的影片的一秒鐘之外,我大部分都可以複製編解碼器。

唯一的問題是視訊設定檔和設定改變了我添加 I 幀的位置,並且將它們全部重新組合在一起時我沒有得到乾淨的縫合。我知道我可以使用 進行重新編碼concat,但我試圖避免該處理時間。

我嘗試使用 ffmpeg 做的一些簡單範例:

ffmpeg -i input.mp4 -ss 30 -t 1 -c:a copy -y -copyts clipped2.mp4

ffmpeg -i input.mp4 -t 30 -c copy -y -copyts clipped1.mp4

ffmpeg -i "concat:clipped1.mp4|clipped2.mp4" -c copy -y newOutput.mp4

我可能必須使用ffprobe並指定 1 秒剪輯的比特率、配置文件和其他設置,以便它不會預設為某些隨機內容,但我仍然無法使其正常工作。

有人實現過這個嗎?這是專門為伺服器端廣告插入而完成的。

答案1

我正在複製這個答案:

您可以使用 ffmpeg 使用該-force_key_frames選項在您想要的位置插入關鍵影格。

例如:

./ffmpeg -i input.mp4 -c:a copy -c:v copy -force_key_frames 0:05:00,0:10:00 out.mp4

會將關鍵影格放置在盡可能靠近 5 和 10 標記的位置。時間值可以採用 hh:mm:ss 格式,也可以只採用秒(單一值,無冒號)。

您可以使用以下命令檢查是否在您想要的位置插入了框架:

./ffprobe -select_streams v:0 -skip_frame nokey -show_entries frame=pkt_pts_time out.mp4

相關內容