我正在尝试在linux shell中运行此ffmpeg命令,以缩小视频的比例(如果是纵向,则调整宽度时,最大高度为650;如果是横向,则最大宽度为650,并使用宽高比调整高度) :

ffmpeg -i 1.mp4 -r 30 -vf scale="'if(gt(a,1),650,-1)':'if(gt(a,1),-1,650)'" -vcodec libx264 output_file1.mp4

但我收到以下错误:


  [scale @ 0x1d48a40] [Eval @ 0x7fff53a49340]缺少')'或太多
  'if(gt(a,1),650,-1)中的参数[scale @ 0x1d48a40] [Eval @
  0x7fff53a49340]缺少')'或'if(gt(a,1),-1,650)'中的参数过多
  计算表达式'if(gt(a,1),-1,650)'时出错


**编辑:我尝试使用新的@slhck语法:

-vf "scale=if(gt(a\,1)\,650\,-2):if(gt(a\,1)\,-2\,650)"


我得到的结果是:


  ffmpeg版本0.8.16-4:0.8.16-0ubuntu0.12.04.1,版权所有(c)
  2000-2014年Libav开发人员建立于2014年9月16日18:33:49
  gcc 4.6.3仅出于脚本兼容性提供ffmpeg程序
  并将在以后的版本中删除。它已在
  Libav项目允许不兼容的命令行语法
  替代avconv的改进(请参阅Changelog以获取
  细节)。请改用avconv。
  
  似乎流0编解码器的帧速率与容器的帧速率不同:
  180000.00(180000/1)-> 90000.00(180000/2)输入#0,mov,mp4,m4a,3gp,3g2,mj2,来自'1.mp4':元数据:
      major_brand:isom
      minor_version:0
      compatible_brands:isom3gp4
      creation_time:2015-02-05 14:54:24持续时间:00:00:45.30,开始:0.000000,比特率:17058 kb / s
      流#0.0(eng):视频:h264(高),yuv420p,1920x1080、17021 kb / s,30.01 fps,90k tbr,90k tbn,180k tbc
      元数据:
        creation_time:2015-02-05 14:54:24
      流#0.1(eng):音频:aac,48000 Hz,立体声,s16、124 kb / s
      元数据:
        creation_time:2015-02-05 14:54:24文件'output_file1.mp4'已经存在。覆盖? [y / N] y
  
  [buffer @ 0x747ec0] w:1920 h:1080 pixfmt:yuv420p [scale @ 0x745a40] [Eval @ 0x7fffac94b220]缺少')'或参数过多
  'if(gt(a,1),650,-2)'[scale @ 0x745a40] [Eval @ 0x7fffac94b220]
  缺少')'或'if(gt(a,1),-2,650)'中的参数过多
  计算表达式'if(gt(a,1),-2,650)'错误打开
  过滤器!


我该怎么办?

最佳答案

好吧,首先这是行不通的,因为libx264的高度/宽度必须被2整除,因此您需要使用-2而不是-1作为height / width参数。有关更多信息,请参见scale video filter documentation

另一个问题:您的ffmpeg已经过时了,可能不支持您尝试使用的过滤器表达式。 Download a recent static buildcompile it yourself

为了使表达式有效,您必须escape逗号:

-vf "scale=if(gt(a\,1)\,650\,-2):if(gt(a\,1)\,-2\,650)"


或将其用单引号引起来:

-vf scale="'if(gt(a,1),650,-2)':'if(gt(a,1),-2,650)'"


由于后者已在使用中,因此请尝试使用转义的第一个变体。

关于linux - ffmpeg错误:“缺少')'或'if(gt(a,1),650,-1)'中的参数过多”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28669925/

10-11 01:27