我正在尝试使用 libav 在我的应用程序中删除视频的某些部分,例如在长度为 00:08:00 的视频中,我尝试删除帧 100-250 和 400-500(例如) . 我写了这段代码,复制 AVPacket 并丢弃一些数据包,但是有一个问题!在我们的视频中,每个关键帧后跟 29 个非关键帧。因此,当我的代码丢弃第 100-250 帧时,第 100 帧可能是非关键帧,在这种情况下,将要加入的部分(在此示例中,第 250 帧到第 400 帧)第 400 帧位于不属于的关键帧。
本节视频帧显示乱码,
视频切割速度在我的代码中非常重要,所以我无法解码/重新编码所有视频帧。
问题是,如何解码每个部分的编码开始(从开始帧到第一个关键帧)并在不解码的情况下复制另一帧?
或者,是否有其他FAST解决方案用于拆分/合并(删除视频的某些部分)?
答案 0 :(得分:0)
The question is that, How can I decode encode begin of each parts (from begin frame to first key frame) and make another frames copy without decode?
你不能。那样不行。
答案 1 :(得分:0)
开始考虑时间,而不是帧
例如,您可以在 base_video.mp4 的部分中快速获取新视频,
ffmpeg -ss 00:00:00.000 -i base_video.mp4 -t 8.000 -c copy -strict -2 new_video_8seconds_fromstart.mp4
<块引用>
-ss 00:00:00.000 是开始新视频的时间
-t 是以秒和毫秒为单位的持续时间,例如,对于 8 秒的持续时间,您必须使用 8.000
-an 如果您不想要音频
-strict -2 如果要复制一些文件编解码器,如 DTS
但是如果你想重新编码删除 -c copy 但它永远不会很快!
ffmpeg -ss 00:00:00.000 -i base_video.mp4 -t 8.000 new_video_8seconds_fromstart.mp4