পাইথনের সাথে এমপি 3 মেটাডেটা অ্যাক্সেস করা হচ্ছে [বন্ধ]


122

পাইথনে আমি কীভাবে এমপি 3 মেটাডেটা পুনরুদ্ধার করতে পারি?

উত্তর:


106

আমি অন্যান্য সাফল্যের সাথে অন্য দিন আইডি 3 ব্যবহার করেছি । আমি আবিষ্কার করেছি যে এটি আইডি 3 ট্যাগটিতে শিল্পকর্ম যুক্ত করতে পারে যা অন্য মডিউলগুলি আমি দেখেছি তা করতে পারেনি। আপনাকে পিপ ব্যবহার করে ইনস্টল করতে হবে বা টারটি ডাউনলোড করতে হবে এবং python setup.py installউত্স ফোল্ডারটি থেকে কার্যকর করতে হবে।

ওয়েবসাইট থেকে প্রাসঙ্গিক উদাহরণ নীচে।

ভি 1 বা ভি 2 ট্যাগ তথ্য সহ কোনও এমপি 3 ফাইলের বিষয়বস্তু পড়া:

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

একটি এমপি 3 ফাইল (ট্র্যাক দৈর্ঘ্য, বিটরেট ইত্যাদি) পড়ুন এবং এর ট্যাগটিতে অ্যাক্সেস করুন:

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

লিঙ্কযুক্ত ট্যাগটি যদি ভি 2 হয় এবং আপনি এটি ভি 1 হিসাবে সংরক্ষণ করতে চান:

 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
আইডি 3 এছাড়াও জিপিএল ... সুতরাং আমার মতো আপনি যদি এটি আপনার প্রোগ্রামে ব্যবহারের পরিকল্পনা করেন তবে আপনাকে অবশ্যই একটি মুক্ত প্রোগ্রাম হিসাবে আপনার প্রোগ্রামটি প্রকাশ করতে হবে ... এই লোকদের সাথে এটি ঘৃণা করুন, কেন তারা এলজিপিএলের অধীনে মুক্তি দিতে পারবেন না?
সিয়ানটিক

9
@ সায়েন্টিক: আইডি 3 ট্যাগগুলি অত্যন্ত সহজ, আপনি নিজেরাই একটি লাইব্রেরি তৈরি করে বিএসডির অধীনে প্রকাশ করবেন না কেন? তদতিরিক্ত, এই লোকেরা প্রথমে আপনার কোনও কিছুর মালিক নয় own এখানে ডাইভেন্টোপথথন.আর.ও.
এস্টেবান কাবার

2
@ ভোয়েজার, আইডি 3 ভি 1 ট্যাগগুলি সহজ, আইডি 3 ভি 2 ট্যাগগুলি নরকের মতো জটিল ... এবং এখন আমি পাইটাগার গিথুব / সায়েন্টিক / সাংসদেটেলগুলির জন্য বিএসডি মোড়ক তৈরি করেছি, এটি এখনও প্রকাশিত হিসাবে ট্যাগ করা হয়নি, তবে এটি কার্যকর।
সিয়ানটিক

5
নতুন সংস্করণে, import eyed3(ছোট হাতের ডি) ব্যবহার করুন ।
জেক জেড

4
নোট করুন যে এই নোটগুলি আইড 3 এর পুরানো সংস্করণের জন্য এবং এটি আর ভাল কাজ করবে না। উদাহরণস্বরূপ, লিঙ্ক () ফাংশনটি চলে গেছে এবং বৈশিষ্ট্যগুলি সেটটার ছাড়াই এখন ঘোষণামূলকভাবে সেট করা আছে।
mlissner

37

আমি আগে মিডিয়া ফাইলগুলিতে ট্যাগ সম্পাদনা করতে মিউটেজেন ব্যবহার করেছি । মিউটাজেন সম্পর্কে দুর্দান্ত জিনিসটি হ'ল এটি অন্যান্য ফর্ম্যাটগুলি যেমন এমপি 4, এফএলএসি ইত্যাদি পরিচালনা করতে পারে আমি এই এপিআইটি ব্যবহার করে প্রচুর সাফল্য সহ বেশ কয়েকটি স্ক্রিপ্ট লিখেছি।


2
কোড.google.com/p/mutagen - এছাড়াও নোট করুন যে মুতাগেন হ'ল জিপিএল, তাই বেশিরভাগ প্রকল্পের জন্য এটি কোনও নয়।
সিয়েন্টিক

3
মুতাগেন দুর্দান্ত, তবে আমি শিল্পী, শিরোনাম জেনার ইত্যাদি পাওয়ার জন্য একটি অভিন্ন পদ্ধতি অনুপস্থিত end আপনি বিভিন্ন কীগুলি জানতে পেরেছেন, যা ফর্ম্যাট নির্ভর। TIT2এমপি 3 এর titleজন্য, ওগের \xa9namজন্য, এমপি 4 এর Titleজন্য, ডাব্লুএমএ ইত্যাদির জন্য - যা সফল হয়।
কিট আছে - অ্যানি-মৌসে

20

একটি সমস্যা eyed3হ'ল এটি NotImplementedError("Unable to write ID3 v2.2")সাধারণ এমপি 3 ফাইলগুলির জন্য ছুঁড়ে ফেলবে ।

আমার অভিজ্ঞতায় 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()

অন্যান্য সমস্ত ট্যাগ এইভাবে অ্যাক্সেস করা যায় এবং সেভ করা যায়, যা বেশিরভাগ উদ্দেশ্যে পরিবেশন করবে। আরও তথ্য মুটাগেন টিউটোরিয়ালে পাওয়া যাবে ।


13

আপনি যা পরে আইডি 3 মডিউল। এটি খুব সহজ এবং আপনার যা প্রয়োজন ঠিক তা দেবে। কেবল আপনার সাইট-প্যাকেজ ডিরেক্টরিতে 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
শুধু একটি নোট. এই মডিউলটি খুব পুরানো (2002) এবং আইডি 3 ট্যাগগুলির ভি 2 সমর্থন করে না
এলি বেন্ডারস্কি

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


6

বই ডাইভ মধ্যে পাইথন আমার জন্য ঠিক কাজ করে থেকে সহজ উদাহরণটা, এই ডাউনলোড লিংক, উদাহরণস্বরূপ fileinfo.py হয়। এটি সেরা কিনা জানেন না তবে এটি প্রাথমিক কাজটি করতে পারে।

পুরো বইটি এখানে অনলাইনে উপলব্ধ ।


3
অজগর সংস্করণের দিক থেকে এবং আইডি 3 সংস্করণের দিক থেকে এই উদাহরণটি এখন কিছুটা পুরানো
বেক্স

উভয় লিঙ্ক আর কাজ করছে না। (আমি জানি উত্তরটি 9 বছর পুরানো) আপনি যদি "ডাইভ ইন পাইথন" বইটি সন্ধান করেন তবে এখানে বর্তমান লিঙ্কটি দেওয়া হয়েছে
এডউইন ভ্যান মিয়ারলো

সেই লিঙ্কটি আর কাজ করছে না। আমি এখন দ্রুত গুগল করতে পারলাম সেরাটি
ট্রিপল

6

আমি উপরের উত্তরগুলি সন্ধান করেছি এবং জানতে পেরেছি যে জিপিএল লাইসেন্স সংক্রান্ত সমস্যার কারণে তারা আমার প্রকল্পের পক্ষে ভাল নয়।

এবং আমি এটি খুঁজে পেলাম: পাইআইডি 3 লাইব , সেই নির্দিষ্ট পাইথনের বাইন্ডিং মুক্তির তারিখটি পুরানো হলেও এটি আইডি 3 লিব ব্যবহার করে , যা নিজেই আপ টু ডেট।

উল্লেখ করার মতো বিষয় হ'ল উভয়ই এলজিপিএল , এবং যেতে ভাল।


4

সহজতম পদ্ধতি হ'ল গানের বিবরণ ..

তথ্য পড়ার জন্য

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

যোগ করতে ভুলবেন না তোমার দর্শন লগ করা নাম আগে যতক্ষণ না আপনি চীনা ভাষা জানি।

আপনি পাইথন গ্লোব মডিউলটি ব্যবহার করে বাল্কে পড়া এবং সম্পাদনা করতে পারেন

প্রাক্তন।

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

4

pip installএখানে চোখের ত্রুটিযুক্ত 3, পাইগলিব এবং আইডি 3 মডিউলগুলির জন্য সরল রুটটি চেষ্টা করার পরে , আমি দেখতে পেলাম যে এই চতুর্থ বিকল্পটিই কাজ করেছিল। বাকিদের সি ++ বা কিছু ম্যাজিক বা অন্য কোনও লাইব্রেরি থেকে হারিয়ে যাওয়া নির্ভরতাগুলির সাথে আমদানি ত্রুটি ছিল pip। আইডি 3 ট্যাগ (সমস্ত সংস্করণ) এর প্রাথমিক পাঠের জন্য এটির সাথে যান:

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

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

টিনিট্যাগ দিয়ে আপনি যে সম্ভাব্য বৈশিষ্ট্যগুলি পেতে পারেন তার তালিকা:

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

বিজ্ঞাপন হিসাবে এটি ক্ষুদ্র এবং স্ব-অন্তর্ভুক্ত ছিল।


1
টিনিট্যাগের জন্য নতুন সংস্করণ: pypi.org/project/tinytag
ডেইনিস তারগারিয়েন

2

প্রথম উত্তর যা আইড 3 ব্যবহার করে তা পুরানো হয় তাই এটির একটি আপডেট সংস্করণ এখানে।

একটি এমপি 3 ফাইল থেকে ট্যাগ পড়া:

 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 ব্যবহার করার চেষ্টা করার সময় আমি যে সমস্যার মুখোমুখি হয়েছিলাম তা ইনস্টল হওয়া সত্ত্বেও লিবম্যাগিকের একটি আমদানি ত্রুটির সাথে করণীয় ছিল। এটিকে ঠিক করার জন্য এখান থেকে ম্যাজিক-বিন WHL ইনস্টল করুন


2

আমি এমপি 3-ট্যাগার প্রস্তাব করব । এটির সর্বোত্তম বিষয় হ'ল এটি এমআইটি লাইসেন্সের অধীনে বিতরণ করা হয়েছে এবং সমস্ত প্রয়োজনীয় বৈশিষ্ট্যকে সমর্থন করে।

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

এটি এমপি 3 ফাইলের বৈশিষ্ট্যগুলি সেট, পান, আপডেট এবং মোছা সমর্থন করে।


1

এটি মেটাটাটা পড়া ছাড়াও আপনি ঠিক কী করতে চান তার উপর নির্ভর করতে পারে। আপনার যদি প্রয়োজন কেবল বিট্রেট / নাম ইত্যাদি যদি হয় এবং অন্য কিছু না হয় তবে হালকা কিছু সম্ভবত সম্ভবত সেরা।

আপনি যদি এমপি 3 অতীতে হেরফের করছেন তবে পাইমিডিয়া উপযুক্ত হতে পারে।

বেশ কয়েকটি রয়েছে, আপনি যা কিছু পান তা নিশ্চিত করুন এবং প্রচুর নমুনা মিডিয়াতে এটি পরীক্ষা করুন। বিশেষত আইডি 3 ট্যাগের কয়েকটি পৃথক সংস্করণ রয়েছে, তাই নিশ্চিত হয়ে নিন যে এটি খুব বেশি পুরানো নয়।

ব্যক্তিগতভাবে আমি ভাগ্যের সাথে এই ছোট এমপি 3আইএনফো ক্লাসটি ব্যবহার করেছি। যদিও এটি বেশ পুরানো।

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


0

কিছু প্রাথমিক গবেষণার পরে আমি ভেবেছিলাম গানের শিরোনামগুলি আমার ব্যবহারের ক্ষেত্রে ফিট করতে পারে তবে এটি .m4b ফাইলগুলি হ্যান্ডেল করে না। মুটাগেন করেন। নোট করুন যে মুটাগেনের ফরম্যাট-নেটিভ কীগুলির সারফেসিংয়ের ক্ষেত্রে কিছুটি (যুক্তিসঙ্গতভাবে) সমস্যা নিয়েছে, যেগুলি ফর্ম্যাট থেকে ফর্ম্যাটে পরিবর্তিত হয় (এমপি 3-এর জন্য টিআইটি 2, এমপি 4 এর জন্য শিরোনাম, ডাব্লুএমএর জন্য শিরোনাম ইত্যাদি), মিটেজেন.ফাইল ( ) এর একটি (নতুন?) সহজ = সত্য পরামিতি যা সহজ এমপি 3 / ইজিআইডি 3 ট্যাগ সরবরাহ করে, যা নিয়মিত, কীগুলির সেট সীমাবদ্ধ রয়েছে। আমি এখনও অবধি কেবল সীমিত পরীক্ষা করেছি, তবে সাধারণ কীগুলি, যেমন অ্যালবাম, শিল্পী, আলবুমার্টিস্ট, জেনার, ট্র্যাকনামার, ডিস্কনবার ইত্যাদি ইত্যাদি সহজ এবং সত্য ব্যবহার করে .mb4 এবং .mp3 ফাইলগুলির জন্য উপস্থিত এবং অভিন্ন it আমার উদ্দেশ্যে খুব সুবিধাজনক।


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

আপনি কি এর জন্য সরবরাহ এবং ব্যাখ্যা দিতে পারেন?
নেলস

0

আমি টিনিট্যাগটি 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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.