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 过滤器复合体
Android ImageView 将较小的图像缩放到具有灵活高度的宽度,而不会裁剪或扭曲