FFMPEG - 宽度/高度不能被 2 整除(缩放以生成 MBR 输出)
FFMPEG - Width/ Height Not Divisible by 2 (Scaling to Generate MBR Output)
我正在尝试在我的库中生成多种视频变体(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"
而且,我也试过这个,但似乎所有品质都变得相同 -
- This is how I tried to use this one:
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")
您可以在缩放后插入衬垫或裁剪过滤器,具体取决于您希望尺寸分别增加还是减少。
例如对于垫子,
scale=w=...,pad='iw+mod(iw\,2)':'ih+mod(ih\,2)'"
例如对于作物,
scale=w=...,crop='iw-mod(iw\,2)':'ih-mod(ih\,2)'"
我正在尝试在我的库中生成多种视频变体(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"
而且,我也试过这个,但似乎所有品质都变得相同 -
- This is how I tried to use this one:
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")
您可以在缩放后插入衬垫或裁剪过滤器,具体取决于您希望尺寸分别增加还是减少。
例如对于垫子,
scale=w=...,pad='iw+mod(iw\,2)':'ih+mod(ih\,2)'"
例如对于作物,
scale=w=...,crop='iw-mod(iw\,2)':'ih-mod(ih\,2)'"