ffmpeg无此类过滤器:';帕莱特根';在linux中

ffmpeg无此类过滤器:';帕莱特根';在linux中,linux,ffmpeg,Linux,Ffmpeg,一, 2.ffmpeg是从 3.我已经下载了ffmpeg-release-64bit-static.tar.xz,解包这个文件,然后运行:/ffmpeg 然后安装了ffmpeg。我使用:ffmpeg-version检查它 没问题 我在我的系统中运行这些命令没有问题: my system uname -a Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86

一,

2.ffmpeg是从

3.我已经下载了
ffmpeg-release-64bit-static.tar.xz
,解包这个文件,然后运行:
/ffmpeg
然后安装了
ffmpeg
。我使用:
ffmpeg-version

检查它 没问题

我在我的系统中运行这些命令没有问题:

my system 
uname -a
Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux
但是当我在java中调用这个命令时,会发生错误,为什么

cd /home/web/tomcat-6.0.29/zhouletest/ffmpeg-3.1.1-64bit-static 

./ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -vf fps=10,scale=177:-1:flags=lanczos,palettegen /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png 

./ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -i /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png -filter_complex "fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse" /home/web/tomcat-6.0.29/zhouletest/gif_images/6.gif
错误:

结果1:
结果2:ffmpeg 3.1.1版-静态 版权所有(c)2000-2016 FFmpeg 开发者使用gcc 5.4.0(Debian 5.4.0-4)20160609构建
配置:--enable-gpl--enable-version3--enable static --禁用调试--enable-libmp3lame--enable-libx264--enable-libx265--enable libwebp--enable libspeex--enable libvorbis--enable libvpx--enable libfreetype--enable fontconfig--enable libxvid--enable libopencore amrwb--enable libthera--enable libvo amrwbenc--enable gray--enable libopenjpeg--enable libopus--enable libass--enable gnutls--enable libvidstab--enable libsoxr--enable-frei0r--enable libfribidi--disable indev=sndio--disable outdev=sndio--enable librtmp--enable libmfx--enable libzimg--cc=gcc
libavutil 55。28.100 / 55. 28.100
libavcodec 57。 48.101 / 57. 48.101
libav57格式。41.100 / 57. 41.100
libav设备57。0.101 / 57. 0.101
libavfilter
6.47.100 / 6. 47.100
libswscale 4。1.100 / 4. 1.100
libswresample 2。1.100 / 2. 1.100 libpostroc
540.100 / 54. 0.100
从“/home/web/tomcat-6.0.29/zhouletest/videos/6.mp4”输入#0、mov、mp4、m4a、3gp、3g2、mj2:
元数据:
主要品牌:isom
次要版本:512
兼容品牌:isomiso2avc1mp41
编码器:Lavf56.40.101
持续时间:00:04:36.64,开始时间:-3.338000,比特率:1089 kb/s
流#0:0(und):视频:h264(主)(avc1/0x31637661)、yuv420p、480x360997kb/s、15fps、15tbr、16k tbn、30tbc(默认值)
元数据:
处理程序名称:VideoHandler
流#0:1(und):音频:aac(主)(mp4a/0x6134706D),22050 Hz,立体声,fltp,88 kb/s(默认值)
元数据:
handler_name:SoundHandler
输入#1,png_管道,来自“/home/web/tomcat-6.0.29/zhouletest/gif_images/paletegens/6.png”:
持续时间:不适用,比特率:不适用
流#1:0:视频:png,rgba(pc),16x16[SAR 1:1 DAR 1:1],25 tbr,25 tbn,25 tbc
[AVFilterGraph@0x45c5260]无此类过滤器: “fps”初始化复杂筛选器时出错。
无效 参数


与FFmpeg二进制文件无关,这几乎肯定与命令运行的shell环境中的转义字符有关

检查错误消息:

String cmd1 = "/home/web/tomcat-6.0.29/zhouletest/ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -vf fps=10,scale=177:-1:flags=lanczos,palettegen /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png";
String cmd2 = "/home/web/tomcat-6.0.29/zhouletest/ffmpeg-3.1.1-64bit-static/ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -i /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png -filter_complex \"fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse\" /home/web/tomcat-6.0.29/zhouletest/gif_images/6.gif";

String result1 = executeCommand(cmd1);
String result2 = executeCommand(cmd2);

private static String executeCommand(String command) {
    StringBuffer output = new StringBuffer();
    Process p;
    try {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));

        String line = "";
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return output.toString();
}
FFmpeg认为被调用的过滤器是
“fps

尝试删除筛选器_complex周围的引号,即

No such filter: '"fps' 
或者如果这不起作用,用单引号括起来

-filter_complex fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse

最后,我编写了一个shell:gifcreate.sh,我使用java来调用它,它运行良好

这是我的地狱 这是我在shell中的调用方法 这是我在java中的调用方法 参考文献

当您使用单独的语言或系统生成
ffmpeg
命令行调用时,有时会发生这种情况,如果您最近有一个ish ffmpeg(大于3.0),则默认情况下应将
palettegen
编译到其中


在我的例子中,在对命令行进行了一整天的实验之后,我发现我需要在生成的CLI调用中退出
,前面有一个
\
。因此,ffmpeg无法正确读取参数,并最终认为我要求使用“fps”作为过滤器或类似的工具。

我得到了这样的结果,因为复制cmd时不知何故在命令中加了卷曲引号。邪恶

cmd1是执行成功,但cmd2不是,有人能帮忙吗?非常感谢大家来到Stack Overflow!我尽我所能地编辑了你的问题。但是,添加代码和描述的解释,以便更多了解该主题的人看到它。请在遇到的特定错误消息中进行编辑,以防识别特定问题。祝你好运@谢谢你的宝贵建议,下次我会注意谢谢你的Mulvya,我试过这两种方法,但都不管用。这对我很管用
-filter_complex 'fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse'
#/bin/bash

_srcFile=$1     #video file path
_descFile=$2    #output GIF file
_width=$3       #widht of output GIF file
_start=$4       #skip the first $_start seconds of the $_srcFile
_time=$5        #create a $_time second output
_cover=$6       #overwrite the palette and gif if exist, y is yes,n is not
_fps=$7         #Frame rate,can control GIF definition,
_palettegenFile=$8  #palette file path

cd /home/web/tomcat-6.0.29/zhouletest/ffmpeg-3.1.1-64bit-static
./ffmpeg -$6 -t $_time -i $_srcFile -vf fps=$_fps,scale=$_width:-1:flags=lanczos,palettegen $_palettegenFile
./ffmpeg -$6 -t $_time -i $_srcFile -i $_palettegenFile -filter_complex "fps=$_fps,scale=$_width:-1:flags=lanczos[x];[x][1:v]paletteuse" $_descFile
/home/web/tomcat-6.0.29/zhouletest/gifcreate.sh /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 /home/web/tomcat-6.0.29/zhouletest/gif_images/1469694815605_8898.gif 177 0 3 y 5 /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/1469694815605_8898.png
String cmd1 = "/home/web/tomcat-6.0.29/zhouletest/gifcreate.sh "+srcFile+" "+descFile+" "+width+" "+start+" "+time+" "+(cover?"y":"n")+" "+fps+" "+palettegenFile;

Runtime r1 = Runtime.getRuntime();
    final Process process1 = r1.exec(cmd1);
    Thread thread1 = new Thread(new Runnable() {
        public void run() {
            try {
                process1.waitFor();
            } catch (Exception e) {
                log.error("createScaleGifFromVideo thread error:", e);
            }
        }
    });
    thread1.start();
    thread1.join(5000);//wait for the child thread up to 5 second
    if(thread1.isAlive()){
        process1.destroy();
        log.error("createScaleGifFromVideo: gif create is not ended, because it's cost more then 5s.");
    }