我希望以下循环遍历 m4a 文件和 webm 文件。目前我使用两个不同的循环,另一个循环只是替换此循环中的所有 m4a。此外,ffmpeg 输出的文件应删除 m4a 扩展名(如果是 m4a 文件)和 webm 扩展名(如果是 webm 文件)。并将其替换为 mp3。(就像这里对 m4a 所做的那样)。我不知道该怎么做,我认为这与正则表达式有关,但我不知道如何真正使用它们,也没有找到好的教程/文档,所以如果你有,请也链接它。
for i in *.m4a ; do
echo "Converting file $converted / $numfiles : $i"
ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i/.m4a}.mp3"
mv "$i" ./done
converted=$((converted + 1))
done
答案1
要在 bash 中循环遍历多组文件,只需在 for 列表中指定它们即可。
如果不存在与组匹配的文件(例如没有 *.webm 文件),则为了仍然循环一次(使用组规范(* .webm)作为变量的值我)。如果你想防止这种情况发生,你需要设置 nullglob 选项:
shopt -s nullglob
要从文件名中删除扩展名(有扩展名!),请使用以下命令参数扩展:
${i%.*}
你的脚本将会像这样:
shopt -s nullglob
for i in *.m4a *.webm; do
echo "Converting file $converted / $numfiles : $i"
ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i%.*}.mp3"
mv "$i" ./done
converted=$((converted + 1))
done