长话短说:我需要一个脚本将 wav 文件转换为 flac,同时将文件名(减去扩展名)放置在 flac 文件的歌曲标题标签中。
我有大约 1200 张音频 CD,我决定将它们无损存档在 TB 驱动器上。由于有足够的空间,我使用 k3b 将它们翻录为 wav 文件,认为通过跳过压缩步骤可以节省大量时间。嗯,确实如此,但在发现错误之前我已经撕了很多:当我尝试将它们导入像 Rhythmbox 这样的播放器时,它们没有任何标签(元数据),因此无法识别和排序他们正确地。我已将其余部分转换为 flac 以避免该问题,但我想修复该错误,而无需返回并重新安装所有这些 CD。有什么建议么?
答案1
flac
从同名包中安装命令并运行
#!/bin/bash
find . -name '*.wav' |
while read file # eg stuff/artist/album/title.wav
do file="$PWD/${file#./}" # make absolute to get more info
album=${file%/*} # stuff/artist/album
artist=${album%/*} # stuff/artist
album=${album##*/} # album
artist=${artist##*/} # artist
title=${file##*/} # title.wav
title=${title%.wav} # title
flac -s --best --delete-input-file \
--tag="TITLE=$title" \
--tag="ALBUM=$album" \
--tag="ARTIST=$artist" \
"$file" # creates .flac removes .wav
done
标题是文件的基本名称,减去 .wav 后缀,专辑是上面的直接目录,艺术家是上面的目录。该--delete-input-file
选项删除 .wav。看参数扩展在 bash 手册页中,它删除了变量末尾或开头的${var%pattern}
glob 模式(即由*
?
和组成)(${var#pattern}); [...]
%% 和 ## 版本删除最长的匹配项。