Скрипт Linux для переноса тегов (ID3) из FLAC в MP3

Для своего медиасервера я ищу способы переноса тегов из моих файлов FLAC в MP3.

В скрипте bash я могу извлечь теги, используя metaflac, в локальные переменные, но при тегировании mp3 с помощью id3v2, я, кажется, теряю национальные символы (угадайте, что это должен быть юникод?)

Также мне нужно иметь возможность устанавливать теги усиления воспроизведения и обложки альбомов (все это присутствует во FLAC).

Я ищу скриптовое решение для запуска без присмотра.


person TheRoadrunner    schedule 15.01.2012    source источник


Ответы (4)


Попробуйте этот инструмент eyed3. Он поддерживает встраивание обложек альбомов, кодировку текста в latin1, utf8, utf16-BE и utf16-LE. Однако усиление воспроизведения не поддерживается. Насколько я понимаю, он не получил широкой поддержки.

person Neox    schedule 15.01.2012
comment
Это было лучшее решение до сих пор. Кажется, я даже могу установить значения усиления воспроизведения (извлеченные из FLAC), используя --set-user-text-frame. Единственная проблема - это тег года, который можно установить и, по-видимому, снова прочитать с помощью eyeD3, но он не читается с помощью mp3Tag (для Windows). - person TheRoadrunner; 18.01.2012
comment
Предупреждение о не-ascii-символах: кодек «ascii» не может декодировать байт 0xc3 в позиции XX: порядковый номер не в диапазоне (128), но не-ascii-символы прекрасно вставляются в новые теги. - person TheRoadrunner; 18.01.2012
comment
Проблема года решена: eyeD3 использует теги ID3v2.4 по умолчанию. Метаданные за год в этой версии более сложны. eyeD3 -Y записывает в тег TDRL (дата выпуска), тогда как mp3tag (и другие) ищет год в теге TDRC (время записи). Изменение моего скрипта тегов для включения --set-text-frame=TDRC:$DATE решает мою проблему. - person TheRoadrunner; 28.01.2012

Если вы заинтересованы в решении 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.

person Victor Roetman    schedule 16.04.2012
comment
Это сработало для меня, но мне пришлось использовать параметр сохранения, чтобы принудительно установить 1D3v2.3 для совместимости с проводником Windows 7. Mutagen хочет использовать v2.4 вместо этого по умолчанию, но параметры сохранения позволяют вам изменить его: mp3file.save(None, 1, 3) Первые 2 аргумента — это имя файла по умолчанию и что делать с тегами v1, третий аргумент — это точка v2. версия. mutagen.readthedocs.org/ ru/последний/апи/ - person Pam G; 19.12.2015

Решение Виктора указало мне путь. Однако может произойти сбой при копировании тегов в файл, который вы только что преобразовали, например, из 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
person markling    schedule 19.11.2016

Вот еще одно решение с использованием ffmpeg. Например. просто определите функцию bash в $HOME/.bashrc:

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