我正在使用c代码的FFMPEG API对视频进行转码。我正在尝试使用ffmpeg API设置视频比特率,如下所示:
ovCodecCtx->bit_rate = 100 * 1000;我使用的编码器是libx264。
但是这个参数没有生效,结果视频质量很差。我甚至尝试过设置相关参数,如rc_min_rate、rc_max_rate等。但是视频质量仍然很低,因为这些相关参数没有生效。
有专家能告诉我们如何使用FFMPEG API正确设置比特率吗?谢谢
发布于 2012-08-07 19:52:15
我已经找到了我的问题的解决方案。事实上,一些面临同样问题的人已经在ffmpeg(libav)用户论坛上发布了解决方案。这似乎也适用于我的情况。我发布了我自己问题的答案,以便其他面临类似问题的用户可以从这篇文章中受益。
问题:
libx264编解码器不支持以编程方式设置H264视频编解码器的视频比特率。尽管它适用于MPEG1、2和MPEG4视频编解码器,但H264视频编解码器无法识别此设置。由此产生的视频质量非常差。
解决方案:
我们需要为解码/调整大小的帧设置pts,然后才能将它们提供给编码器。找到解决方案的人已经通过ffmpeg.c源代码找到了答案。我们首先需要将AVFrame的pt从流的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编解码器接收回编码分组时,我们需要将编码视频分组的pt和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);谢谢
https://stackoverflow.com/questions/11466184
复制相似问题