我找到了解决我的问题。事实上,面临同样问题的人已经在ffmpeg(libav)用户论坛上发布了解决方案。这似乎也适用于我的情况。我发布了自己的问题的答案,以便面临类似问题的其他用户可以从这篇文章中受益。
问题:
编程设置视频码率的H264视频编解码器没有被libx264编解码器荣幸。即使它适用于MPEG1,2和MPEG4视频编解码器,该设置也不能用于H264视频编解码器。由此产生的视频质量非常差。
解决方案:
我们需要设置点的解码/调整大小的框架,他们被送入编码器前。 找到解决方案的人已经通过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编解码器接收回来的编码数据包,我们需要将编码后的视频数据包的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);
感谢
从[文档](http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/structAVCodecContext.html) - “bit_rate:由用户设置; **不用于恒定量化器编码**” – sashoalm 2012-07-13 11:45:19
另外,还有你确定它没有生效? 100千位不是很多,你用1 mbit尝试过吗?即'ovCodecCtx-> bit_rate = 1000 * 1000;' – sashoalm 2012-07-13 11:49:17