Доступ к mp3 мета-данных с помощью Python

голоса
98

Что является лучшим способом для получения метаданных в mp3 питона? Я видел пару рамок там, но я не уверен в том, какой будет лучше использовать .... Есть идеи?

Задан 12/08/2008 в 14:16
источник пользователем
На других языках...                            


18 ответов

голоса
1

Этот инструментарий может делать то , что вам нужно. Я не могу сказать, что это «лучше», но на самом деле, если это то , что вам нужно, это все , что имеет значение, не так ли?

НТН

Ответил 12/08/2008 в 14:32
источник пользователем

голоса
7

Простой пример из книги Погружение в Python работает нормально для меня, это ссылка скачать, пример fileinfo.py. Не знаю , если это лучшее, но это может сделать основную работу.

Вся книга доступна в Интернете здесь .

Ответил 12/08/2008 в 14:37
источник пользователем

голоса
1

Это может зависеть от того, что вы хотите сделать в дополнение к чтению метаданных. Если это просто битрейт / имя и т.д., что вам нужно, и ничего другого, что-то легкое, вероятно, лучше.

Если вы манипулируя mp3 прошлое, PyMedia может быть подходящим.

Есть довольно много, все, что вы получите то, чтобы убедиться и проверить его на большом количестве образцов СМИ. Есть несколько различных версий ID3 тегов, в частности, поэтому убедитесь, что это не слишком устарели.

Лично я использовал этот небольшой класс mp3info с удачей. Это довольно старый, хотя.

http://www.omniscia.org/~vivake/python/MP3Info.py

Ответил 12/08/2008 в 14:37
источник пользователем

голоса
12

Что вы после этого является ID3 модуль. Это очень просто и даст вам именно то , что вам нужно. Просто скопируйте файл ID3.py в каталог сайтов-пакеты , и вы будете в состоянии сделать что - то вроде следующего:

from ID3 import *
try:
  id3info = ID3('file.mp3')
  print id3info
  # Change the tags
  id3info['TITLE'] = "Green Eggs and Ham"
  id3info['ARTIST'] = "Dr. Seuss"
  for k, v in id3info.items():
    print k, ":", v
except InvalidTagError, message:
  print "Invalid ID3 tag:", message
Ответил 12/08/2008 в 23:44
источник пользователем

голоса
33

Я использовал мутаген раньше редактирование тегов в медиа - файлах. Хорошая вещь о мутагене, что он может обрабатывать и другие форматы, такие как MP4, FLAC и т.д. Я написал несколько сценариев , с большим успехом , используя этот API.

Ответил 14/08/2008 в 08:46
источник пользователем

голоса
0

Если вы можете использовать IronPython, есть TagLibSharp. Он может быть использован с любого языка .NET .

Ответил 26/08/2008 в 16:48
источник пользователем

голоса
91

Я использовал eyeD3 другой день с большим успехом. Я обнаружил , что он мог бы добавить обложку к тегу ID3 , которые другие модули я смотрел на не мог. Вы должны загрузить деготь и выполнить python setup.py installиз исходной папки.

Соответствующие примеры с сайта ниже.

Чтение содержимого MP3-файл, содержащий либо v1 или v2 тегов информации:

 import eyeD3
 tag = eyeD3.Tag()
 tag.link("/some/file.mp3")
 print tag.getArtist()
 print tag.getAlbum()
 print tag.getTitle()

Читайте mp3 файл (длина дорожки, битрейт и т.д.) и доступ к его тег:

if eyeD3.isMp3File(f):
     audioFile = eyeD3.Mp3AudioFile(f)
     tag = audioFile.getTag()

Конкретные варианты тегов могут быть выбраны:

 tag.link("/some/file.mp3", eyeD3.ID3_V2)
 tag.link("/some/file.mp3", eyeD3.ID3_V1)
 tag.link("/some/file.mp3", eyeD3.ID3_ANY_VERSION)  # The default.

Или вы можете перебрать необработанные кадры:

 tag = eyeD3.Tag()
 tag.link("/some/file.mp3")
 for frame in tag.frames:
    print frame

После того, как тег связан с файлом может быть изменен и сохранен:

 tag.setArtist(u"Cro-Mags")
 tag.setAlbum(u"Age of Quarrel")
 tag.update()

Если тег связаны была v2, и вы хотели бы сохранить его как v1:

 tag.update(eyeD3.ID3_V1_1)

Читайте в теге и удалить его из файла:

 tag.link("/some/file.mp3")
 tag.remove()
 tag.update()

Добавить новый тег:

 tag = eyeD3.Tag()
 tag.link('/some/file.mp3')    # no tag in this file, link returned False
 tag.header.setVersion(eyeD3.ID3_V2_3)
 tag.setArtist('Fugazi')
 tag.update()
Ответил 19/09/2008 в 13:30
источник пользователем

голоса
5

Я посмотрел вышеуказанные ответы и выяснил, что они не хороши для моего проекта из-за лицензионные проблемы с лицензией GPL.

И я узнал , что это: PyID3Lib , в то время как этот конкретный питон привязки дата выпуска старый, он использует ID3Lib , который сам по себе является до настоящего времени.

Примечательно отметить, что оба LGPL , и хорошо идти.

Ответил 20/12/2009 в 18:32
источник пользователем

голоса
8

проверить это один из:

https://github.com/Ciantic/songdetails

Пример использования:

>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12

Сохранение изменений:

>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Ответил 30/12/2010 в 00:40
источник пользователем

голоса
5

Просто дополнительная информация для вас, ребята:

взгляните на раздел «MP3 вещи и редакторы метаданных» в странице PythonInMusic .

Ответил 08/07/2011 в 07:24
источник пользователем

голоса
0

После некоторых исследований я думал, что songdetails может уместиться мой случай использования, но он не обрабатывает .m4b файлов. Mutagen делает. Обратите внимание, что в то время как некоторые из них (разумно) принимать вопрос с наплавкой мутагена о формате родной ключи, которые варьируются от одного формата в другой (TIT2 для mp3, название для OGG, \ xa9nam для mp4, Название для WMA и т.д.), mutagen.File ( ) есть (новый?) легко = True параметр, который обеспечивает EasyMP3 / EasyID3 теги, которые имеют последовательный, хотя и ограниченный, набор ключей. Я только сделал ограниченное тестирование до сих пор, но общие ключи, как альбом, исполнитель, albumartist, жанр, номер_дорожки, discnumber и т.д., все присутствующие и идентичны для .mb4 и .mp3 файлов при использовании легко = True, что делает его очень удобно для моих целей.

Ответил 12/07/2015 в 22:17
источник пользователем

голоса
11

Проблема в eyed3том , что он будет бросать NotImplementedError("Unable to write ID3 v2.2")для обычных MP3 - файлов.

В моем опыте, mutagenкласс EasyID3работает более надежно. Пример:

from mutagen.easyid3 import EasyID3

audio = EasyID3("example.mp3")
audio['title'] = u"Example Title"
audio['artist'] = u"Me"
audio['album'] = u"My album"
audio['composer'] = u"" # clear
audio.save()

Все остальные теги можно получить таким образом и сохранены, которые будут служить большинству целей. Более подробную информацию можно найти в мутаген Учебник .

Ответил 23/01/2016 в 22:07
источник пользователем

голоса
4

Самый простой способ songdetails ..

для чтения данных

import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
    print song.artist

аналогично для редактирования

import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
    song.artist = u"The Great Blah"
    song.save()

Не забудьте добавить U перед именем , пока вы не знаете китайский язык.

и можно читать и редактировать в объеме, используя модуль питона Glob

ех.

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.
Ответил 11/08/2016 в 08:05
источник пользователем

голоса
0

Первый ответ , который использует eyed3 устарел , так вот обновленная версия этого.

Чтение тегов из MP3-файла:

 import eyed3

 audiofile = eyed3.load("some/file.mp3")
 print(audiofile.tag.artist)
 print(audiofile.tag.album)
 print(audiofile.tag.album_artist)
 print(audiofile.tag.title)
 print(audiofile.tag.track_num)

Пример с веб-сайта, чтобы изменить тэги:

 import eyed3

 audiofile = eyed3.load("some/file.mp3")
 audiofile.tag.artist = u"Integrity"
 audiofile.tag.album = u"Humanity Is The Devil"
 audiofile.tag.album_artist = u"Integrity"
 audiofile.tag.title = u"Hollow"
 audiofile.tag.track_num = 2

Вопрос , который я столкнулся при попытке использовать eyed3 впервые было связано с ошибкой libmagic импорта , даже если он был установлен. Чтобы исправить это установить волшебную бен WHL из здесь

Ответил 08/04/2018 в 14:52
источник пользователем

голоса
0

После попытки простого pip installмаршрута для eyeD3, pytaglib и ID3 модулей , рекомендованных здесь, я нашел этот четвертый вариант был только один работать. Остальные были ошибки импорта с отсутствующими зависимостей в C ++ или что - то магическим или какой - либо другой библиотеке , что pipпропустили. Так что с этим для основного чтения ID3 тегов (все версии):

https://pypi.python.org/pypi/tinytag/0.18.0

from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')

Список возможных атрибутов, которые вы можете получить с TinyTag:

tag.album         # album as string
tag.albumartist   # album artist as string
tag.artist        # artist name as string
tag.audio_offset  # number of bytes before audio data begins
tag.bitrate       # bitrate in kBits/s
tag.disc          # disc number
tag.disc_total    # the total number of discs
tag.duration      # duration of the song in seconds
tag.filesize      # file size in bytes
tag.genre         # genre as string
tag.samplerate    # samples per second
tag.title         # title of the song
tag.track         # track number as string
tag.track_total   # total number of tracks as string
tag.year          # year or data as string

Это был маленький и самодостаточным, как рекламируется.

Ответил 16/04/2018 в 00:34
источник пользователем

голоса
0

Я хотел бы предложить mp3-Tagger . Лучше всего об этом он распространяется по лицензии MIT и поддерживает все необходимые атрибуты.

- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.

Пример:

from mp3_tagger import MP3File

# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')

# Get all tags.
tags = mp3.get_tags()
print(tags)

Он поддерживает множество, получать, обновлять и удалять атрибуты файлов mp3.

Ответил 26/06/2018 в 12:50
источник пользователем

голоса
0

используя https://github.com/nicfit/eyeD3

import eyed3
import os

for root,  dirs, files in os.walk(folderp):
    for file in files:
        try:
            if file.find(".mp3") < 0:
                continue
            path = os.path.abspath(os.path.join(root , file))
            t = eyed3.load(path)
            print(t.tag.title , t.tag.artist)
            #print(t.getArtist())
        except Exception as e:
            print(e)
            continue
Ответил 07/02/2020 в 00:51
источник пользователем

голоса
0

Я использовал tinytag 1.3.1 , потому что

  1. Она активно поддерживается:
1.3.0 (2020-03-09):
added option to ignore encoding errors ignore_errors #73
Improved text decoding for many malformed files
  1. Он поддерживает основные форматы:
MP3 (ID3 v1, v1.1, v2.2, v2.3+)
Wave/RIFF
OGG
OPUS
FLAC
WMA
MP4/M4A/M4B
  1. Код РАБОТАЛ всего за несколько минут развития.
from tinytag import TinyTag

fileNameL ='''0bd1ab5f-e42c-4e48-a9e6-b485664594c1.mp3
0ea292c0-2c4b-42d4-a059-98192ac8f55c.mp3
1c49f6b7-6f94-47e1-a0ea-dd0265eb516c.mp3
5c706f3c-eea4-4882-887a-4ff71326d284.mp3
'''.split()

for fn in fileNameL:
    fpath = './data/'+fn
    tag = TinyTag.get(fpath)
    print()
    print('"artist": "%s",' % tag.artist)
    print('"album": "%s",' % tag.album)
    print('"title": "%s",' % tag.title)
    print('"duration(secs)": "%s",' % tag.duration)

  • РЕЗУЛЬТАТ
JoeTagPj>python joeTagTest.py

"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "17. Thomas Middleditch and Ben Schwartz",
"duration(secs)": "3565.1829583532785",

"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "Are you ready to make friends?",
"duration(secs)": "417.71840447045264",

"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "Introducing Conan’s new podcast",
"duration(secs)": "327.22187551899646",

"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "19. Ray Romano",
"duration(secs)": "3484.1986772305863",

C:\1d\PodcastPjs\JoeTagPj>
Ответил 10/03/2020 в 22:02
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more