最近公司有一个公交项目,要生成报站语音,采用的是 报站前缀 + 站点名 + 报站后缀,3个MP3文件拼接的方式,拼接成一个完整的语音,且需要转码率和比特率,使用到了ffmpeg。 去网上找了一些ffmpeg相关的命令,参考: 安装命令参考 音频转码: ffmpeg -i **.m
最近公司有一个公交项目,要生成报站语音,采用的是 报站前缀 + 站点名 + 报站后缀,3个MP3文件拼接的方式,拼接成一个完整的语音,且需要转码率和比特率,使用到了ffmpeg。 去网上找了一些ffmpeg相关的命令,参考: 音频转码:
音频拼接:
音频混合:
当然,主要用到的还是音频转码和音频拼接。音频转码没问题,音频拼接的坑就来了......下面是公司项目主要用到的拼接语句:
重点关注这一段:-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运行,拼接成功。 -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] 成功! 回头再去百度了下,发现还真有"解决方案"(可能之前没好好找):
改成类似这样的(好多单引号): -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]" 也是报错。 不测了不测了,就用这个吧:
|
2021-06-05
2021-05-27
2021-05-26
2021-06-05
2021-05-16