使用标签将 wav 转换为flac

Bun*_*nny 4 conversion flac wav

长话短说:我需要一个脚本将 wav 文件转换为 flac,同时将文件名(减去扩展名)放入 flac 文件的歌曲标题标签中。

我有大约 1200 张音频 CD,我决定在 TB 驱动器上无损存档。由于有足够的空间,我使用 k3b 将它们翻录为 wav 文件,认为跳过压缩步骤会节省大量时间。嗯,确实如此,但在我发现错误之前我已经撕掉了很多:当我尝试将它们导入 Rhythmbox 之类的播放器时,它们没有任何标签(元数据),因此无法识别和排序他们正确。为了避免这个问题,我已经转为将其余部分翻录到 flac,但我想修复错误,而无需返回并再次重新安装所有这些 CD。有什么建议?

meu*_*euh 7

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
Run Code Online (Sandbox Code Playgroud)

标题是文件的基本名称,减去 .wav 后缀,专辑是上面的直接目录,艺术家是上面的目录。该--delete-input-file选项会删除 .wav。请参阅bash 手册页中的参数扩展${var%pattern}其中删除了变量末尾或开头 (${var#pattern})的 glob 模式(即由* ?和形成[...]);%% 和 ## 版本删除最长的匹配项。