我正在尝试使用libav在我的应用程序中删除视频的某些部分,例如,在一个长度为00:08:00的视频中,我尝试删除帧100-250和400-500 (仅举个例子)。我编写了这个复制AVPacket并丢弃一些数据包的代码,但是有一个问题!在我们的视频中,每个关键帧后面跟着29个非关键帧。因此,当我的代码删除帧100-250时,框架100可能是一个非关键帧,在这种情况下,将要连接的部分(在本例中是帧250到帧400)帧400位于关键帧之后,而不是下面的帧。
在本节中,视频帧乱七八糟,
视频切割速度在我的代码中是如此重要,所以我无法解码/重新编码所有的视频帧。
问题是,我如何解码每个部分的编码开始(从开始帧到第一个关键帧),并在没有解码的情况下复制另一个帧?
或者,还有其他快速解决方案用于分割/合并(删除部分视频)吗?
发布于 2021-07-08 00:00:13
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?
你不能。这样不行。
发布于 2021-07-08 08:44:07
开始思考时间,而不是框架。
例如,您可以在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,复制,,但是它永远不会很快!
ffmpeg -ss 00:00:00.000 -i base_video.mp4 -t 8.000 new_video_8seconds_fromstart.mp4
https://stackoverflow.com/questions/68266120
复制相似问题