ffmpeg错误:“缺少')'或'if(gt(a,1),650,-1)'中的参数太多”

时间:2015-02-23 08:54:51

标签: linux ffmpeg scale

我试图在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]缺少')'或者太多了   args in' if(gt(a,1),650,-1)' [scale @ 0x1d48a40] [Eval @   0x7fff53a49340]缺少')'或者如果(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 version 0.8.16-4:0.8.16-0ubuntu0.12.04.1,Copyright(c)   2000-2014 Libav开发人员于2014年9月16日18:33:49建立   gcc 4.6.3 ffmpeg程序仅用于脚本兼容性   并将在以后的版本中删除。它已被弃用了   Libav项目允许不兼容的命令行语法   其替代品的改进称为avconv(参见Changelog for   细节)。请改用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,48000Hz,立体声,s16,124kb / 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] Missing&#39;)&#39;或太多args in   &#39;如果(GT(A,1),650,-2)&#39; [scale @ 0x745a40] [Eval @ 0x7fffac94b220]   缺少&#39;)&#39;如果(gt(a,1), - 2,650)&#39;出错时出错   评估表达式如果(gt(a,1), - 2,650)&#39;打开错误   过滤器<!/强>

我该怎么办?

1 个答案:

答案 0 :(得分:3)

嗯,首先这不起作用,因为libx264的高度/宽度必须可以被2整除,所以你需要将-2而不是-1作为高度/宽度参数。有关详细信息,请参阅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)'"

由于后者是您已经使用的,或许可以尝试使用转义的第一个变体。