c/c++语言开发共享对于libx264 Codec,将忽略通过ffmpeg API设置video比特率

我正在使用c代码中的FFMPEG API对video进行转码。 我正在尝试使用ffmpeg API设置video比特率,如下所示:

ovCodecCtx->bit_rate = 100 * 1000; 

我使用的编码器是libx264。

但是这个参数没有生效,结果video质量很差。 我甚至尝试过设置相关参数,如rc_min_rate,rc_max_rate等。但video质量仍然很低,因为这些相关参数没有生效。

任何专家都能告诉我们如何使用FFMPEG API正确设置比特率吗? 谢谢

    我找到了解决问题的方法。 事实上,面临同样问题的人已经在ffmpeg(libav)用户论坛上发布了解决方案。 这似乎也适用于我的情况。 我发布了自己的问题的答案,以便面临类似问题的其他用户可能会从这篇文章中受益。

    问题:

    libx264编解码器不支持以编程方式为H264video编解码器设置video比特率。 尽管它适用于MPEG1,2和MPEG4video编解码器,但H264video编解码器无法识别此设置。 由此产生的video质量非常糟糕。

    解:

    我们需要在解码/resize的帧被馈送到编码器之前设置它们的pts。 找到解决方案的人已经通过了ffmpeg.c源码并且能够解决这个问题。 我们需要首先将AVFrame的pts从流的time_base重新调整为编解码器time_base,以获得简单的帧编号(例如1,2,3)。

     pic->pts = av_rescale_q(pic->pts, ost->time_base, ovCodecCtx->time_base); avcodec_encode_video2(ovCodecCtx, &newpkt, pic, &got_packet_ptr); 

    当我们收到来自libx264编解码器的编码数据包时,我们需要将编码video数据包的pts和dts重新调整为流时基

     newpkt.pts = av_rescale_q(newpkt.pts, ovCodecCtx->time_base, ost->time_base); newpkt.dts = av_rescale_q(newpkt.dts, ovCodecCtx->time_base, ost->time_base); 

    谢谢

    需要了解更多c/c++开发分享对于libx264 Codec,将忽略通过ffmpeg API设置video比特率,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享对于libx264 Codec,将忽略通过ffmpeg API设置video比特率相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979706.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐