使用 ffmpeg 调整视频大小 - 保持纵横比
Resize videos with ffmpeg - Keep aspect ratio
我正在尝试为可以将任何 video/animation 转换为 .mp4
的电报用户机器人编写脚本。我已经有了它,所以脚本可以通信并利用 cloudconvert.com.
的 API
现在我的问题出在我传递给 CC 的 ffmpeg 命令中,因为我需要将两侧的视频保持在 1280 像素以下。最终视频是720*1280还是1280*1280或者其他什么都无所谓,只要双方都不超过1280像素即可。
棘手的部分来了,我不想破坏宽高比,如果视频小于 1280,我也不想放大它。
实际相关的代码部分是比例部分。
下面这段将调整视频的最大高度为 1280 像素,但不考虑宽度,它只是保持比例。
-vf "scale=min'(1280,iw)':-2"
现在我要如何调整或更改它才能根据哪一侧大于 1280 像素实际调整大小?
希望我说得足够具体,期待您的帮助。
问题只是出现,如果高度大于宽度,这会将宽度的限制数量从 2 增加到 3:
- 宽度必须小于等于1280(不要超过宽度)
- 宽度必须小于或等于初始宽度(不要放大)
- 宽度必须小于等于1280*width/height(不要超过高度)
要测试所有情况,您可以使用 min(1280,min(iw,round(1280*iw/ih)))
,创建
的过滤器
-vf "scale=min(1280,min(iw,round(1280*iw/ih))):-2"
编辑
在某些版本的 ffmpeg 中,由于自引用问题,上面的行将不起作用。这种情况下我们可以另辟蹊径:
- 如果宽度大于(或等于)高度,我们使用
min(iw,1280)
按宽度缩放
- 如果高度大于宽度,我们使用
min(ih,1280)
按高度缩放
表达式将是 -vf 'scale=if(gte(iw,ih),min(1280,iw),-2):if(lt(iw,ih),min(1280,ih),-2)'
不要忘记,您可能 运行 通过某些 shell 解析机制来实现这一点,这将额外产生对逗号进行转义的需要。表达式
-vf 'scale=if(gte(iw\,ih)\,min(1280\,iw)\,-2):if(lt(iw\,ih)\,min(1280\,ih)\,-2)'
经验证可在 ubuntu Linux
上使用版本 2.7.2 至 3.4.4
ffmpeg -i a.mp4 -vf "scale=:-1:force_original_aspect_ratio=decrease"
我正在尝试为可以将任何 video/animation 转换为 .mp4
的电报用户机器人编写脚本。我已经有了它,所以脚本可以通信并利用 cloudconvert.com.
现在我的问题出在我传递给 CC 的 ffmpeg 命令中,因为我需要将两侧的视频保持在 1280 像素以下。最终视频是720*1280还是1280*1280或者其他什么都无所谓,只要双方都不超过1280像素即可。
棘手的部分来了,我不想破坏宽高比,如果视频小于 1280,我也不想放大它。
实际相关的代码部分是比例部分。 下面这段将调整视频的最大高度为 1280 像素,但不考虑宽度,它只是保持比例。
-vf "scale=min'(1280,iw)':-2"
现在我要如何调整或更改它才能根据哪一侧大于 1280 像素实际调整大小?
希望我说得足够具体,期待您的帮助。
问题只是出现,如果高度大于宽度,这会将宽度的限制数量从 2 增加到 3:
- 宽度必须小于等于1280(不要超过宽度)
- 宽度必须小于或等于初始宽度(不要放大)
- 宽度必须小于等于1280*width/height(不要超过高度)
要测试所有情况,您可以使用 min(1280,min(iw,round(1280*iw/ih)))
,创建
-vf "scale=min(1280,min(iw,round(1280*iw/ih))):-2"
编辑
在某些版本的 ffmpeg 中,由于自引用问题,上面的行将不起作用。这种情况下我们可以另辟蹊径:
- 如果宽度大于(或等于)高度,我们使用
min(iw,1280)
按宽度缩放
- 如果高度大于宽度,我们使用
min(ih,1280)
按高度缩放
表达式将是 -vf 'scale=if(gte(iw,ih),min(1280,iw),-2):if(lt(iw,ih),min(1280,ih),-2)'
不要忘记,您可能 运行 通过某些 shell 解析机制来实现这一点,这将额外产生对逗号进行转义的需要。表达式
-vf 'scale=if(gte(iw\,ih)\,min(1280\,iw)\,-2):if(lt(iw\,ih)\,min(1280\,ih)\,-2)'
经验证可在 ubuntu Linux
上使用版本 2.7.2 至 3.4.4ffmpeg -i a.mp4 -vf "scale=:-1:force_original_aspect_ratio=decrease"