如何使用ffmpeg从YUV视频中提取帧(或特定帧)

5
这里是从一个MP4视频中提取帧的代码。 ffmpeg -i above_marathon_250.mp4 images%03d.bmp 但是,同样的代码对于YUV格式的视频不起作用。 有人知道如何从YUV格式的视频中提取帧吗?
3个回答

10

出现问题的原因是 yuv 文件没有头信息,所以 ffmpeg 不知道文件的大小/像素格式。您需要手动指定分辨率和像素格式:

ffmpeg -video_size 1920x1080 -r 25 -pixel_format yuv422p -i file.yuv output-%d.png

然后根据您的特定视频调整大小/像素格式。

[编辑] 我建议您将此类问题发布在超级用户的网站上,这与编程无关。


它完美地运作了。谢谢@Ronald。 另外,我是StackOverflow的新手,所以我需要了解关于超级用户的内容。我会去查看的。谢谢。 - mrana

1

ffmpeg.org 给出的命令是:

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

这将从视频中提取每秒钟的一帧,并将它们输出到名为foo-001.jpeg、foo-002.jpeg等的文件中。图像将被重新调整大小以适应新的WxH值。
在您的情况下,您可以修改上述命令为:
ffmpeg -i inputfile.yuv -r 1 -f image2 images%05d.png 

r是帧率,应设置为1,以从yuv中提取单个帧


r=1 设定为1。 ffmpeg -i inputfile.yuv -1 1 -f image2 images%05d.png 它无法工作。 - mrana
r在上面的命令中已经有一个值1,因此请直接使用该命令。 - shri
它不会创建任何图像,这是命令行上的消息:[rawvideo @ 0x7fef6880da00] 找不到流0(视频:rawvideo(I420 / 0x30323449),yuv420p,-4 kb/s)的编解码器参数:未指定大小。请考虑增加“analyzeduration”和“probesize”选项的值_above_marathon_250.yuv:找不到编解码器参数 从'above_marathon_250.yuv'输入,格式为rawvideo: 时长:N/A,比特率:n/a 流#0:0:视频:rawvideo(I420 / 0x30323449),yuv420p,-4 kb/s,25 tbr,25 tbn,25 tbc 输出#0,image2,到'images%05d.png': 输出文件#0不包含任何流。 - mrana
请查看下面的链接https://dev59.com/T2gu5IYBdhLWcg3wASaO,在其中提到我测试的文件实际上是受损的。但如果有人遇到这个问题,设置-probesize和-analyzeduration为100和10000000可能有所帮助。 - shri
看不到任何正面的结果 :( - mrana

0

您需要指定视频大小-video_size和帧率-r,因此请使用以下脚本:

ffmpeg.exe -video_size 720x576 -r 25 -ss 00:00:00 -i video_input_720x576_25.yuv -vframes 1 -q:v 1 frame_output_720x576_25.jpg

如果您想指定输入视频格式,请包括-pixel_format yuv420p或任何其他格式,除了yuv420p


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接