FFmpeg / avidemux:修复压缩的B帧


12

我使用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修复它们?(我已经尝试过浏览手册。)

Answers:


15

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.