我编写了以下 bash 脚本来使用 ffmpeg 自动连接 mp3 文件:
i=0
for f in "${@:2}"
do
filter+="[$i:a:0]"
i=`expr $i + 1`
files+="-i $f "
done
filter+="concat=n=$i:v=0:a=1[outa]"
ffmpeg $files -filter_complex $filter -map '[outa]' "$1.mp3"
但是,我经常不得不处理文件名中有空格的文件,但是当拖到终端时,所有空格都会被转义,生成以下命令调用:
./mergemp3.sh outfilename /path/to/my\ file\ with\ spaces.mp3 /path/to/another\ file\ with\ spaces.mp3
这对我来说似乎是正确的。但是,ffmpeg 失败了
/path/to/my: No such file or directory
很明显,ffmpeg 不理解文件名中的空格,尽管它被反斜杠正确转义。我想关于该文件名列表只有一个漂亮的细节。有任何想法吗?
为了在构建命令行时清晰和安全,数组是您的朋友:
试试这个,它应该适用于任何 shell,而不仅仅是
bash
(基于我在@Kusalananda的回答中第一次看到的一个技巧):这只是关于外壳部分;我不确定是否真的需要复杂的过滤器。