【问题标题】:Convert raw RGB32 file to JPEG or PNG using FFmpeg使用 FFmpeg 将原始 RGB32 文件转换为 JPEG 或 PNG
【发布时间】:2018-02-28 19:51:29
【问题描述】:

上下文

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

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

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

我的工具仅限于命令行命令(例如ffmpeg)。我访问了ffmpegwebsite 以获取说明,但它更多地涉及将视频转换为图像。


问题

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

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

这仍然不可行,有什么办法可以在 C++ 程序中操纵 RGB32 字节以使其更适合 使用外部库?我也不想像this 那样自己编码.jpeg

【问题讨论】:

    标签: c++ command-line ffmpeg png jpeg


    【解决方案1】:

    从原始 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输出帧数

    【讨论】:

      【解决方案2】:

      使用rawvideo demuxer

      ffmpeg -f rawvideo -pixel_format rgba -video_size 320x240 -i input.raw output.png
      

      由于没有指定假定视频参数的标头,您必须指定它们,如上所示,以便能够正确解码数据。

      有关支持的输入像素格式列表,请参阅 ffmpeg -pix_fmts,这可能会帮助您选择合适的 -pixel_format

      【讨论】:

      • 答案对我有用,虽然我必须添加它只有在我在input.raw 之前添加-i 之后才有效。
      • @PhotometricStereo 是的,这是一个错字。感谢您的编辑。
      • 对于 jpg,请尝试 ffmpeg -f rawvideo -pix_fmt rgba -s 320x240 -i input.raw -vcodec mjpeg -pix_fmt yuvj420p output.jpg
      • 如果它对某人有帮助,您可以将 -i input.raw 替换为 -i -,这样您就可以简单地将程序的输出通过管道传输到 ffmpeg,而无需将中间结果(原始数据)存储在文件。
      • 往另一个方向发展:ffmpeg -i inputfilename -s wxh outputfilename.rgb 生成每个像素 3 个字节的文件 r 后跟 g 和 b(至少在 x86 机器上)。
      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 2020-03-13
      • 2011-09-09
      • 2022-08-22
      • 1970-01-01
      • 2019-10-17
      • 2018-04-18
      • 1970-01-01
      相关资源
      最近更新 更多