5

如何将视频文件(例如 mpeg)转换为图像集合?

理想的答案将涵盖使用可用库的 C++ 和 Java,以及如何手动从视频文件中删除单个帧以获取某些常见的视频格式。

4

3 回答 3

6

要无损提取所有帧,请使用

ffmpeg -i "$input_file" -f image2 "outdir/%05d.png"

如果您喜欢不同的输出格式,只需更改.png; 默认情况下ffmpeg会从扩展名推断文件类型。

该选项-f image2告诉ffmpeg写入一系列图像。"outdir/%05d.png"给出一个文件名模式,在本例中为“ ” 5-digit frame number.png

如果您只想每秒提取n帧,请在. (我认为n可以是浮点数。)-r n"$input_file"

如果您的视频是 Motion JPEG (mjpeg),请改用:

ffmpeg -i "$input_file" -vcodec copy -f image2 "outdir/%05d.jpg"

这会直接从视频流中解压缩帧,这样更快,并且显然使用更少的磁盘空间。

有关更多信息/其他选项,请参阅手册页或文档(搜索image2)。

于 2011-09-19T04:04:36.183 回答
3

您可以使用ffmpeg-vcodec png. 例如,这会将 my_video.avi 转换为具有五位数字的帧:

ffmpeg -i my_video.avi -vcodec png 帧%05d.png

您还可能需要指定所需的帧速率和分辨率。您可以运行ffmpeg -codecs以查看所有可用格式。

于 2011-09-19T03:53:28.857 回答
0

可能您可以apiexample.c在 ffmpeg 的libavcodec库中使用它,它可以让您看到如何轻松地将帧缓冲区编码到 mpeg 流中。

或者,您可以使用Gstreamer,它是一个更简洁的框架。

对于 Java,请尝试使用Java Media Framework

于 2011-12-05T19:20:03.390 回答