用于将(ID3)标签从FLAC传输到MP3的Linux脚本

时间:2012-01-15 21:02:41

标签: linux scripting mp3 flac id3v2

对于我的媒体服务器,我正在寻找将标签从我的FLAC文件传输到MP3的方法。

在bash脚本中,我可以使用metaflac将标签提取到本地变量,但是当用id3v2标记mp3时,我似乎丢失了国家字符(猜测它必须是unicode?)

此外,我需要能够设置重播增益标签和专辑封面(所有这些都存在于FLAC中)。

我正在寻找无人值守的脚本解决方案。

4 个答案:

答案 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"
}