将关键帧添加到视频中间,而无需重新编码整个视频


1

我需要在广告插播时将I帧添加到mp4s的中间,这样我就可以在视频提示时分段到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秒剪辑的比特率,配置文件和其他设置,以便它不会默认为一些随机的东西,但我仍然无法让它正常工作。

有没有人完成这个?这是专门为服务器端广告插入而完成的。


Answers:


0

我正在复制这个答案

您可以使用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和10s标记。时间值可以是hh:mm:ss格式,或者只是秒(单个值,没有冒号)。

您可以检查是否在您希望使用的位置插入了框架:

./ffprobe -select_streams v:0 -skip_frame nokey -show_entries frame=pkt_pts_time out.mp4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.