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

时间:2011-09-19 03:11:00

标签: java c++ video mpeg

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

理想的答案将涵盖使用可用库的C ++和Java,以及如何从视频文件中手动剥离各个帧以获得一些常见的视频格式。

3 个答案:

答案 0 :(得分:6)

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

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

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

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

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

如果您的视频是动态JPEG(mjpeg),请改为使用:

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

这直接从视频流解包帧,这更快,显然占用更少的磁盘空间。

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

答案 1 :(得分:3)

您可以使用-vcodec png ffmpeg -codecs来执行此操作。例如,这会将my_video.avi转换为具有五位数字的帧:

  

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

您还可以指定所需的帧速率和分辨率。您可以运行{{1}}查看所有可用格式。

答案 2 :(得分:0)

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

或者你可以使用Gstreamer这是一个更整洁的框架。

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