使用FFmpeg将原始RGB32文件转换为JPEG或PNG

11

背景

我使用了一个 C++ 程序将原始字节以 RGB32 格式写入文件 (image.raw):

R G B A R G B A R G B A ...

我希望能以某种方式查看它。我有图像的尺寸。

我的工具仅限于命令行命令 (例如,ffmpeg)。我已经访问了 ffmpeg网站,但它更多地涉及将视频转换为图像。


问题

是否可以使用 ffmpeg 将此文件转换为可查看的文件类型 (例如,.jpeg, .png)?如果可以,我应该如何做?

如果不可能,有没有其他命令可以使用?

如果仍然不可行,是否有任何方法可以在 C++ 程序中操作 RGB32 字节,使其更适合使用,而无需使用外部库?我也不想像这样自己编码 .jpeg

2个回答

8
使用rawvideo解复用器:
请使用rawvideo解复用器
ffmpeg -f rawvideo -pixel_format rgba -video_size 320x240 -i input.raw output.png

由于没有指定预设的视频参数,您必须像上面所示一样指定它们,以便能够正确解码数据。

请参见ffmpeg -pix_fmts,以获取支持的输入像素格式列表,这可能有助于您选择适当的-pixel_format


1
答案对我有用,尽管我必须在input.raw之前添加-i才能使其正常工作。 - SegFault
@PhotometricStereo 是的,那是一个笔误。谢谢修改。 - llogan
1
针对jpg格式,试用以下命令:ffmpeg -f rawvideo -pix_fmt rgba -s 320x240 -i input.raw -vcodec mjpeg -pix_fmt yuvj420p output.jpg - alijandro
如果有帮助的话,你可以将“-i input.raw”替换为“-i -”,这样你就可以将程序的输出直接传输到ffmpeg中,而不必将中间结果(原始数据)存储在文件中。 - cherouvim
反过来,使用ffmpeg -i inputfilename -s wxh outputfilename.rgb命令可以在每个像素上产生3个字节,分别是r、g和b(至少在x86机器上)。 - Jose_X

0
从原始RGBA数据中获取单个帧
ffmpeg -y -f rawvideo -pix_fmt rgba -ss 00:01 -r 1 -s 320x240 -i input.raw -frames:v 1 output.png

-y 覆盖输出
-r 输入帧率(放在 -i 之前)
-ss 跳转到此时间
-frames:v 输出的帧数


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