[英]FFMPEG CBR (Constant Bit Rate mode) with maintain video quality
我想将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
但是转换后的视频质量与来源不同。 我想保持质量与来源相同。 我该如何实现?
难道我做错了什么?
谢谢...
增加比特率。
在源文件中,即使平均比特率相同,也会有更多的比特分配给复杂的场景,而更少的比特分配给简单的场景。 通过将恒定比特率强制为与源的平均比特率相同的值,编码器将浪费比特使用更简单的场景,但是更重要的是,对复杂的场景应用更大的压缩率以保持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将假定maxrate
与b:v
相同。
我是您链接的博客文章的作者。
不应将 nal-hrd
cbr
与mp4
avcc
使用,因为MP4中使用的avcc
格式不支持填充数据。
没有填充数据 。 视频数据自然以文件格式表示为可变比特率,并且在需要时应填充以进行传输。 填充数据NAL单元和填充数据SEI消息不应以文件格式存储的流出现。
( ISO / IEC 14496-15-以ISO基本媒体文件格式传输网络抽象层(NAL)单元结构的视频 )
如您在我的示例中所见,输出是使用附件B的MPEG nal-hrd
还需要设置vbv-bufsize
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.