首页 > 音视频 > ffmpeg视频编码YUV与AVFrame对应关系
2019
03-24

ffmpeg视频编码YUV与AVFrame对应关系

最近群里有人问:NV12格式,怎么对应AVFrame中的data[0],data[1],data[2]。其实ffmpeg视频编码,YUV与AVFrame对应关系很简单。

在视频编码时,我们需要把YUV数据拷贝到AVFrame.data中,视频编码有硬件加速以及非硬件加速两种,所以对应关系也有两种。

硬件加速编码

指通过显卡进行硬件加速编码,例如指定vaapi进行编码。使用硬件加速编码时,YUV输入格式一般都是NV12,我做过的Intel以及Nvidia编码都是这样。之所以使用NV12格式,在Intel开发文档有这样说明:

因为ffmpeg底层也是调用相关显卡SDK做硬件加速编码,所以我们把YUV数据拷贝给AVFrame时,也得按NV12格式。对于NV12格式,Y数据在最前,接着是UV交错排布,类似这样:YYYYYYYY UVUV,所以对于AVFrame,我们得把Y数据拷贝data[0],UV数据拷贝给data[1]

非硬件加速编码

指通过CPU进行编码,例如指定libx264,libx265进行编码。对应关系就比较简单了,YUV三个分量数据依次对应data[0]data[1]data[2]

最后编辑:
作者:Jeff
Avatar
管理员——代码为剑,如痴如醉

2 Responses to ffmpeg视频编码YUV与AVFrame对应关系

  1. Avatar brandon1024 says:
    Firefox 45.0 Firefox 45.0 Ubuntu x64 Ubuntu x64

    您好,我想请问一下关于ffmpeg软件开发视频编码的问题。我使用的inter集成显卡,想使用硬件进行编码。按照你的博客驱动已经完全安装好了,但是在ffmpeg代码中,始终无法成功打开硬件编码器。一直提示我输入的视频格式不对,我该成NV12格式也提示我输入格式不对,要不就是提示编码器ID或者type不对,手动设置了ID和type,又提示我需要硬件输入视频帧,最近项目急需硬件编码功能,希望您能在百忙之中回复一下。解决燃眉之急,必将重谢!

留下一个回复

你的email不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.