当前位置: 首页 > 知识库问答 >
问题:

ffmpeg没有这样的过滤器:linux中的“palettegen”

司马腾
2023-03-14

1.

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

2.ffmpeg是从http://johnvansickle.com/ffmpeg/

3.我下载了ffmpeg-release-64bit-static。焦油xz,解压缩此文件,然后运行:/ffmpeg然后安装了ffmpeg。我使用:ffmpeg-version
检查它没有问题。

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

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

但是当我在java中调用这个命令时,会发生错误,为什么

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();
}

错误:

结果1:
结果2:ffmpeg 3.1版。1-静态http://johnvansickle.com/ffmpeg/版权所有(c)2000-2016 FFmpeg开发者使用gcc 5.4构建。0(Debian 5.4.0-4)20160609
配置:-启用gpl--enable-version3--enable static--disable debug--enable-libmp3lame--enable-libx264--enable-libwebp--enable libspeex--enable libvorbis--enable libvpx--enable libfreetype--enable fontconfig--enable libxvid enable libopencore amrnb--enable libopencore amrwb--enable libthera--启用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 libzimg--cc=gcc
libavutil 55。28.100 / 55. 28.100
libavcodec57。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
54。0.100 / 54. 0.100
从“/home/web/tomcat-6.0”输入#0、mov、mp4、m4a、3gp、3g2、mj2。29/4/st/videos/6。mp4':
元数据:
主要品牌:isom
次要版本:512
兼容品牌:isomiso2avc1mp41
编码器:Lavf56。40.101
持续时间:00:04:36.64,开始:-3.338000,比特率:1089kb/s
流#0:0(und):视频:h264(主)(avc1/0x31637661)、yuv420p、480x360、997kb/s、15fps、15tbr、16k tbn、30tbc(默认值)
元数据:
处理程序名称:VideoHandler
流#0:1(und):音频:aac(主)(mp4a/0x6134706D)、22050Hz、立体声、FL88/s(默认)元数据:
处理程序名称:SoundHandler
输入1,png管道,来自“/home/web/tomcat-6.0.29/zhouletest/gif_images/paletegens/6.png”:
持续时间:N/A,比特率:N/A
流1:0:视频:png,rgba(pc),16x16[SAR 1:1 DAR:1],25 tbr,25 tbn,25 tbc
[AVFilterGraph@0x45c5260]无此类过滤器:“fps”
初始化复杂筛选器时出错。
参数无效

共有3个答案

公西浩
2023-03-14

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

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

洪伟彦
2023-03-14

最后,我写了一个shell:gifcreate。嘘,我用java来调用它,它工作得很好。

#/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.");
    }

https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality?answertab=votes#tab-top

澹台新知
2023-03-14

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

检查错误消息:

No such filter: '"fps' 

FFmpeg认为被调用的过滤器是“fps

尝试删除filter_complex引号。

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

或者如果这不起作用,用单引号括起来。

-filter_complex 'fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse'
 类似资料:
  • 问题内容: 我正在使用Django-CMS的Django项目中构建一个相当简单的应用程序,即研究项目。(这是我对项目/应用程序的首次尝试。)它的主要目的是存储各种知识资产(例如,研究人员撰写的文章,书籍等)。 问题是,当我将浏览器指向/ research /时,出现一条错误,提示表’research_journal’不存在(“ no such table”)。 我正在使用带有sqlite3数据库的

  • 当我尝试使用量角器在非角度页面中发送键时,它显示错误“无Such元素错误:没有这样的元素” NoSuchElementError:没有这样的元素(会话信息:chrome=47.0.2526.80)(驱动程序信息:chrome Driver = 2 . 14 . 313457(3d 645 C 400 ed F2 e 2c 500566 c9aa 096063 e 707 C 9 cf),platf

  • 问题内容: 我使用com0com在Windows中进行程序测试,在Linux中是否有类似com0com的程序? 我知道有pts / ptmx,但是我想要的是一个独立程序,提供2个虚拟串行端口… 然后我可以打开2个程序,每个程序一个。 问题答案: 我找到了一个好方法: 然后创建两个虚拟串行端口文件:COM8,COM9

  • 问题内容: 我遵循的是官方Django文档中的第一个应用程序教程,尝试保存通过管理页面进行的某些更改时出现此错误。我对此进行了一些研究,但是我能够找到的可能解决方案(例如迁移数据库)根本行不通。如果您想查看我的代码的某些特定部分,请告诉我。 以下是错误: and the traceback: 问题答案: 我自己碰到了这个问题,它似乎与https://code.djangoproject.com/t

  • 问题内容: 制作针对不同事件类型定义的转换与 StAX的 使用和感觉被迫进入一个程序实现- 提取这些事件并进行处理,过滤这些事件并处理它们,不是把所有的结果重新走到一起并返回。 SAX 似乎有一个非常好的功能,即基于XMLFilters的可链接筛选器。 我宁愿保留基于StAX的实现,但以某种方式合并或仿真SAX中的可链接筛选器。 可以通过合理的努力做到这一点吗?我已经错过了一个实现吗? 由于项目限

  • 问题内容: 有没有什么好方法可以使用angular过滤列表而不使用ng- repeat?我不想首先使用javascript绘制列表,但是之后我想使用angular对其进行过滤。 例: 我想使用搜索框来过滤现有的html。 (一般请不要使用ng-repeat或jQuery给出任何示例) 问题答案: 您可以编写一个简单的指令来处理显示/隐藏: 并以这种方式使用它: 使用指令有两个好处: 1)。您不必在