全网首发:FFMpeg使用NVIDIA DECODER,解码后的数据转换为YUV420P

    技术2026-08-13  13

    参考:

    https://blog.csdn.net/quantum7/article/details/107119487

      我们日常所用格式虽然是RGB,视频喜欢YUV420。如上文所述,解码后的数据是NV12,如何转换为YUV420P?

    自己写代码进行转换。这个也不难,咱也做过类似的转换。调用已有函数。

      这个已有的函数在哪里?这可没有人说啊。怎么办?想起之前使用过ffplay,看看这个代码如何处理的。

    先找到解码函数,即得到的AVFrame。输出一看,是NV12,确定不是YUV420P。找到刷屏的地方,使用的就是是YUV420P。跟踪整个过程,确实看到某个地方,转变为YUV420P。具体处理代码是: //1280,1280,0 ret = av_buffersrc_add_frame( filt_in, picture); //0, 0, 0 ret = av_buffersink_get_frame_flags(filt_out, picture, 0); //1280, 640, 640

      这两个函数好说,这两个filter是什么?怎么初始化的?能不能精简为简单参数?把代码复制到吾测试代码中,一通删除修改,编译通过。加上输出,果然成功获得YUV420P。

     

      有朋友问,性能怎样?在640x360情况下,去掉、增加转换,没看出什么变化。可能是分辨率不够?解码路数太少?

      能不能直出YUV420P,或者输出时能直接用?各位如果找到了更好办法,可通知一声。

    开源库:

    https://github.com/quantum6/ffmpeg-nvidia-codec

    Processed: 0.014, SQL: 9