FFMPEG CBR(恒定比特率模式),保持视频质量

时间:2018-01-02 05:17:56

标签: video ffmpeg

我想用FFMPEG转换mp4中的视频,同时保持源视频的比特率(CBR模式)和质量,

我尝试了一些在这里找到的命令:

https://trac.ffmpeg.org/wiki/Encode/H.264#CBRConstantBitRate

https://superuser.com/questions/314354/ffmpeg-constant-bitrate

https://brokenpipe.wordpress.com/2016/10/07/ffmpeg-h-264-constant-bitrate-cbr-encoding-for-iptv/

通过以上链接,我使用-minrate-maxrate和其他一些参数获得了恒定比特率,

ffmpeg -i <source> -b <sourceBitrate> -minrate <sourceBitrate> -maxrate <sourceBitrate> 2> log.txt output.mp4

ffmpeg -i <source> -c:v libx264 -x264-params "nal-hrd=cbr" -b:v <sourceBitrate> -minrate <sourceBitrate> -maxrate <sourceBitrate> 2> log.txt output.mp4

ffmpeg -i <source> -c:a libmp3lame -vcodec h264 -preset veryfast -f mp4 -crf 18 "nal-hrd=cbr" -b:v <sourceBitrate> -minrate <sourceBitrate> -maxrate <sourceBitrate> 2> log.txt output.mp4

但转换后的视频质量与来源不同。我想保持质量与源相同。我怎样才能做到这一点?

我做错了吗?

谢谢......

3 个答案:

答案 0 :(得分:2)

提高比特率。

在源文件中,即使平均比特率相同,也会有更多比特分配给复杂场景,而更少比特分配给复杂场景。通过强制与源的平均比特率相同的恒定比特率,编码器将浪费地使用比特用于更简单的场景,但更重要的是,对复杂场景应用更大的压缩以保持CBR上限。

粗略地说,您的CBR值应该接近源视频的峰值比特率以保持源质量(不考虑由于有损压缩而导致的不可避免的降级)。

此外,-preset veryfast使得x264在达到给定比特率的最佳质量方面不是最佳,因此更多地提高比特率,或者放弃预设。

最后,命令语法是

ffmpeg -i in -c:v libx264 -x264-params "nal-hrd=cbr" -b:v <sourceBitrate> -bufsize <1.5*sourceBitrate> out.mp4

x264将假设maxrateb:v相同。

答案 1 :(得分:2)

我是您关联的blog post的作者。

不应使用 nal-hrd cbr mp4,因为MP4中使用的avcc格式不支持填充数据。

  

无填充数据视频数据自然表示为文件格式的可变比特率,应该是   如果需要,填充传输。填充数据NAL单元和填充数据SEI消息不得   以文件格式存在的流存在。

ISO / IEC 14496-15 - 以ISO基础媒体文件格式承载网络抽象层(NAL)单位结构化视频

正如您在我的示例中所看到的,输出是使用附件B的MPEG-TS。nal-hrd要求设置vbv-bufsize

答案 2 :(得分:0)

you should change your video format to "mpegts" and set "-muxrate" parameter to bitrate that you want . for example ffmpeg -i in.mp4 -f mpegts -muxrate 4000K -y out.mp4 also for checking it you can use MediaInfo

MediaInfo

or use from VLC

enter image description here