脚本:递归地将 wma 文件转换为 MP3,然后删除 WMA 文件

脚本:递归地将 wma 文件转换为 MP3,然后删除 WMA 文件

我正在尝试修复一个脚本,该脚本会递归搜索目录树中的 WMA 文件 - 将它们转换为 MP3 文件,然后删除 WMA 文件,将转换后的 MP3 文件保留在原处。通过一些帮助和研究,我找到了以下方法:

   #!/bin/bash


shopt -s globstar


for f in **/*.[Ww][Mm][Aa]
do
    path=${f%/*}
    filename=${f##*/}
    new=${filename// /_}  # space -> underscore
    new=${new,,}             # lowercase
    mv -v -- "$f" "$path/$new"
done


for f in **/*.wma
do
    mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$f" && lame -m j -h --vbr-new -b 320 audiodump.wav -o "`basename "$f" .wma`.mp3"
    rm -f audiodump.wav
    rm -f "$f" "${f/%.wma}"
done 

此脚本似乎只适用于 14.04(不适用于 15.10)。此时,它可以遍历子目录,将 wma 文件转换为 MP3 并删除相应的 WMA 文件。问题是 MP3 文件是在 MAIN 目录中创建的,而不是在相应的 WMA 文件的目录中创建的。

答案1

在其他地方,您使用的是"$f"不带 的basename,因此给出了文件路径。只有在命令中lame使用basename。使用basename,目录组件将丢失。输出文件将在命令运行的目录中创建。

如果您只想用 替换.wma扩展名.mp3,请使用"${f%.wma}.mp3"。这样应该会保留路径。

相关内容