使用FFMPEG从NV12原始数据转换为H264时出现颜色不匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用FFMPEG从NV12原始数据转换为H264时出现颜色不匹配相关的知识,希望对你有一定的参考价值。

我正在尝试使用FFMPEG的hw编码器将NV12原始数据转换为H264。

将原始数据传递给编码器我使用以下逻辑传递AVFrame结构:

    uint8_t * buf;
    buf = (uint8_t *)dequeue();
    frame->data[0] = buf;
    frame->data[1] = buf + size;
    frame->data[2] = buf + size;
    frame->pts = frameCount;
    frameCount++;

但是使用这个逻辑,我得到的颜色不匹配的H264数据,

有人能告诉我,如何将缓冲区传递给AVFrame数据?

感谢提前,harshil

答案

我通过传递AVFrame结构的正确lineize和数据值来解决颜色不匹配问题。

假设NV12有4x4图像的YYYYUVUV平面,那么在ffmpeg中,我们需要通过

linesize [0] = y的起始位置

linesize [1] = 4因为u的位置从4开始,我们不需要指定linesize [2],因为uv是打包的。

以及数据的情况

data [0] = y的起始位置

数据[1] = 4

以上是关于使用FFMPEG从NV12原始数据转换为H264时出现颜色不匹配的主要内容,如果未能解决你的问题,请参考以下文章

将 H264 视频转换为原始 YUV 格式

使用ffmpeg从mp4或flv中提取h264原始视频流生成无效流

ffmpeg api 使用scale_npp的问题总结

ffmpeg用于将视频编码为H264编解码器格式

FFmpeg 中用于最快转换为 h264 的线程计数选项?

使用 avconv 从 .mov 转换为 .mp4(或 h264)