ซ่อมการเข้ารหัสแท็ก ID3


12

ฉันได้รับมรดกประมาณ 2000 ไฟล์ MP3 สำหรับคนส่วนใหญ่แล้วแท็ก ID3ของพวกเขาจะอ่านไม่ออกใน Amarok ฉันต้องการซอฟต์แวร์ที่อัพเกรดแท็ก ID3 เป็นประเภท v2.4 $03(เช่นการเข้ารหัส UTF-8), ลบแท็ก v1 ใด ๆ และยังฉลาดเกี่ยวกับการหาการเข้ารหัสดั้งเดิมเป็นกรณี ๆ ไป Windows-1252, BOM-less UTF-16 หรือ GB18030)

ก่อนที่ฉันจะเริ่มเขียนโปรแกรมนี้ด้วยตนเองบน TagLib มีวิธีแก้ไขปัญหาที่สมบูรณ์แบบที่ฉันสามารถใช้ได้หรือไม่?

ไม่แนะนำ Musicbrainz - มันลำเอียงอย่างหนักกับเพลงที่ตีพิมพ์ในสหรัฐอเมริกาและอยู่ใกล้กับฉัน อย่าแนะนำซอฟต์แวร์การติดแท็ก ID3 ทั่วไปโดยไม่ทดสอบก่อนตามข้อกำหนดของฉัน - ส่วนใหญ่เป็นซอฟต์แวร์เหล่านั้น

  • ไม่รองรับ v2.4
  • มีพูดตรงไปตรงมาความคิดที่เงียบหน่วงเกี่ยวกับการเข้ารหัสอักขระ
  • ไม่มีคุณสมบัติอัตโนมัติ (ฉันไม่ต้องการใช้เวลาแก้ไขด้วยตนเอง)

ฉันยังไม่ได้สนใจในการล้างแท็ก, การเปลี่ยนชื่อจำนวนมากหรือการจัดหมวดหมู่ซอฟต์แวร์เท่านั้น ฉันได้ทำขั้นตอนการทำให้เป็นมาตรฐานตามที่กล่าวไว้ข้างต้น

คำตอบ:


9

คุณต้องการ Ex Falso เครื่องมือแก้ไขแท็กที่รวมอยู่ในโครงการQuod Libet Picard (MusicBrainz tagger) อาจใช้ไลบรารีการแท็กเดียวกัน แต่ QL มีต้นกำเนิดอยู่

โดยเฉพาะอย่างยิ่งคุณต้องการไลบรารีการติดแท็ก Mutagenซึ่งรองรับ id3v2.4 (และโดย "สนับสนุน" ฉันหมายถึง "บังคับใช้" ... ทางทหาร ... ) นอกจากนี้ยังยอดเยี่ยมในการเข้ารหัสอักขระและมีแท็กบรรทัดคำสั่งพื้นฐานที่สามารถสคริปต์ได้ ( mid3v2) ตราบใดที่ขั้นตอนการทำให้เป็นมาตรฐานของคุณดำเนินไป Mutagen จะบันทึกเฉพาะแท็กใน ID3v2.4 เท่านั้น แน่นอนว่ามันสามารถแปลงข้อความทั้งหมดเป็น UTF-8 ได้ แต่คุณอาจต้องเขียนสคริปต์ด้วยตัวเอง (ฉันเชื่อว่าmid3v2ค่าเริ่มต้นของเครื่องมือคือการเข้ารหัสปัจจุบันที่เป็นไปได้และฉันไม่รู้ว่าจะสามารถบอกให้บันทึกได้หรือไม่ ทุกอย่างในการเข้ารหัสโดยเฉพาะ) Mutagen เขียนด้วย Python

Ex Falso เป็น GUI ที่ดีและสะอาดและรองรับฟีเจอร์ retag-multiple-files ที่คุณคาดหวัง ฉันไม่คิดว่ามันจะเป็นการค้นหาทางอินเทอร์เน็ตมากนักและฉันก็ไม่รู้ว่ามันเป็นอย่างไรกับงานปกอัลบั้ม - Quod Libet อาจสนับสนุนสิ่งนั้น Ex Falso สามารถทำได้ด้วยปลั๊กอินควรมีอยู่แม้ว่าจะไม่มีอยู่ก็ตาม ฉันไม่เคยต้องการฟังก์ชั่นนั้น - ฉันใช้ EF และmid3v2ในคอนเสิร์ตเพื่อจัดการกับความต้องการของการติดแท็ก

Ex Falso ส่วนหนึ่งของโครงการ Quod Libet


mid3v2เป็นวิธีแก้ปัญหาเพียงครึ่งเดียว หลังจากลองใช้แล้วมันไม่ดีอย่างแน่นอนกับการเข้ารหัสที่ฉันระบุที่ฉันกำลังทนทุกข์ทรมานนั่นคือแท็ก ID3 ที่อัปเกรดแล้วยังแสดงผิดใน Amarok Mutagen ไม่ต้องการของฉันเกี่ยวกับ»ฉลาดในการหาการเข้ารหัสดั้งเดิม«; มันเป็นการสันนิษฐานLatin1/ Windows-1252ซึ่งเป็นไปตามมาตรฐาน แต่ไม่มีประโยชน์สำหรับโลกแห่งความยุ่งเหยิง ฉันมีแนวโน้มที่จะไม่ยอมรับคำตอบนี้ในตอนนี้ ฉันจะให้โอกาสอีกสองสามวันสำหรับคำตอบอื่น ๆ ถ้าไม่มีอะไรดีคุณก็จะได้รับการยอมรับ
daxim

ยอมรับอย่างสมบูรณ์ หากคุณเป็นงูใหญ่ผู้เขียนโค้ดคุณอาจลองเขียนสคริปต์ที่ใช้ Mutagen ไปยัง a) อ่านในแท็กที่มีอยู่ b) ทำตามขั้นตอนการแปลงสมาร์ท (ขึ้นอยู่กับสิ่งที่คุณสงสัยหรือรู้ว่าการเข้ารหัสแหล่งที่มา) ) เขียนแท็กใหม่ ดูเหมือนว่ามันเป็นขั้นตอนการแปลงที่mid3v2ไม่สว่างเกินไปและนั่นก็ไม่ทำให้ฉันประหลาดใจ ... แต่ฉันคิดว่าหลามมีโมดูลการเข้ารหัสอักขระบางตัว (อาจจะiconvคล้ายกันหรือคล้ายกัน) ที่ฉลาดกว่าและอาจเป็นประโยชน์ต่อ DIY เอ้อ
ต้มตุ๋น quixote

ฉันไม่ได้เป็นงูหลาม coder เองหรือฉันมีคำแนะนำที่เป็นประโยชน์เพิ่มเติม บางทีใครบางคนใน stackoverflow อาจมีแนวคิดที่ดีกว่าถ้าคุณจบการเขียนสคริปต์ของคุณเอง
ต้มตุ๋น quixote

9

ฉันไม่คิดว่าคุณจะพบแอปพลิเคชันแบบสแตนด์อโลนที่จะแก้ไขการเข้ารหัสที่ติดแท็กไม่ถูกต้อง การมีส่วนผสมของ cp1252, UTF-16 และ GB-18030 นั้นค่อนข้างผิดปกติและฉันไม่คิดว่าซอฟต์แวร์ที่มีอยู่จะสามารถแก้ไขได้โดยอัตโนมัติ

ดังนั้นฉันจะดาวน์โหลด Mutagenและเขียนสคริปต์ Python แบบกำหนดเองเพื่อทำการตัดสินใจของคุณเองโดยอัตโนมัติเกี่ยวกับวิธีแก้ไขการเข้ารหัสที่ไม่รู้จัก ตัวอย่างเช่น:

musicroot= ur'C:\music\wonky'
tryencodings= 'gb18030', 'cp1252'

import os
import mutagen.id3

def findMP3s(path):
    for child in os.listdir(path):
        child= os.path.join(path, child)
        if os.path.isdir(child):
            for mp3 in findMP3s(child):
                yield mp3
        elif child.lower().endswith(u'.mp3'):
            yield child

for path in findMP3s(musicroot):
    id3= mutagen.id3.ID3(path)
    for key, value in id3.items():
        if value.encoding!=3 and isinstance(getattr(value, 'text', [None])[0], unicode):

            if value.encoding==0:
                bytes= '\n'.join(value.text).encode('iso-8859-1')
                for encoding in tryencodings:
                    try:
                        bytes.decode(encoding)
                    except UnicodeError:
                        pass
                    else:
                        break
                else:
                    raise ValueError('None of the tryencodings work for %r key %r' % (path, key))
                for i in range(len(value.text)):
                    value.text[i]= value.text[i].encode('iso-8859-1').decode(encoding)

            value.encoding= 3
    id3.save()

สคริปต์ข้างต้นทำให้สมมติฐานบางอย่าง:

  1. เฉพาะแท็กที่ระบุว่ากำลังเข้ารหัส 0 เท่านั้นที่ผิด (การเข้ารหัส 0 ที่เห็นได้ชัดคือ ISO-8859-1 แต่ในทางปฏิบัติมักเป็นหน้ารหัสเริ่มต้นของ Windows)

  2. หากแท็กถูกทำเครื่องหมายว่าอยู่ในการเข้ารหัส UTF-8 หรือ UTF-16 มันจะถือว่าถูกต้องและเพียงแค่แปลงเป็น UTF-8 หากยังไม่มีแท็ก โดยส่วนตัวฉันไม่เคยเห็น ID3 ที่ถูกทำเครื่องหมายว่าเป็น UTF (เข้ารหัส 1-3) ด้วยความผิดพลาดมาก่อน โชคดีที่การเข้ารหัส 0 นั้นง่ายต่อการกู้คืนเป็นไบต์ดั้งเดิมเนื่องจาก ISO-8859-1 เป็นการแมปโดยตรงแบบ 1 ต่อ 1 ของค่าไบต์ลำดับ

เมื่อพบแท็กการเข้ารหัส 0 สคริปต์จะพยายามสร้างใหม่เป็น GB18030 ก่อนจากนั้นถ้ามันไม่ถูกต้องย้อนกลับไปที่หน้ารหัส 1252 การเข้ารหัสไบต์เดียวเช่น cp1252 จะมีแนวโน้มที่จะจับคู่กับลำดับไบต์ที่ดีที่สุด ในตอนท้ายของรายการการเข้ารหัสที่จะลอง

หากคุณมีการเข้ารหัสอื่น ๆ เช่น cp1251 Cyrillic หรือชื่อไฟล์ cp1252 จำนวนมากที่มีอักขระเน้นเสียงหลายตัวติดต่อกันซึ่งทำให้เข้าใจผิดว่าเป็น GB18030 คุณจะต้องใช้อัลกอริธึมที่ชาญฉลาดในการเรียงลำดับบางอย่าง อาจดูชื่อไฟล์เพื่อเดาว่ามีตัวละครประเภทไหนที่น่าจะนำเสนอ?


+1, สคริปต์ตัวอย่างที่ดี, และคำอธิบายที่ดีเกี่ยวกับสิ่งที่มันทำและสิ่งที่มันทำ ฉันแยกพวกมันออกเพื่อทำให้ชัดเจนขึ้น หวังว่าคุณจะไม่รังเกียจ
ต้มตุ๋น Quixote

0

แล้วMp3Tagกับไวน์ล่ะ?

คุณสมบัติ (อื่น ๆ ):

การแก้ไขแท็กแบตช์เขียน ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 แท็กและ Vorbis ความคิดเห็นไปยังหลายไฟล์พร้อมกัน

นำเข้าจาก Amazon, discogs, freedb, MusicBrainz บันทึกการพิมพ์และนำเข้าแท็กจากฐานข้อมูลออนไลน์เช่น Amazon, discogs, freedb, MusicBrainz และอีกมากมาย

แทนที่อักขระหรือคำแทนที่สตริงในแท็กและชื่อไฟล์ (ด้วยการสนับสนุนนิพจน์ปกติ)

รองรับ Unicode อย่างเต็มรูปแบบส่วนติดต่อผู้ใช้และการติดแท็กเป็นไปตาม Unicode อย่างสมบูรณ์


-1

Foobar มีสวยสนับสนุนการติดแท็กที่สมบูรณ์ มันทำงานภายใต้ไวน์


-1

นอกจากนี้ยังมีEasyTag

EasyTAG เป็นเครื่องมือสำหรับดูและแก้ไขแท็กสำหรับ MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, Monkey's Audio และ WavPack อินเตอร์เฟส GTK + ที่เรียบง่ายและสวยงามของมันช่วยให้การติดแท็กง่ายขึ้นภายใต้ GNU / Linux หรือ Windows

นอกจากนี้คุณอาจต้องการทราบว่า id3v2.3 เป็นรูปแบบที่นิยมกว่าปกติเนื่องจากโปรแกรมเล่นสื่อ windows ไม่รองรับ 2.4


ผู้ที่ยืนยันในการติดตามข้อมูลจำเพาะ v2.4 โดยทั่วไปจะไม่สนใจในสิ่งที่ Windows Media Player ทำหรือไม่สนับสนุน ...
quack quixote
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.