解决java执行cmd命令调用ffmpeg报错Concat error - No such filter '[0,0]'问题

 更新时间:2020年03月01日 09:34:51   作者:Canon in D  
这篇文章主要介绍了java执行cmd命令,调用ffmpeg报错Concat error - No such filter '[0,0]'解决方法,本文通过截图实例代码说明给大家介绍的非常详细,对大家的工作或学习有一定的参考借鉴价值,需要的朋友可以参考下

最近公司有一个公交项目,要生成报站语音,采用的是 报站前缀 + 站点名 + 报站后缀,3个MP3文件拼接的方式,拼接成一个完整的语音,且需要转码率和比特率,使用到了ffmpeg。

去网上找了一些ffmpeg相关的命令,参考:

安装命令参考

音频转码:

ffmpeg -i **.mp3 -ar 8000 -ac 2 -y -b:a 32k -vol 400 **.mp3

音频拼接:

//音频拼接
(1) ffmpeg -i "concat:test4.mp3|180_out.mp3" -acodec copy third.mp3 (third格式和first保持一致)
(2) ffmpeg -i "concat:first.mp3|second.mp3" -i second.mp3 -acodec copy test.mp3 -map_metadata 0:1 (third格式和second保持一致)
(3)ffmpeg -i test4.mp3 -i test5.mp3 -filter_complex '[0:0] [1:0] concat=n=2:v=0:a=1 [a]' -map [a] j5.mp3

音频混合:

//音频混合
ffmpeg -i 180_out.mp3 -i 181_in.mp3 -strict -2 -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 -ar 8000 -ac 2 -y -b:a 64k -vol 2500 test.aac

ffmpeg下载地址:http://www.ffmpeg.org/download.html

当然,主要用到的还是音频转码和音频拼接。音频转码没问题,音频拼接的坑就来了......下面是公司项目主要用到的拼接语句:

ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -filter_complex '[0:0] [1:0] [2:0] concat=n=3:v=0:a=1 [a]' -map [a] -b:a 32k -ar 8000 4.mp3

重点关注这一段:-filter_complex '[0:0] [1:0] [2:0] concat=n=3:v=0:a=1 [a]'

在本机(Windows)和公司服务器(Linux)上都安装了ffmpeg,上面的拼接语句在服务器上(Linux)能拼接MP3成功,但在本机DOS命令运行报错:

??肿么肥四!!回想windows和linux的区别,难道是目录的斜杆和反斜杠的问题??

把MP3路径的斜杆替换"/"为"\\",还是报错,一顿查找,发现是单引号和双引号的问题。

windows系统下,把 ' 改为 " 拼接成功。类似改为 -filter_complex "[0:0] [1:0] [2:0] concat=n=3:v=0:a=1 [a]"

linux系统,单、双引号都能拼接成功。

那么好,Dos窗口能拼接MP3成功,java代码运行cmd就出问题了:在本机测试能成功拼接MP3文件,但放到服务器上去报错。↓

No such filter: '"' Error configuring filters.

提示配置的过滤器错误,我把拼接条件又单独拿出来去Linux运行,拼接成功。

没办法,尝试把双引号改为单引号试试怎么样:

No such filter: '[0:0]' Error configuring filters.

又是提示过滤器配置错误。同样,把拼接条件单独拿出来去Linux运行,拼接成功。


What!??去百度找答案,没有找到。回头看报错信息,单引号会报错到第一个空格,双引号则直接报错,那么我把中间的空格去掉,改成这样:

                   -filter_complex '[0:0][1:0][2:0]concat=n=3:v=0:a=1[a]'

dos窗口成功,java运行cmd命令失败,换成双引号呢?

                   -filter_complex "[0:0][1:0][2:0]concat=n=3:v=0:a=1[a]"

还是dos窗口成功,java运行cmd命令失败,去掉引号?

                   -filter_complex [0:0][1:0][2:0]concat=n=3:v=0:a=1[a]

成功!

回头再去百度了下,发现还真有"解决方案"(可能之前没好好找):

http://www.ffmpeg-archive.org/Concat-error-No-such-filter-0-0-td4654771.html#a4654803

改成类似这样的(好多单引号):

                  -filter_complex '[0:0]' '[1:0]' '[2:0]' 'concat=n=3:v=0:a=1' '[a]'

报错,双引号呢?

               -filter_complex "[0:0]" "[1:0]" "[2:0]" "concat=n=3:v=0:a=1" "[a]"

也是报错。

不测了不测了,就用这个吧:

ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -filter_complex [0:0][1:0][2:0]concat=n=3:v=0:a=1[a] -map [a] -b:a 32k -ar 8000 4.mp3

总结

到此这篇关于解决java执行cmd命令调用ffmpeg报错Concat error - No such filter ''[0,0]''问题的文章就介绍到这了,更多相关java执行cmd命令调用ffmpeg报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java之Mybatis多层嵌套查询方式

    Java之Mybatis多层嵌套查询方式

    这篇文章主要介绍了Java之Mybatis多层嵌套查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot整合shiro登录失败次数限制功能的实现代码

    springboot整合shiro登录失败次数限制功能的实现代码

    这篇文章主要介绍了springboot整合shiro-登录失败次数限制功能,实现此功能如果是防止坏人多次尝试,破解密码的情况,所以要限制用户登录尝试次数,需要的朋友可以参考下
    2018-09-09
  • SpringBoot中多环境启动配置的教程详解

    SpringBoot中多环境启动配置的教程详解

    在SpringBoot项目的生命周期中,存在不同的环境,我们就需要针对不同环境制定不同名称的配置文件,里面放置不同环境下所需的配置项,下面小编就来和大家详细讲讲SpringBoot如何进行多环境启动配置的吧
    2024-02-02
  • Java动态线程池插件dynamic-tp集成过程浅析

    Java动态线程池插件dynamic-tp集成过程浅析

    这篇文章主要介绍了Java动态线程池插件dynamic-tp集成过程,dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改
    2023-03-03
  • java实现监控rtsp流转flv方法实例(前端播放,前后端代码都有)

    java实现监控rtsp流转flv方法实例(前端播放,前后端代码都有)

    这篇文章主要给大家介绍了关于java实现监控rtsp流转flv的相关资料,文中介绍的是前端播放,前后端代码都有,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • spring整合Quartz框架过程详解

    spring整合Quartz框架过程详解

    这篇文章主要介绍了spring整合Quartz框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java实现打印正三角的方法

    java实现打印正三角的方法

    这篇文章主要为大家详细介绍了java实现打印正三角的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • java webservice上传下载文件代码分享

    java webservice上传下载文件代码分享

    这篇文章主要为大家详细介绍了java webservice上传下载文件代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Java入门教程--带包的类如何编译与运行

    Java入门教程--带包的类如何编译与运行

    我们一般都是通过IDE(如Eclipse、Intellij Idea,STS等)来开发,调试java项目。在不借助IDE的情况下,如何编译、运行Java程序。打包编译时,会自动创建包目录,不需要自己新建包名文件夹。
    2022-12-12
  • Spring Boot开发RESTful接口与http协议状态表述

    Spring Boot开发RESTful接口与http协议状态表述

    这篇文章主要为大家介绍了Spring Boot开发RESTful接口与http协议状态表述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03

最新评论