Sửa chữa mã hóa thẻ ID3


12

Tôi đã thừa hưởng khoảng 2000 tệp MP3. Đối với phần lớn trong số họ, thẻ ID3 của họ hiển thị bị cắt xén ở Amarok. Tôi cần một phần mềm nâng cấp các thẻ ID3 lên loại v2.4 $03(tức là mã hóa UTF-8), loại bỏ bất kỳ thẻ v1 nào và cũng rất thông minh trong việc tìm ra mã hóa gốc trên cơ sở từng trường hợp (rất có thể là một trong số Windows-1252, BOM-UTF-16 hoặc GB18030).

Trước khi tôi bắt đầu lập trình điều này một mình trên TagLib, tôi đã có thể sử dụng một giải pháp hoàn chỉnh như vậy chưa?

Không đề xuất Musicbrainz - nó thiên về âm nhạc xuất bản ở Hoa Kỳ và gần như vô dụng đối với tôi. Không đề xuất phần mềm gắn thẻ ID3 chung mà không kiểm tra phần mềm trước yêu cầu của tôi - hầu hết trong số họ

  • không hỗ trợ v2.4
  • Nói một cách thẳng thắn, những ý tưởng chậm chạp lặng lẽ về mã hóa nhân vật
  • không có tính năng tự động hóa (tôi không muốn dành thời gian chỉnh sửa thủ công).

Tôi cũng không (chưa) quan tâm đến việc làm sạch thẻ, đổi tên hàng loạt hoặc chỉ phân loại phần mềm; Trước tiên tôi đã thực hiện bước chuẩn hóa nói trên.

Câu trả lời:


9

Bạn muốn Ex Falso, trình chỉnh sửa thẻ có trong dự án Quod Libet . Picard (trình ghi thẻ MusicBrainz) có thể sử dụng cùng một thư viện gắn thẻ, nhưng QL đã khởi tạo nó.

Cụ thể, bạn muốn thư viện gắn thẻ Mutagen , hỗ trợ id3v2.4 (và bằng "hỗ trợ", ý tôi là "thực thi" ... về mặt quân sự ...). Nó cũng xuất sắc với mã hóa ký tự và bao gồm một thẻ lệnh dòng lệnh cơ bản ( mid3v2). Theo như bước chuẩn hóa của bạn, Mutagen chỉ lưu các thẻ trong ID3v2.4. Nó chắc chắn có khả năng chuyển đổi tất cả văn bản thành UTF-8, nhưng bạn có thể cần phải tự viết kịch bản đó (tôi tin rằng mid3v2mặc định của công cụ là giữ mã hóa hiện tại nếu có thể và tôi không biết liệu có thể bảo nó được lưu không tất cả mọi thứ trong một mã hóa cụ thể). Mutagen được viết bằng Python.

Ex Falso là một GUI đẹp, sạch và hỗ trợ hầu hết các tính năng retag-multi-file chính mà bạn mong đợi. Tôi không nghĩ nó hoạt động nhiều trong cách tra cứu trên internet và tôi không biết nó như thế nào với tác phẩm nghệ thuật album - Quod Libet có thể hỗ trợ điều đó; Ex Falso có thể làm điều đó với một plugin, nên tồn tại một cái, mặc dù một cái có thể không tồn tại. Tôi chưa bao giờ cần chức năng đó - Tôi sử dụng EF và mid3v2trong buổi hòa nhạc để xử lý các nhu cầu thử lại của mình.

Ex Falso, một phần của dự án Quod Libet


mid3v2chỉ là một nửa giải pháp. Sau khi thử nó, nó chắc chắn không tốt với các mã hóa được xác định sai mà tôi đang mắc phải, tức là thẻ ID3 được nâng cấp vẫn hiển thị sai trong Amarok. Mutagen không đạt yêu cầu của tôi về »thông minh về việc tìm ra mã hóa ban đầu«; nó hoàn toàn giả định Latin1/ Windows-1252, đó là tuân thủ tiêu chuẩn, nhưng vô dụng đối với thế giới thực lộn xộn. Tôi có khuynh hướng không chấp nhận câu trả lời này ngay bây giờ; Tôi sẽ cho một vài ngày nữa cơ hội cho các câu trả lời khác. Nếu không có gì tốt đến, bạn được chấp nhận.
daxim

Hoàn toàn chấp nhận được. nếu bạn là một lập trình viên python, bạn có thể cân nhắc viết một tập lệnh sử dụng Mutagen để a) đọc trong thẻ hiện có, b) thực hiện một số bước chuyển đổi thông minh (dựa trên những gì bạn nghi ngờ hoặc biết mã hóa nguồn) và c ) viết một thẻ mới. Nghe có vẻ như chủ yếu là bước chuyển đổi mid3v2không quá sáng và điều đó không làm tôi ngạc nhiên ... nhưng tôi nghĩ python có một số mô-đun mã hóa ký tự (có thể iconvhoặc tương tự) thông minh hơn và có thể hữu ích cho DIY- er.
quack quixote

Bản thân tôi không phải là một lập trình viên python hay tôi có một số gợi ý hữu ích hơn. có lẽ ai đó trên stackoverflow sẽ có ý tưởng tốt hơn nếu bạn kết thúc việc viết kịch bản của riêng mình.
quack quixote

9

Tôi không nghĩ rằng bạn sẽ tìm thấy một ứng dụng độc lập sẽ sửa chữa lựa chọn mã hóa được gắn thẻ không chính xác của bạn. Có hỗn hợp cp1252, UTF-16 và GB-18030 khá bất thường và tôi không nghĩ phần mềm hiện có sẽ có thể giải quyết điều đó một cách tự động.

Vì vậy, tôi sẽ tải xuống Mutagen và viết một tập lệnh Python tùy chỉnh để tự động hóa các quyết định của riêng bạn về cách khắc phục các mã hóa không xác định. Ví dụ:

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

Kịch bản trên đưa ra một vài giả định:

  1. Chỉ các thẻ được đánh dấu là mã hóa 0 là sai. (Mã hóa rõ ràng 0 là ISO-8859-1, nhưng trong thực tế, nó thường là trang mã mặc định của Windows.)

  2. Nếu một thẻ được đánh dấu là ở dạng mã hóa UTF-8 hoặc UTF-16 thì nó được coi là chính xác và chỉ cần chuyển đổi thành UTF-8 nếu nó chưa được mã hóa. Cá nhân tôi chưa thấy ID3 được đánh dấu là UTF (mã hóa 1-3) bị lỗi trước đó. May mắn thay, mã hóa 0 rất dễ phục hồi thành các byte gốc của nó vì ISO-8859-1 là ánh xạ trực tiếp 1 đến 1 của các giá trị byte thứ tự.

Khi đáp ứng thẻ mã hóa 0, tập lệnh cố gắng lấy lại thành GB18030 trước, sau đó nếu nó không hợp lệ sẽ quay lại trang mã 1252. Các mã hóa một byte như cp1252 sẽ có xu hướng khớp với hầu hết các chuỗi byte, vì vậy tốt nhất là đặt chúng ở cuối danh sách mã hóa để thử.

Nếu bạn có các bảng mã khác như cp1251 Cyrillic hoặc rất nhiều tên tệp cp1252 có nhiều ký tự có dấu liên tiếp, sẽ bị nhầm với GB18030, bạn sẽ cần một thuật toán đoán thông minh hơn. Có thể nhìn vào tên tệp để đoán loại nhân vật nào có khả năng có mặt?


+1, kịch bản ví dụ hay và giải thích tốt về những gì nó làm và những giả định mà nó đưa ra. tôi chia chúng ra để làm cho chúng rõ ràng hơn; hy vọng bạn không phiền
quack quixote

0

Làm thế nào về Mp3tag với rượu ?

Các tính năng (trong số những người khác):

Chỉnh sửa thẻ hàng loạt Viết ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 Thẻ và Vorbis Nhận xét cho nhiều tệp cùng một lúc.

Nhập từ Amazon, Discogs, freedb, MusicBrainz Lưu các thẻ gõ và nhập từ cơ sở dữ liệu trực tuyến như Amazon, Discogs, freedb, MusicBrainz, v.v.

Thay thế các ký tự hoặc từ Thay thế các chuỗi trong thẻ và tên tệp (có hỗ trợ Biểu thức chính quy).

Hỗ trợ Unicode đầy đủ Giao diện người dùng và gắn thẻ hoàn toàn tuân thủ Unicode.



-1

cũng có EasyTag

EasyTAG là một tiện ích để xem và chỉnh sửa thẻ cho các tệp MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, Monkey's Audio và WavPack. Giao diện GTK + đơn giản và đẹp mắt của nó giúp việc gắn thẻ dễ dàng hơn trong GNU / Linux hoặc Windows.

ngoài ra, bạn có thể muốn biết rằng id3v2.3 thường là định dạng thích hợp hơn, vì trình phát phương tiện windows không hỗ trợ 2.4


Những người khăng khăng tuân theo thông số v2.4 thường không quan tâm đến những gì Windows Media Player làm hoặc không hỗ trợ ...
quackote quixote
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.