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

时间:2011-07-23 22:31:12

标签: linux bash

我想编写此命令的脚本

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

file1.mp3file2.mp3合并为output.mp3

问题是我要合并的文件超过2个。

示例

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按照它们应该合并的顺序列出它们。

问题

如何编写脚本,以便在具有偶数或奇数文件的目录中执行它?

2 个答案:

答案 0 :(得分:3)

如果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>

答案 1 :(得分:1)

如果您可以在一次清洗中连接所有文件,那就最好了。但是对于你的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比输入文件总数少两个。