FFMPEG - 宽度/高度不能被 2 整除(缩放以生成 MBR 输出)

Posted

技术标签:

【中文标题】FFMPEG - 宽度/高度不能被 2 整除(缩放以生成 MBR 输出)【英文标题】:FFMPEG - Width/ Height Not Divisible by 2 (Scaling to Generate MBR Output) 【发布时间】:2020-07-28 10:58:24 【问题描述】:

我正在尝试在我的库中生成多种视频变体(Mp4 格式),并计划提供从 1080p 到 240p 以及介于两者之间的流行尺寸的版本。为此,我正在拍摄具有 AxB 分辨率的视频,然后运行代码(在 bash 上),将它们缩放到所需的以下尺寸 - 426x240 640x360 842x480 1280x720 1920x1080,当然码率不同,然后再另存为Mp4。

现在,如果源视频的高度和宽度都可以被 2 整除,这将正常工作,但是对于具有奇数宽度和高度的视频,以下行的代码会中断: -vf scale=w=$width:h=$height:force_original_aspect_ratio=decrease"

'width' 和 'height' 是每次迭代的期望(和硬编码):例如“426x240”和“640x360”

错误: [libx264 @ 00000187da2a1580] width not divisible by 2 (639x360) Error initializing output stream 1:0 -- Error while opening encoder for output stream #1:0 - maybe incorrect parameters such as bit_rate, rate, width or height

现在,由于我正在缩放,所以在这个方法中解释的方法对我不起作用 - FFMPEG (libx264) "height not divisible by 2"

而且,我也试过这个,但似乎所有品质都变得相同 -ffmpeg : width not divisible by 2 (when keep proportions)

这就是我尝试使用这个的方法:scale='bitand(oh*dar,65534)':'min($height,ih)'

请建议如何解决此问题,请注意: 1.我有一个非常大的库,我不能对每个视频都进行手动更改 2. 我需要缩放视频并保持宽高比

谢谢!

PS:[编辑] 我可以看到的一种方法是预先使用第二个脚本填充所有奇怪的身高/体重视频。然而,这使我的工作时间和工作量增加了一倍。我宁愿将其保留在单个脚本中。这是我看到的可用于填充的脚本: ```ffmpeg -r 24 -i -vcodec libx264 -y -an -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"``(来自:FFMPEG (libx264) "height not divisible by 2")

【问题讨论】:

【参考方案1】:

您可以在比例后插入填充或裁剪过滤器,具体取决于您喜欢分别增加还是减少尺寸。

例如对于垫,

scale=w=...,pad='iw+mod(iw\,2)':'ih+mod(ih\,2)'"

例如对于作物,

scale=w=...,crop='iw-mod(iw\,2)':'ih-mod(ih\,2)'"

【讨论】:

谢谢它解决了这个问题。这是我现在使用它的方式:-vf scale=w=$width:h=$height:force_original_aspect_ratio=decrease,pad='iw+mod(iw\,2)':'ih+mod(ih\,2)'"

以上是关于FFMPEG - 宽度/高度不能被 2 整除(缩放以生成 MBR 输出)的主要内容,如果未能解决你的问题,请参考以下文章

带有 yup420 输出问题的 MOBILE FFMPEG 过滤器复合体

ffmpeg调整缩放裁剪视频的基础

Android ImageView 将较小的图像缩放到具有灵活高度的宽度,而不会裁剪或扭曲

ffmpeg图片缩放

如何在FFMpeg中连接两个或多个具有相同宽度和不同高度的视频并保持相同的纵横比?

缩放模式,缩放宽度,mfc中的缩放高度