Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 使用ffmpeg调整视频大小-保持纵横比_Video_Ffmpeg_Cloudconvert - Fatal编程技术网

Video 使用ffmpeg调整视频大小-保持纵横比

Video 使用ffmpeg调整视频大小-保持纵横比,video,ffmpeg,cloudconvert,Video,Ffmpeg,Cloudconvert,我正在尝试为telegram userbot编写一个脚本,它可以将任何视频/动画转换为.mp4。我已经有了它,所以脚本可以通信并利用的API 现在,我的问题在于传递给CC的ffmpeg命令,因为我需要将两侧的视频保持在1280像素以下。最终的视频是720*1280还是1280*1280或者其他什么都不重要,只要两边都不超过1280像素 这里是棘手的部分,我不想破坏的纵横比,我不希望视频被放大,如果它小于1280 代码中实际相关的部分是比例部分。 下面这篇文章将调整视频的最大高度为1280像素,但

我正在尝试为telegram userbot编写一个脚本,它可以将任何视频/动画转换为
.mp4
。我已经有了它,所以脚本可以通信并利用的API

现在,我的问题在于传递给CC的ffmpeg命令,因为我需要将两侧的视频保持在1280像素以下。最终的视频是720*1280还是1280*1280或者其他什么都不重要,只要两边都不超过1280像素

这里是棘手的部分,我不想破坏的纵横比,我不希望视频被放大,如果它小于1280

代码中实际相关的部分是比例部分。 下面这篇文章将调整视频的最大高度为1280像素,但不考虑宽度,它只是保持比例

-vf“scale=min”(1280,iw):-2”

现在,我该如何调整或更改它,使其根据哪一侧大于1280像素而实际调整大小


我希望我说得够具体,我期待着你的帮助。

问题只会出现,如果高度大于宽度,这会将宽度限制的数量从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版本好的,看起来确实有用,但我仍然会从中得到错误。我已经发布了一些你有很多零散的单引号的帖子:
-vf“scale=min”(1280,min)(iw,round)(1280*iw/ih);-2“
-表达式解析器不喜欢它们我尝试用引号将min()的每个“容器”括起来,这样FFMPEG可能不会有问题,但这没有帮助。我的一个朋友用
-vf”scale=min('1280,'min('iw,round(1280*iw/ih)')):-2“
逐步添加引号。虽然这对我来说仍然不起作用,但对他来说……根本不要在表达式中使用任何引号-就像我做的那样,在
-vf
的完整参数周围使用引号。我做到了。这就是我犯的错误。
ffmpeg -i a.mp4 -vf "scale=:-1:force_original_aspect_ratio=decrease"