使用ffmpeg调整视频大小-保持宽高比

时间:2019-01-06 17:03:39

标签: video ffmpeg cloudconvert

我正在尝试为电报用户机器人编写一个脚本,该脚本可以将任何视频/动画转换为.mp4。我已经有了它,因此脚本可以通信并利用cloudconvert.com的API。

现在,我的问题出在传递给CC的ffmpeg命令中,因为我需要将视频的两侧保持在1280像素以下。最终视频是720 * 1280还是1280 * 1280或其他完全无关紧要的东西,只要双方都不超过1280像素即可。

这是棘手的部分,我不想破坏宽高比,也不想在小于1280的情况下放大视频。

与代码实际相关的部分是比例部分。 下面的片段将视频的最大尺寸调整为最大1280像素,但不考虑宽度,只是保持了比例。

-vf "scale=min'(1280,iw)':-2"

现在我该如何适应它或对其进行更改,以使其实际调整尺寸取决于哪一侧大于1280像素?

我希望我足够具体,也期待您的帮助。

2 个答案:

答案 0 :(得分:2)

仅出现问题,如果高度大于宽度,则宽度的限制数从2增加到3:

  • 宽度必须小于或等于1280(不要超过宽度)
  • 宽度必须小于或等于初始宽度(请勿放大)
  • 宽度必须小于或等于1280 *宽度/高度(不超过高度)

要测试所有情况,可以使用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版本

答案 1 :(得分:0)

ffmpeg -i a.mp4 -vf "scale=:-1:force_original_aspect_ratio=decrease"