如何使用ffmpeg的库将YUV422图像转换为JPEG?

时间:2017-07-21 05:01:43

标签: visual-c++ ffmpeg

我正在尝试将YUV422图像(YUV422_8_UYVY,unsigned,unpacked,16bpp)转换为jpeg,使用ffmpeg,this is Code我正在关注

图片尺寸:2448x2050 原始YUV图像:无法上传格式为YUV

(原始图像解码由ffmpeg命令提示符) 图像:This is original Image

图片尺寸:2448x2050 重建图片:Reconstruct Image through above Code

因此重建图像不像原始图像

我的格式为 UYVY ,而支持的格式为 AV_PIX_FMT_YUVJ420P

那么UYVY输入图像的正确格式应该是什么......?

pCodecCtx->pix_fmt=AV_PIX_FMT_ ?????

如果我使用pCodecCtx-> pix_fmt = AV_PIX_FMT_UYVY422; 我有一个arrer说

[mjpeg @ 00c0b2a0]指定的像素格式uyvy422无效或不受支持

1 个答案:

答案 0 :(得分:1)

你说图像格式是“解包”(??),但同时你称之为YUV422_8_UYVY,这表明它是打包的(即不是平面的)。你得到的输出表明它已经打包了。

FFmpeg的图像编码器通常不支持打包输入。你首先需要使它平面。您有两种选择:

  • 将其转换为平面YUV-4:2:2(AV_PIX_FMT_YUVJ422P)并将其输入编码器;
  • 将其转换为平面YUV-4:2:0(AV_PIX_FMT_YUVJ420P)并将其输入编码器。

第一个将保留色度子采样(更好的质量),但第二个将具有更好的下游支持(在其他应用中,解码图像)。要转换图片,请使用libswscale。该转换的输出图像可以输入FFmpeg编码器。