我转码使用FFMPEG API C代码的视频。 我想设置使用ffmpeg的API视频比特率如下图所示:
ovCodecCtx->bit_rate = 100 * 1000;
我使用的编码器是libx264。
但此参数是不考虑效果和产生的视频质量很糟糕。 我甚至尝试设置相关参数,如rc_min_rate,rc_max_rate等。但视频质量还是非常低的,因为这些相关参数不采取生效。
可以在任何专家告诉如何一个可以使用FFMPEG API设置正确的比特率? 谢谢
我转码使用FFMPEG API C代码的视频。 我想设置使用ffmpeg的API视频比特率如下图所示:
ovCodecCtx->bit_rate = 100 * 1000;
我使用的编码器是libx264。
但此参数是不考虑效果和产生的视频质量很糟糕。 我甚至尝试设置相关参数,如rc_min_rate,rc_max_rate等。但视频质量还是非常低的,因为这些相关参数不采取生效。
可以在任何专家告诉如何一个可以使用FFMPEG API设置正确的比特率? 谢谢
我已经找到了解决我的问题。 事实上谁是面临同样的问题已经有人张贴在的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);
谢谢