ffmpeg转码遇见错误height not divisible by 2的解决方案

 xiezixing @ 2019-01-21 20:52:46

今天使用ffmpeg的libx264转码的时候遇见一个错误,提示height not divisible by 2,翻译过来就是高度不能被2整除,查询ffmpeg的资料才发现,原来libx264的转码,高度和宽度必须能被2整除的,这不是一个bug,是libx264转码的要求。要求如下:根据x264的要求,YUV 4:2:0色度二次采样输出需要“宽度和高度可被2整除”。4:2:2需要“宽2整除”,4:4:4没有这些限制。但是,大多数基于非FFmpeg的播放器只能正确解码4:2:0,因此这就是您在输出H.264视频时经常看到ffmpeg带有该-pix_fmt yuv420p选项的命令的原因。

知道了为什么会出现这个问题之后,我们来看看如何解决。

解决的方法可以说是非常的简单,如果你是为了自适应视频的宽高比,而使用单一宽度或者高度来缩放视频,比如:

ffmpeg -i 1.mp4 -vf "scale=360:-1" 2.mp4

这句命令的意思是设定宽度为360,并且保持原视频宽高比进行自适应缩放,最后生成2.mp4。
但是如果这个时候,计算出来高度是一个奇数,比如215的高度,这个时候后就会出错,提示的信息就是:

height not divisible by 2(360x215)

这个时候怎么办呢?非常简单,只需要将-1改成-2,就可以直接解决这个问题。

ffmpeg -i 1.mp4 -vf "scale=360:-2" 2.mp4

-2是什么意思呢?根据ffmpeg过滤器的文档,如果scale的值是-n或者n > 1,过滤器将使用该值保持输入图像的纵横比的值,与其它指定的尺寸来计算。之后,它将确保计算出的尺寸可以被整除,n在必要时调整该值。意思是换成-2之后,会保证计算出来的尺寸可以被2整除,这就解决了刚才那个错误。

是不是非常简单呢?喜欢就给我回复一下吧。

ffmpeg
回复