如何编写脚本,所以输出被用作input?

我想编写这个命令

ffmpeg -i concat:file1.mp3\|file2.mp3 -acodec copy output.mp3 

合并file1.mp3file2.mp3成为output.mp3

问题是我有很多我想合并的文件。

 ffmpeg -i concat:file1.mp3\|file2.mp3 -acodec copy output1.mp3 ffmpeg -i concat:output1.mp3\|file3.mp3 -acodec copy output2.mp3 ffmpeg -i concat:output2.mp3\|file4.mp3 -acodec copy output3.mp3 ffmpeg -i concat:output3.mp3\|file5.mp3 -acodec copy output4.mp3 

output4.mp3是我正在寻找的结果。

这些文件实际上并不是很好地称为“文件”,然后是一个数字,但是ls按照它们应该合并的顺序列出它们。

这怎么可以脚本化,所以我可以在一个目录中执行一个奇数或偶数的文件?

如果ffmpeg支持多于两个文件,并且没有包含|文件 ,并且没有太多,你可以这样做: ffmpeg -i concat:"$(ls|tr '\n' '|')" -acodec copy out.mp3

如果不:

 for cfile in *.mp3; do ffmpeg -i concat:myout.mp3tmp1\|$cfile -acodec copy myout.mp3tmp2 mv myout.mp3tmp2 myout.mp3tmp1 done mv myout.mp3tmp1 <your final file name> 

如果你只能连接所有的文件在一个洗,这是最好的。 但是对于你的Bash问题的一个通用答案:

 ffmpeg -i concat:file1.mp3\|file2.mp3 -acodec copy output1.mp3 for i in $(seq 1 10); do ffmpeg -i concat:output${i}.mp3\|file$((i + 2)).mp3 -acodec copy output$((i + 1)).mp3 done 

这里10是比你输入文件总数少两个。