【问题标题】:FFMPEG CBR (Constant Bit Rate mode) with maintain video qualityFFMPEG CBR(恒定比特率模式)保持视频质量
【发布时间】:2018-06-11 20:38:13
【问题描述】:

我想用 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

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

我是不是做错了什么?

谢谢...

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

    提高比特率。

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

    【讨论】:

    • 感谢@Mulvya 的回答,我尝试使用您的命令,但视频质量仍然受到影响,请在此处查看视频,https://drive.google.com/open?id=1fQ5arAqTVMserMsH_vDs9cq47kjbukR7
    • 您尝试了哪些比特率值?
    • @Mulvya 您不能将nal-hrdmp4 一起使用,因为它启用了avcc 中不支持的填充器。您应该将答案更改为.ts,否则没有意义。
    • @aergistal - 不在规范中 - 但填充 NAL 似乎没有被 MP4 多路复用器过滤掉。
    【解决方案2】:

    我是您链接的blog post 的作者。

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

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

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

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

    【讨论】:

    • 鉴于 ffmpeg 的行为,我建议 不能 --> 不应该
    【解决方案3】:

    您应该将视频格式更改为“mpegts”并将“-muxrate”参数设置为您想要的比特率。例如 ffmpeg -i in.mp4 -f mpegts -muxrate 4000K -y out.mp4 也可以使用 MediaInfo 进行检查

    或从 VLC 使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2018-01-13
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 2019-11-18
      相关资源
      最近更新 更多