对于我的媒体服务器,我正在寻找将标签从我的FLAC文件传输到MP3的方法。
在bash脚本中,我可以使用metaflac将标签提取到本地变量,但是当用id3v2标记mp3时,我似乎丢失了国家字符(猜测它必须是unicode?)
此外,我需要能够设置重播增益标签和专辑封面(所有这些都存在于FLAC中)。
我正在寻找无人值守的脚本解决方案。
答案 0 :(得分:9)
如果您对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文件的解决方案。
答案 1 :(得分:5)
尝试使用此工具eyed3。它支持专辑艺术嵌入,latin1,utf8,utf16-BE和utf16-LE中的文本编码。但是不支持重播增益。据我所知,它没有得到广泛支持。
答案 2 :(得分:1)
维克多的解决方案向我展示了方向。但是,如果将标签复制到您刚刚转换的文件(例如,从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
答案 3 :(得分:0)
这是使用 ffmpeg 的另一种解决方案。 例如。只需在 $HOME/.bashrc 中定义一个 bash 函数:
flac2mp3()
{
ffmpeg -i "$1" -ab 320k -map_metadata 0 -id3v2_version 3 "$(basename "$1" flac)mp3"
}