美好的一天, 我正在使用bash脚本将多个mp3文件合并为一个。代码工作正常但无法处理带有空格或字符的文件名。下面是代码。你能告诉我我做错了吗?感谢
for file in $(find . -type f -name "*.mp3" -print0 | xargs -0 ); do
ffmpeg -i "concat:intro.mp3|"$file"|outro.mp3" -acodec copy "${file%.mp3}-".mp3;
done
答案 0 :(得分:2)
使用-d
读取内置后跟空参数以使用NUL caracter作为输入记录分隔符
while IFS= read -r -d '' file; do
ffmpeg -i "concat:intro.mp3|$file|outro.mp3" -acodec copy "${file%.mp3}-".mp3;
done < <(find . -type f -name "*.mp3" -print0)
答案 1 :(得分:2)
find有一个-exec
标志,允许您使用搜索结果调用脚本。
e.g。创建一个简单的帮助程序脚本addxtros.sh:
#!/bin/sh
infile=$1
outfile=${infile%.mp3}-.mp3
ffmpeg -i "concat:intro.mp3|${infile}|outro.mp3" -acodec copy "${outfile}"
您可以像:
一样使用它find . -type f -name "*.mp3" -exec ./addxtros.sh {} ";"
答案 2 :(得分:1)
您可以将find
与bash -c
命令一起使用(允许将2个参数传递给ffmpeg
):
find . -type f -name "*.mp3" -exec bash -c 'ffmpeg -i "concat:intro.mp3|$1|outro.mp3" -acodec copy "${1%.mp3}-.mp3"' _ {} \;