我想编写此命令的脚本
ffmpeg -i concat:file1.mp3\|file2.mp3 -acodec copy output.mp3
将file1.mp3
和file2.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
按照它们应该合并的顺序列出它们。
问题
如何编写脚本,以便在具有偶数或奇数文件的目录中执行它?
答案 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
比输入文件总数少两个。