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

作者:Canon in D 时间:2023-03-14 20:35:11 

最近公司有一个公交项目,要生成报站语音,采用的是 报站前缀 + 站点名 + 报站后缀,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命令运行报错:

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

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

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

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

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

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

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

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

No such filter: '"' Error configuring filters.

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

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

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

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

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

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

                  -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

来源:https://blog.csdn.net/weixin_42683408/article/details/81385043

标签:java,cmd,命令,ffmpeg,报错
0
投稿

猜你喜欢

  • 解析Mybatis判断表达式源码分析

    2022-12-25 19:49:37
  • c++野指针的原理以及避免方法

    2023-10-07 09:18:53
  • Java扩展库RxJava的基本结构与适用场景小结

    2022-12-27 10:03:15
  • Unity查找游戏物体的六种方式详解

    2021-07-09 18:23:17
  • Java多线程编程之访问共享对象和数据的方法

    2022-10-01 07:05:02
  • C++超详细讲解贪心策略的设计及解决会场安排问题

    2022-07-26 12:08:04
  • 轻松实现Rxjava定时器功能

    2022-03-12 06:23:27
  • C#将Excel转成PDF的方法

    2021-06-13 01:46:09
  • java 输入一个数字组成的数组(输出该数组的最大值和最小值)

    2023-11-24 21:41:58
  • C# JsonHelper 操作辅助类,拿来直接用

    2023-11-28 18:55:42
  • Spring Bean自动装配入门到精通

    2023-11-03 07:29:09
  • Spring4下validation数据校验无效(maven)的解决

    2022-01-24 03:01:04
  • idea热部署插件jrebel正式版及破解版安装详细图文教程

    2023-05-27 03:28:59
  • Android判断包名和类名是否存在的方法

    2021-09-23 02:52:52
  • 简单了解springboot加载配置文件顺序

    2022-06-19 13:36:29
  • 详解Java对象的强、软、弱和虚引用+ReferenceQueue

    2021-11-30 16:23:01
  • java转换字符串编码格式的方法

    2022-02-12 04:30:24
  • 详解Java的按位操作符

    2022-02-02 10:55:25
  • Mybatis中如何进行批量更新(updateBatch)

    2022-10-11 13:42:00
  • idea无法切换分支报错问题及解决

    2023-12-14 22:39:26
  • asp之家 软件编程 m.aspxhome.com