我想用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
但转换后的视频质量与来源不同。我想保持质量与源相同。我怎样才能做到这一点?
我做错了吗?
谢谢......
答案 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将假设maxrate
与b: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)