通过ffmpeg的API设置视频比特率忽略libx264编解码器(setting video bit

2019-07-30 09:48发布

我转码使用FFMPEG API C代码的视频。 我想设置使用ffmpeg的API视频比特率如下图所示:

ovCodecCtx->bit_rate = 100 * 1000;

我使用的编码器是libx264。

但此参数是不考虑效果和产生的视频质量很糟糕。 我甚至尝试设置相关参数,如rc_min_rate,rc_max_rate等。但视频质量还是非常低的,因为这些相关参数不采取生效。

可以在任何专家告诉如何一个可以使用FFMPEG API设置正确的比特率? 谢谢

Answer 1:

我已经找到了解决我的问题。 事实上谁是面临同样的问题已经有人张贴在的ffmpeg(libav)用户论坛的解决方案。 这似乎在我的情况下工作了。 我张贴的答案我自己的问题,使面临类似问题的其他用户可以从这篇文章中受益。

问题:

编程设置视频码率的H264视频编解码器没有被libx264编解码器荣幸。 即使它是在为MPEG1,2和MPEG-4视频编解码器,该设置未确认为H264视频编解码器。 并将得到的视频质量非常糟糕。

解:

我们需要设置解码/调整大小帧点他们提供给编码器前。 谁找到了解决办法的人要经过ffmpeg.c来源消失了,能想出解决办法。 我们首先需要重新调整从流的那么time_base的AVFrame的分编解码器那么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);

谢谢



文章来源: setting video bit rate through ffmpeg API is ignored for libx264 Codec
标签: c ffmpeg bitrate