programing

Python으로 MP3 메타데이터 액세스

stoneblock 2023. 10. 21. 09:53

Python으로 MP3 메타데이터 액세스

파이썬을 이용하여 MP3 ID3 메타데이터를 검색하고 설정할 수 있는 유지보수 패키지가 있습니까?

얼마 전에 아이디쓰리를 사용해서 많이 성공했습니다.제가 본 다른 모듈들은 볼 수 없었던 ID3 태그에 예술작품을 추가할 수 있다는 것을 발견했습니다.pip을 사용하여 설치하거나 tar를 다운로드하여 실행해야 합니다.python setup.py install원본 폴더에서.

웹사이트의 관련 예시는 아래와 같습니다.

v1 또는 v2 태그 정보가 포함된 mp3 파일의 내용 읽기:

 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()

미디어 파일의 태그를 편집하기 위해 뮤타젠을 사용한 적이 있습니다.mutagen의 좋은 점은 mp4, FLAC 등 다른 포맷을 다룰 수 있다는 것입니다.저는 이 API를 이용하여 여러 개의 스크립트를 작성하여 많은 성공을 거두었습니다.

문제.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()

다른 모든 태그는 이러한 방식으로 액세스하여 저장할 수 있으므로 대부분의 목적에 적합합니다.자세한 내용은 Mutagen 자습서에서 확인할 수 있습니다.

당신이 노리는 것은 ID3 모듈입니다.그것은 매우 간단하며 당신이 필요로 하는 것을 정확하게 제공해 줄 것입니다.ID3.py 파일을 사이트 packages 디렉토리에 복사하기만 하면 다음과 같은 작업을 수행할 수 있습니다.

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

간단한 것을 시도한 후에pip install여기서 추천하는 eyeD3, pytaglib, ID3 모듈에 대한 경로, 이 네 번째 옵션이 유일하게 작동한다는 것을 알았습니다.나머지는 C++나 마법이나 기타 라이브러리에 의존성이 누락된 가져오기 오류가 있었습니다.pip빗나간 ID3 버전을 위해 하십시오.따라서 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

그것은 광고대로 작고 자립적이었습니다.

이것을 확인해 보세요.

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()

여러분께 드리는 추가 정보입니다.

Python InMusic 페이지의 "MP3 스터프 및 메타데이터 편집자" 섹션을 살펴봅니다.

나는 작은 태그 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>

가장 쉬운 방법은 노래 디테일입니다.

읽기 데이터용

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()

중국어를 알 때까지 이름 앞에 우리를 넣는 것을 잊지 마세요.

python glob 모듈을 사용하여 대량으로 읽고 편집할 수 있습니다.

전과가 있는

import glob
songs = glob.glob('*')   # script should be in directory of songs.
for song in songs:
    # do the above work.

위 답변들을 살펴보니 GPL의 라이선스 문제로 인해 제 프로젝트에 적합하지 않습니다.

PyID3Lib이라는 것을 알게 되었습니다. 특정 파이썬 바인딩 릴리스 날짜가 오래되었지만 ID3Lib을 사용하고 있으며 ID3Lib 자체는 최신입니다.

주목할 만한 점은 둘 다 LGPL이고, 가기 좋다는 것입니다.

Dive Into Python 책의 간단한 예는 저에게 좋습니다. 이것은 다운로드 링크이고, 예는 fileinfo.py 입니다.그게 최선인지는 모르겠지만 기본적인 일은 할 수 있습니다.

책 전체를 여기서 온라인으로 이용할 수 있습니다.

아이드3를 사용한 첫 번째 답변은 구식이라서 업데이트된 버전입니다.

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

아이드3를 처음 사용하려다가 발생한 문제는 설치되어 있음에도 libmagic의 Import 오류와 관련이 있습니다.이 문제를 해결하려면 여기서 마법 빈을 설치합니다.

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 파일의 속성 설정, 가져오기, 업데이트 및 삭제를 지원합니다.

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

메타데이터를 읽는 것 외에 정확히 무엇을 하고 싶은지에 따라 달라질 수 있습니다.필요한 비트레이트/이름 등이 필요하고 다른 것이 없다면 가벼운 것이 가장 좋습니다.

만약 당신이 mp3 과거를 조작하고 있다면 PyMedia가 적합할지도 모릅니다.

꽤 많은 제품이 있습니다. 무엇을 얻든지 간에, 많은 샘플 매체를 통해 확인하고 테스트해 보십시오.ID3 태그는 특별히 몇 가지 버전이 있으니, 너무 오래되지 않도록 해주세요.

개인적으로 나는 운 좋게 이 작은 MP3Info 수업을 사용했습니다.그래도 꽤 오래된 것 같습니다.

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

초기 조사 후 노래 세부 정보가 내 사용 사례에 맞을지도 모른다고 생각했지만 .m4b 파일을 처리할 수 없습니다.뮤타겐이.일부에서는 Mutagen의 포맷 네이티브 키(mat-native key)의 표면화에 대해 문제를 제기하지만, 포맷마다 차이가 있습니다(mp3의 경우 TIT2, ogg의 경우 Title, mp4의 경우 Titlexa9nam, WMA의 경우 Title 등), mutagen.파일()에 (새것?)이 있습니다.Easy=EasyMP3/Easy를 제공하는 True 파라미터제한적이긴 하지만 일관된 키 집합을 가진 ID3 태그.지금까지 제한적인 테스트만 해봤지만, easy=를 사용할 경우 공통키인 앨범, 아티스트, 앨범 아티스트, 장르, 트랙 넘버, 디스크 넘버 등이 모두 존재하며 .mb4 및 .mp3 파일에 대해 동일합니다.맞아요, 제 목적에 맞게 아주 편리하게 해드려요.

언급URL : https://stackoverflow.com/questions/8948/accessing-mp3-metadata-with-python