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

mepcadol  于 2023-03-01  发布在  Linux
关注(0)|答案(5)|浏览(136)

对于我的媒体服务器,我正在寻找将标签从我的FLAC文件传输到MP3的方法。
在bash脚本中,我可以使用metaflac将标签提取到本地var,但是当使用id3v2标记mp3时,我似乎丢失了国家字符(猜它一定是unicode?)
此外,我需要能够设置重播增益标签,和专辑艺术(所有目前在FLAC的)。
我正在寻找一个脚本化的解决方案运行无人值守。

r9f1avp5

r9f1avp51#

如果您对Python解决方案感兴趣,那么诱变剂库看起来真的很不错。
它可以像这样简单:

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文件。

7uhlpewt

7uhlpewt2#

试试这个工具eyed3。它支持专辑封面嵌入,文本编码在latin 1,utf8,utf 16-BE和utf 16-LE。但不支持重放增益。据我所知,它不是广泛支持。

3xiyfsfu

3xiyfsfu3#

维克托的解决方案给我指明了方向。但是,如果将标签复制到刚转换过的文件(例如,从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
hl0ma9xz

hl0ma9xz4#

下面是另一个使用ffmpeg的解决方案。例如,只需要在$HOME/.bashrc中定义一个bash函数:

flac2mp3() 
{ 
  ffmpeg -i "$1" -ab 320k -map_metadata 0 -id3v2_version 3 "$(basename "$1" flac)mp3"
}
xytpbqjk

xytpbqjk5#

Quod Libet附带了一个名为operon的命令行工具,可执行以下操作及更多操作:

operon copy song.flac song.mp3

由于Quod Libet是基于Mutagen构建的,它知道一堆晦涩难懂的标签,以及如何在各种标签格式之间转换它们,这对一些工作流很重要。我注意到的唯一怪癖是它不会复制空值标签,但这并不困扰我。

相关问题