对于我的媒体服务器,我正在寻找将标签从我的 FLAC 文件传输到 MP3 的方法。
在 bash 脚本中,我可以使用metaflac将标签提取到本地变量,但是当使用 id3v2 标记 mp3 时,我似乎丢失了国家字符(猜它必须是 unicode?)
此外,我需要能够设置重播增益标签和专辑封面(都存在于 FLAC 中)。
我正在寻找一个无人值守的脚本解决方案。
如果您对 Python 解决方案感兴趣,mutagen 库看起来非常好。
它可能很简单:
from mutagen.flac import FLAC
from mutagen.easyid3 import EasyID3
flacfile = FLAC("flacfile.flac")
mp3file = EasyID3("mp3file.mp3")
for tag in flacfile:
if tag in EasyID3.valid_keys.keys():
mp3file[tag] = flacfile[tag]
mp3file.save()
我找到了将 mp3 id3 标签复制到 FLAC 文件中的解决方案。
试试这个工具eyed3。它支持专辑封面嵌入、latin1、utf8、utf16-BE 和 utf16-LE 中的文本编码。但是不支持重放增益。据我了解,它没有得到广泛支持。
维克多的解决方案为我指明了方向。但是,如果将标签复制到刚刚转换的文件中,例如从 flac 转换为 mp3,它可能会失败。也就是说,如果您将标签复制到的文件还没有任何标签,它将失败。
所以你可能需要先准备好目标文件,让它有标签。
from mutagen import File
from mutagen.flac import FLAC
from mutagen.easyid3 import EasyID3
from mutagen.id3 import ID3, ID3NoHeaderError
def convert_tags(f1,f2):
# f1: full path to file copying tags from
# f2: full path to file copying tags to
# http://stackoverflow.com/questions/8873364/linux-script-to-transfer-id3-tags-from-flac-to-mp3
# http://stackoverflow.com/a/18369606/2455413
try:
meta = EasyID3(f2)
except ID3NoHeaderError:
meta = File(f2, easy=True)
meta.add_tags()
meta.save()
from_f = FLAC(f1)
to_f = EasyID3(f2)
for tag in from_f:
if tag in EasyID3.valid_keys.keys(): to_f[tag] = from_f[tag]
to_f.save()
return
这是使用 ffmpeg 的另一种解决方案。例如。只需在 $HOME/.bashrc 中定义一个 bash 函数:
flac2mp3()
{
ffmpeg -i "$1" -ab 320k -map_metadata 0 -id3v2_version 3 "$(basename "$1" flac)mp3"
}