我试图在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;打开错误 过滤器<!/强>
我该怎么办?
答案 0 :(得分:3)
嗯,首先这不起作用,因为libx264的高度/宽度必须可以被2整除,所以你需要将-2
而不是-1
作为高度/宽度参数。有关详细信息,请参阅scale video filter documentation。
另一个问题:您的ffmpeg已经过时,可能不支持您尝试使用的过滤器表达式。 Download a recent static build或compile 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)'"
由于后者是您已经使用的,或许可以尝试使用转义的第一个变体。