FFmpeg/avidemux:修复打包的 B 帧

FFmpeg/avidemux:修复打包的 B 帧

我正在使用 FFmpeg 将一些旧的 mpeg4 视频(在 avi 容器中)转码为 h.264。基本上

ffmpeg -i input.avi -c:v libx264 [x264 settings] -c:a libfdk_aac [aac settings] output.mp4

执行此操作时,mpeg4会发出以下警告

视频使用非标准且浪费的方式来存储 B 帧(“打包的 B 帧”)。考虑使用 VirtualDub 或 avidemux 等工具来修复它。

我知道我仍然可以成功转码,但是从警告来看我不清楚生成的 H.264 视频的质量是否会受到影响

所以,

  • veryslow鉴于我只关心输出 h.264 视频的质量(和大小,我想尽量减少移动设备的大小,这也是我使用预设的原因),我应该关心打包的 B 帧吗?

  • 如果需要的话,我该如何使用 avidemux 修复它们?(我已经尝试浏览过手册。)

答案1

B 帧是框架类型用于视频压缩以表示视频帧。B 帧可以使用来自前一帧和后一帧的信息来表示每个视频帧。

较旧的 DivX 编码视频通常使用一种称为打包比特流它将多个视频帧放入单个 AVI 块中。打包的比特流不是标准的 MPEG-4,占用更多空间,需要更多 CPU 能力来编码/解码,并且(最重要的是)如果复制到另一种容器类型中可能会导致问题。这是警告的主要原因。

由于您是在重新编码视频而不是直接复制它,所以应该没问题。如果您想保留原始视频,但将其复制到另一种容器(例如 MP4 或 MKV),最好先使用 FFmpeg 过滤器解压 B 帧mpeg4_unpack_bframes

你可以用一些简单的方法来解压 B 帧,比如

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi

相关内容