FFmpeg - 将最大视频尺寸调整为320

时间:2015-09-08 17:11:32

标签: php video ffmpeg

我正在尝试使用FFmpeg动态更改通过PHP上传到服务器的视频的分辨率。 IE,我想保留纵向或横向 - 如果Y高于X,我想将Y更改为320,将X更改为相应的值,反之亦然。调整大小本身并没有问题 - 实际上它很简单。我遇到的问题是检测哪个尺寸更大。

我从StackOverflow中抓取了这个解决方案:how to check if video is landscape or portrait using ffmpeg php?

然而,它似乎没有起作用。当我追踪到什么不起作用时 - 我假设输出格式的方式已经改变,因为该解决方案已经发布,现在需要以不同的方式进行解析 - 我想问是否有更好的方法来做到这一点。我愿意使用FFmpeg或基于PHP的解决方案。

4 个答案:

答案 0 :(得分:1)

查看FFmpeg wiki上的resizing页面。你基本上想要特别注意这一部分:

  

有时需要以适合的方式缩放输入图像   到一个指定的矩形,即如果你有一个占位符(空   矩形),您想在其中缩放任何给定的图像。这是一个   有点棘手,因为你需要检查原始的宽高比,   为了决定指定哪个组件并设置另一个组件   组件为-1(保持纵横比)。例如,如果我们愿意的话   喜欢将输入图像缩放为尺寸为的矩形   320x240,我们可以使用这样的东西:

ffmpeg -i input.jpg -vf scale="'if(gt(a,4/3),320,-1)':'if(gt(a,4/3),-1,240)'" output_320x240_boxed.png

显然,您可以将其用于视频和图像。

答案 1 :(得分:1)

ffmpeg -i input.jpg -vf 'scale=320:320:force_original_aspect_ratio=decrease' output.png

根据FFmpeg文档,force_original_aspect_ratio选项对于缩放时保持原始宽高比非常有用:

   force_original_aspect_ratio
       Enable decreasing or increasing output video width or height if
       necessary to keep the original aspect ratio. Possible values:

       disable
           Scale the video as specified and disable this feature.

       decrease
           The output video dimensions will automatically be decreased if
           needed.

       increase
           The output video dimensions will automatically be increased if
           needed.

使用decrease将最大尺寸设为320,或使用increase将最小尺寸设为320.

答案 2 :(得分:0)

您可以使用if语句选择较大的一个

-vf scale='if(gt(iw,ih),320:-2)':'if(gt(iw,ih),-2:320)'

答案 3 :(得分:-1)

仅供参考,正确的方法是使用FFmpeg附带的FFprobe。

https://www.ffmpeg.org/ffprobe.html