最近公司有一个公交项目,要生成报站语音,采用的是 报站前缀 + 站点名 + 报站后缀,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报错内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍python 采用paramiko 远程执行命令及报错解决,包括了python 采用paramiko 远程执行命令及报错解决的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python 采用paramiko 远程执行命令及报错解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 报错1: 是由于 没有设置 报错2: 会卡死
本文向大家介绍Electron 调用命令行(cmd),包括了Electron 调用命令行(cmd)的使用技巧和注意事项,需要的朋友参考一下 因为最近的项目需求,需要在 Electron 客户端启动的时候启动 nginx 服务,所以研究了一下怎么在 Electron 调用 命令行。 因为 Electron 基于 Chromium 和 Node.js,可以直接使用 Node.js 的 API 和一些包
我感觉栽在这上面好多次了…… 示例命令: commandStr 在cmd中执行: 输出: 可以证明上面的命令是正确的。 在 go: 报错1: `Output: '\"d:/可能包含空格/magick.exe\"' �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���` 乱码我无能为力,但看输出,貌似是转义,这莫名其妙,但我先去掉magick.exe的引号 报错2:
本文向大家介绍解决执行docker daemon命令时出错的问题,包括了解决执行docker daemon命令时出错的问题的使用技巧和注意事项,需要的朋友参考一下 最近在工作中遇到了一个问题,在一开始执行docker daemon命令时总是会出错导致进程stop,按照网上的方法在/etc/fstab文件里添加了一行 这时Docker daemon可以起来了,但是有了新的问题——执行docker r
问题内容: 我正在尝试通过Java执行命令行参数。例如: 上面的命令打开命令行,但是不执行或。有任何想法吗?我正在运行Windows XP,JRE6。 (我已经对问题进行了更详细的修订。以下答案很有用,但不能回答我的问题。) 问题答案: 你发布的代码使用自己的命令启动三个不同的过程。要打开命令提示符然后运行命令,请尝试以下操作(请勿自己尝试):
命令: 命令行中的错误日志:(但该项目在Intellij编辑器中运行良好) [信息]正在扫描项目...[INFO][INFO]-----------------------------------------------------------------------------------------------------------------------------------------