【问题标题】:How to convert YUV422 image to JPEG using ffmpeg's libraries?如何使用 ffmpeg 的库将 YUV422 图像转换为 JPEG?
【发布时间】:2017-07-23 21:19:47
【问题描述】:

我正在尝试使用我正在关注的 ffmpeg 的this is Code 将 YUV422 图像(YUV422_8_UYVY,未签名,未打包,16bpp)转换为 jpeg

图片尺寸: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无效或不支持

【问题讨论】:

  • (AV_PIX_FMT_UYVY422)-->(AV_PIX_FMT_YUVJ422P) 输出生成的文件仍为 0 kb,在转换过程中,我在控制台 1 上收到以下消息。使用了已弃用的像素格式,请确保您的范围不正确 2。警告:数据未对齐!这会导致速度损失 av_image_alloc(RawPic->data,RawPic->linesize,in_width,in_height,src_pix_fmt, 16); av_image_alloc(ScalePic->data,ScalePic->linesize,out_width,out_height,dst_pix_fmt, 1);

标签: visual-c++ ffmpeg


【解决方案1】:

您说图像格式是“未打包”(??),但同时您将其称为YUV422_8_UYVY,这表明它是打包的(即不是平面的)。您得到的输出表明它已打包。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2011-10-23
    • 2016-10-20
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多