在 ffmpeg 中使用 -c copy 提取所需的帧

在 ffmpeg 中使用 -c copy 提取所需的帧

我目前正在做一个对监控视频进行总结的项目。这个想法是使用 OpenCV 读取帧,进行前景检测,并使用深度学习方法对人进行分类。

由于使用 x264 进行编码会占用大量 CPU 资源,因此我想在 ffmpeg 中使用 -c copy 来避免编码。我可以识别涉及移动人物的帧的索引或相应的时间戳,有没有办法可以使用复制编解码器从源视频生成结果视频而无需转码?

答案1

不,您不能只提取输入视频的单个帧。这些帧可能以引用其他帧并需要它们进行解码的方式进行编码。除非您的输入视频仅由 I 帧组成,否则您无法避免重新编码。

如果您使用 OpenCV 读取视频以分析所需的帧,那么您也可以直接使用 OpenCV 将相关帧输出为 JPG(或类似)图像。稍后,您可以使用 ffmpeg 将它们拼接成视频。或者,使用VideoWriterOpenCV 中的类来动态创建输出视频。

根据您的使用情况(我认为这更像是一个研究项目,您使用大量输入视频来训练/验证模型),首先将每个输入视频转换为仅 I 帧的视频(例如,ffv1如果您想要无损,则使用)然后使用它可能会更有效率。

相关内容