PDA

Εμφάνιση Πλήρους Έκδοσης : MP3 με ελληνικά ID3 tags στο Linux, μέσω του Mp3tag


Eusebius
16-01-2008, 02:10
mp3,id3,id3v2,Linux,mp3tag

Η παρακάτω λύση υποθέτει ότι έχετε κάπου πρόχειρη μια εγκατάσταση Windows, από την οποία έχετε πρόσβαση στην μουσικοθήκη σας. Αν δοκιμάζετε πρώτη φορά το Linux και σκοντάφτετε πρώτη φορά πάνω σʼ αυτό το πρόβλημα, κατά πάσα πιθανότητα κάπου θα υπάρχει μια τέτοια εγκατάσταση. :-)

Ένας τρόπος να λύσουμε το πρόβλημα των ελληνικών MP3 που εμφανίζουν αλαμπουρνέζικα στα διάφορα προγράμματα του Linux.


Λίγη ιστορία και η πηγή του προβλήματος
Ο συνήθης λόγος που κάποια ελληνικά MP3 εμφανίζονται με ακαταλαβίστικους χαρακτήρες είναι ο εξής: τα μεταδεδομένα τους (δηλ. τα tags: καλλιτέχνης, άλμπουμ, τίτλος κλπ.) είναι αποθηκευμένα μόνο σε container τύπου ID3v1. Η απαρχαιωμένη πλέον προδιαγραφή του ID3v1 λέει ότι πρέπει να γράφουμε σε κωδικοσελίδα iso-8859-1, η οποία όμως δέχεται μόνο λατινικά. Έτσι, επί πολλά χρόνια, για πρακτικούς λόγους, γίνεται κατάχρηση και ο καθένας χρησιμοποιεί ό,τι κωδικοσελίδα τον βολεύει στα ID3v1 (εμείς οι Έλληνες χρησιμoποιούμε συνήθως windows-1253 ή iso-8859-7), πράγμα που τείνει να προκαλεί προβλήματα: όταν παίζουμε τα κομμάτια στο λειτουργικό σύστημα ή στο πρόγραμμα που φτιάχτηκαν, τα πάντα εμφανίζονται όπως θέλουμε, κι ας χρησιμοποιείται αντικανονική κωδικοσελίδα. Όταν πάμε σε ένα άλλο πρόγραμμα ή συσκευή ή λειτουργικό σύστημα, είναι πολύ πιθανό να βλέπουμε αλαμπουρνέζικα: τα προγράμματα αδυνατούν να αναγνωρίσουν αυτόματα ποια κωδικοσελίδα έχουμε χρησιμοποιήσει εμείς καταχρηστικά, αντί της κανονικής, δηλ. της iso-8859-1.

Πρόκειται για έναν από τους πολλούς περιορισμούς του ID3v1 που δεν άργησε να γίνει αισθητός. Σύντομα σχεδιάστηκε λοιπόν μια νέα προδιαγραφή, η ID3v2, που μας απάλλαξε από τους πιο ενοχλητικούς περιορισμούς του ID3v1:


Τα πεδία του tag έχουν μεγαλύτερη χωρητικότητα, και έτσι δεν κόβονται στη μέση αυτά που γράφουμε


Έχουμε περισσότερα έτοιμα πεδία (π.χ., τα Composer και Performer) και μπορούμε να φτιάχνουμε κι εμείς οι ίδιοι πεδία (custom fields)


Η κωδικοσελίδα είναι Unicode, και έτσι χωράνε όλα τα αλφάβητα του κόσμου και τα tags αναγνωρίζονται κατευθείαν από όλες τις σύγχρονες συσκευές και τα προγράμματα


Σήμερα οι πιο διαδεδομένες εκδόσεις ID3v2 είναι η ID3v2.3 και η ID3v2.4 (η 2.4 παρουσιάστηκε το 2000). Μία από τις διαφορές τους είναι ο τύπος Unicode: η μεν 2.3 χρησιμοποιεί UTF-16, η δε 2.4 χρησιμοποιεί UTF-8. H 2.4 είναι αρτιότερη τεχνικά, αλλά κάποια προγράμματα δεν την υποστηρίζουν σωστά.

Σήμερα πια, όλα τα σύγχρονα προγράμματα γράφουν είτε ID3v2.3 είτε ID3v2.4. Κάποια γράφουν εκ παραλλήλου και ID3v1, για συμβατότητα με παλιές συσκευές και εφαρμογές ~ η συνύπαρξη των δύο εκδόσεων δεν προκαλεί προβλήματα: τα μεν παλιά προγράμματα και συσκευές διαβάζουν το μόνο tag που καταλαβαίνουν, δηλ. το ID3v1, τα δε σύγχρονα καταλαβαίνουν και τις δύο εκδόσεις αλλά διαβάζουν κατά προτεραιότητα την νεότερη.


Τί κάνει το Mp3tag
Το Mp3tag, λοιπόν, όταν πατήσουμε Ctrl+S διαβάζει τα περιεχόμενα του ID3v1.1 του κάθε αρχείου και βάσει αυτών φτιάχνει παράλληλα και ένα ID3v2.3 με κωδικοποίηση UTF-16. Έτσι το MP3 με τα ελληνικά μεταδεδομένα είναι έτοιμο να διαβαστεί από παντού.

-- Και γιατί το Mp3tag μπορεί και διαβάζει αυτά τα tags με την αντικανονική κωδικοσελίδα αλλά τα προγράμματα στο Λίνουξ δεν μπορούν; θα ρωτήσει ίσως κάποιος. :-)

Όλα μπορούν!

Απλώς, το Mp3tag κοιτάζει τις τοπικές ρυθμίσεις των Windows: ας πούμε, αν είναι ελληνικά Windows, ή ξενόγλωσσα Windows με ελληνικά regional settings, ξέρει ότι είναι πιθανό να έχει χρησιμοποιηθεί ελληνική κωδικοσελίδα στο ID3v1, αντί της κανονικής, και είναι έτοιμο να ενεργήσει ανάλογα.

Ανάλογα, κάποια προγράμματα στο Λίνουξ επιτρέπουν να ορίσουμε άλλη κωδικοσελίδα από την κανονική για την ανάγνωση των ID3v1. Ωστόσο, ακόμα κι αν έχουμε αυτή τη δυνατότητα, καλό είναι να κάνουμε μία και καλή την επέμβαση της προσθήκης ID3v2 στα MP3 μας, ώστε να διαβάζονται παντού και να έχουμε το κεφάλι μας ήσυχο. :-)


Προαιρετικά βήματα που ενδεχομένως αντενδείκνυνται
Προσοχή! Ακατάλληλη επιλογή για όσους θέλουν συμβατότητα με κάποια προγράμματα (π.χ. το αξιολάτρευτο iTunes) ή συσκευές που δεν υποστηρίζουν ακόμα σωστά το ID3v2.4.

Πριν πατήσουμε Ctrl+S στο Mp3tag:


Πάμε Tools -> Options -> Tags -> Mpeg
Στο Write, κάτω από το ID3v2, επιλέγουμε ID3v2.4 UTF-8
Πατάμε ΟΚ και συνεχίζουμε με το Ctrl+S


Προσωπικά χρησιμοποιώ παντού ID3v2.4 (κυρίως επηρεασμένος από το foobar2000, που γράφει από προεπιλογή ID3v2.4) και δεν έχω δει κανένα πρόβλημα στα διάφορα προγράμματα που έχω χρησιμοποιήσει σε Λίνουξ: Quod Libet, Rhythmbox, Amarok, mpd με διάφορους clients και άλλα που δεν θυμάμαι τώρα. Ωστόσο, όπως είπα πιο πάνω, υπάρχουν προβλήματα με κάποια προγράμματα ή συσκευές. Στην χειρότερη περίπτωση, αν συναντήσετε τέτοια προβλήματα θα αναγκαστείτε να επαναλάβατε τα παραπάνω βήματα αφού πρώτα ξαναγυρίσετε στο default του Mp3tag, δηλ. το ID3v2.3.


Mp3tag στα Windows
Βάλτε μπρος τα Windows
Κατεβάστε και εγκαταστήστε το Mp3tag: http://mp3tag.de/
Το πρόγραμμα είναι δωρεάν και επίσης ελαφρύ, καθαρό, δυνατό και αξιόπιστο. Highly recommended!

Για τους τολμηρούς, η τελευταία beta: http://developer.mp3tag.de/

Ανοίξτε το Mp3tag και ρίξτε μέσα τον κατάλογο ή τους καταλόγους με τα MP3 σας (μπορεί να πάρει ώρα, αφού το Mp3tag πρέπει να διαβάσει όλα τα tags όλων των αρχείων)
Πατήστε Ctrl+Α να επιλεγούν όλα
Πατήστε Ctrl+S (κι αυτό θα πάρει ώρα αν είναι πολλά τα αρχεία)
Είστε έτοιμοι!


Mp3tag σε Linux μέσω Wine

Τα παρακάτω προϋποθέτουν ότι έχουμε εγκαταστήσει σωστά το θαυματουργό Wine: http://www.winehq.org/

Η εγκατάσταση και οι ρυθμίσεις του Wine είναι άλλη ιστορία, που δεν θα μας απασχολήσει εδώ.

Αντί για το απλό Ctrl+S με το οποίο έγινε η δουλειά στα Windows, εδώ θα χρησιμοποιήσουμε μία από τις λεγόμενες «Actions» του Mp3tag, την Convert codepage:

http://www.mp3tag.de/en/help/options_format.html


Εγκαθιστούμε το Mp3tag μέσω Wine και το ανοίγουμε

Αν το Mp3tag διαμαρτυρηθεί ότι δεν υποστηρίζει το λειτουργικό μας και θέλει απο XP και πάνω, πάμε Wine -> Wine Configuration -> Applications -> Windows Version και διαλέγουμε Windows XP

Πάμε Tools -> Options -> Tags -> Mpeg
Στο Write ΑΠΟεπιλέγουμε το ID3v1 και πατάμε ΟΚ <- Εδώ είπαμε του Mp3tag να μην αγγίζει τα ID3v1 των αρχείων μας
Πάμε Convert -> Actions
Στο παράθυρο που θα ανοίξει πατάμε το κουμπάκι πάνω δεξιά για να φτιάξουμε μια νέα δέσμη ενεργειών
Δίνουμε στη δέσμη ένα όνομα, π.χ. From-Windows-1253, και πατάμε ΟΚ
Στο νέο παράθυρο που ανοίγει, ξαναπατάμε το κουμπάκι πάνω δεξιά για να φτιάξουμε μια ενέργεια
Επιλέγουμε Convert codepage από τη λίστα και πατάμε ΟΚ
Στο νέο παράθυρο:

Στο Field επιλέγουμε _TAG ~ ΜΗΝ επιλέξετε το _ALL ή κανένα από τα άλλα με την κάτω παύλα! Μπορεί να κλαίτε μετά! :-) Το Mp3tag διαθέτει βέβαια και αναίρεση, αλλά δεν την έχω δοκιμάσει ποτέ με πολλά αρχεία στο Linux...
Στο Codepage επιλέγουμε Greek - ελληνικά (1253) και πατάμε ΟΚ



Έχουμε φτιάξει πλέον μια δέσμη ενεργειών, την From-Windows-1253, η οποία περιέχει μία και μοναδική ενέργεια: την μετατροπή του κειμένου των tags από windows-1253 στην κατάλληλη κωδικοσελίδα σύμφωνα με την προδιαγραφή των εκάστοτε tags.

Στην πράξη ωστόσο, αν φορτώσουμε στο Mp3tag κομμάτια που έχουν μόνο ID3v1 και όχι ID3v2, δεν θα γίνει καμία μετατροπή, αφού είπαμε του Mp3tag (στο 3ο βήμα) να μην αγγίζει τα ID3v1: απλά θα προστεθεί στα κομμάτια και ID3v2.

Συνεχίζουμε:


Φορτώνουμε στο Mp3tag όλα τα ελληνικά κομμάτια με τα αλαμπουρνέζικα, τα οποία κατά πάσα πιθανότητα δεν έχουν ID3v2
Πατάμε Ctrl+A να επιλεγούν όλα
Πατάμε Alt+5 να εμφανιστεί το παράθυρο με τις δέσμες ενεργειών (Action groups)
Επιλέγουμε τη δέσμη που φτιάξαμε και πατάμε ΟΚ
Περιμένουμε ~ αν είναι πολλά τα αρχεία, μπορεί να χρειαστεί λίγη υπομονή
Είμαστε έτοιμοι

Σημείωση: Ελέγξτε και τις απαντήσεις (http://www.insomnia.gr/forum/showthread.php?t=233200&nw_show=comments) του άρθρου για κάποιες χρήσιμες παρατηρήσεις / εναλλακτικές λύσεις.

apoikos
16-01-2008, 13:25
Να και μια ολοκληρωμένη προσέγγιση στο θέμα :-)

Θα ήθελα να προσθέσω ότι στην τρέχουσα έκδοση του EasyTag υποστηρίζονται κανονικά id3v2.4 utf-8-encoded tags. Προσωπικά θεωρώ το EasyTag κορυφαίο στον τομέα του.

Όσον αφορά στο script, το ξαναέγραψα σε python και το επισυνάπτω για αυτούς που θα ήθελαν να το δοκιμάσουν. Για να τρέξει χρειάζεται το TagPy (bindings της TagLib για Python), το οποίο - εφόσον δεν υπάρχει στη διανομή σας, στο Archlinux π.χ. υπάρχει στο community - μπορείτε να βρείτε εδώ (http://news.tiker.net/software/tagpy).

Προσοχή!!! Δοκιμάστε το σε αντίγραφα των αρχείων σας πρώτα. Στις δικές μου δοκιμές το script έχει συμπεριφερθεί σωστά, αλλά δε φέρω ευθύνη αν σας κάψει το βίντεο.

Για να το τρέξετε, αφού εγκαταστήσετε το TagPy δώστε:

chmod +x id3fix.py
./id3fix.py /path/to/file1.mp3 /path/to/file2.mp3 ...

By default φτιάχνει ID3v2.4 με UTF8 encoding, το οποίο είναι το καλύτερο μεν, δεν υποστηρίζεται ευρέως όμως. Για να κάνει UTF16-encoded tags, βάλτε την επιλογή -U (κεφαλαίο). Για περισσότερες πληροφορίες: ./id3fix.py --help ;-)

Περιμένω feedback από όσους τολμηρούς.

DIMITRISG
16-01-2008, 14:02
récital Eusebius (http://www.insomnia.gr/forum/member.php?u=25957) και apoikos (http://www.insomnia.gr/forum/member.php?u=3034)

αυτα ειναι post !

firewalker
16-01-2008, 14:39
apoiko, μου χρωστάς μία τηλεόραση crt sharp 14''. Το video δεν έπαθε τίποτε...

Eusebius
17-01-2008, 00:33
Χεχε! Πρίζωσα και τον apoikos! :-D Θα το δοκιμάσω το σκριπτάκι το Σ/Κ.

Λοιπόν...

Αυτό που δεν μπορούσα να θυμηθώ χθες ήταν ότι το Mp3tag δουλεύει μια χαρά και μέσα από Wine. Το είχα διαβάσει αλλά δεν είχα εμπειρία από πρώτο χέρι. Το δοκίμασα και φαίνεται ότι έτσι είναι.

Μάλιστα, με μια γρήγορη έρευνα είδα ότι είναι πολλοί που χρησιμοποιούν το Mp3tag σε Λίνουξ: πρόκειται για πρόγραμμα εξαιρετικής ποιότητας και δυνατοτήτων, σχεδόν στην κλάση του foobar2000, και πολύς κόσμος δυσκολεύεται να το αποχωριστεί όταν μεταναστεύει.

Δείτε δύο εικόνες πριν περιγράψω τα βήματα:



Ο ασθενής πριν την εγχείρηση

Το πρώτο άλμπουμ, το Φορτηγό του Σαββόπουλου, έχει μόνο ID3v1.1 και τα tags (εδώ είναι ορατές οι στήλες Τίτλος και Καλλιτέχνης) εμφανίζονται με αλαμπουρνέζικα. Τα επόμενα άλμπουμ έχουν και ID3v1.1 και ID3v2.4. Το Mp3tag, όπως όλα τα προγράμματα που υποστηρίζουν ID3v2.x, διαβάζει κατά προτεραιότητα τα ID3v2.x και έτσι όλα φαίνονται εντάξει. (Στη στήλη Tag βλέπουμε τί tags βρήκε το Mp3tag στα αρχεία και ποια tags μας δείχνει.)

http://img181.imageshack.us/img181/268/insomniamp3tagid3v1onlyqj3.th.png (http://img181.imageshack.us/my.php?image=insomniamp3tagid3v1onlyqj3.png)

Ο ασθενής μετά την εγχείρηση

Το Mp3tag διάβασε τα ID3v1.1 (αφού του είπαμε πρώτα ότι η κωδικοσελίδα τους είναι windows-1253) και βάσει αυτών πρόσθεσε στα αρχεία και ID3v2. Τα μεταδεδομένα του άλμπουμ θα εμφανίζονται πλέον σωστά σε όλα τα σύγχρονα προγράμματα, σε όλα τα λειτουργικά συστήματα.

http://img408.imageshack.us/img408/269/insomniamp3tagid3v1id3vqw4.th.png (http://img408.imageshack.us/my.php?image=insomniamp3tagid3v1id3vqw4.png)



Mp3tag σε Linux μέσω Wine: η εγχείρηση βήμα-βήμα

Τα παρακάτω προϋποθέτουν ότι έχουμε εγκαταστήσει σωστά το θαυματουργό Wine: http://www.winehq.org/

Η εγκατάσταση και οι ρυθμίσεις του Wine είναι άλλη ιστορία, που δεν θα μας απασχολήσει εδώ.

Αντί για το απλό Ctrl+S με το οποίο έγινε η δουλειά στα Windows, εδώ θα χρησιμοποιήσουμε μία από τις λεγόμενες «Actions» του Mp3tag, την Convert codepage:

http://www.mp3tag.de/en/help/options_format.html


Εγκαθιστούμε το Mp3tag μέσω Wine και το ανοίγουμε

Αν το Mp3tag διαμαρτυρηθεί ότι δεν υποστηρίζει το λειτουργικό μας και θέλει απο XP και πάνω, πάμε Wine -> Wine Configuration -> Applications -> Windows Version και διαλέγουμε Windows XP

Πάμε Tools -> Options -> Tags -> Mpeg
Στο Write ΑΠΟεπιλέγουμε το ID3v1 και πατάμε ΟΚ <- Εδώ είπαμε του Mp3tag να μην αγγίζει τα ID3v1 των αρχείων μας
Πάμε Convert -> Actions
Στο παράθυρο που θα ανοίξει πατάμε το κουμπάκι πάνω δεξιά για να φτιάξουμε μια νέα δέσμη ενεργειών
Δίνουμε στη δέσμη ένα όνομα, π.χ. From-Windows-1253, και πατάμε ΟΚ
Στο νέο παράθυρο που ανοίγει, ξαναπατάμε το κουμπάκι πάνω δεξιά για να φτιάξουμε μια ενέργεια
Επιλέγουμε Convert codepage από τη λίστα και πατάμε ΟΚ
Στο νέο παράθυρο:

Στο Field επιλέγουμε _TAG ~ ΜΗΝ επιλέξετε το _ALL ή κανένα από τα άλλα με την κάτω παύλα! Μπορεί να κλαίτε μετά! :-) Το Mp3tag διαθέτει βέβαια και αναίρεση, αλλά δεν την έχω δοκιμάσει ποτέ με πολλά αρχεία στο Linux...
Στο Codepage επιλέγουμε Greek - ελληνικά (1253) και πατάμε ΟΚ



Έχουμε φτιάξει πλέον μια δέσμη ενεργειών, την From-Windows-1253, η οποία περιέχει μία και μοναδική ενέργεια: την μετατροπή του κειμένου των tags από windows-1253 στην κατάλληλη κωδικοσελίδα σύμφωνα με την προδιαγραφή των εκάστοτε tags.

Στην πράξη ωστόσο, αν φορτώσουμε στο Mp3tag κομμάτια που έχουν μόνο ID3v1 και όχι ID3v2, δεν θα γίνει καμία μετατροπή, αφού είπαμε του Mp3tag (στο 3ο βήμα) να μην αγγίζει τα ID3v1: απλά θα προστεθεί στα κομμάτια και ID3v2.

Συνεχίζουμε:


Φορτώνουμε στο Mp3tag όλα τα ελληνικά κομμάτια με τα αλαμπουρνέζικα, τα οποία κατά πάσα πιθανότητα δεν έχουν ID3v2
Πατάμε Ctrl+A να επιλεγούν όλα
Πατάμε Alt+5 να εμφανιστεί το παράθυρο με τις δέσμες ενεργειών (Action groups)
Επιλέγουμε τη δέσμη που φτιάξαμε και πατάμε ΟΚ
Περιμένουμε ~ αν είναι πολλά τα αρχεία, μπορεί να χρειαστεί λίγη υπομονή
Είμαστε έτοιμοι

pisio
17-01-2008, 09:45
Και τώρα ήθελα να ρωτήσω εάν το Mp3tag δουλεύει και σε Linux :-)

Το δουλεύω σε Windows και είμαι αρκετά ευχαριστημένος

Να πω και ένα μεγάλο μπράβο για το ποστ :-)

firewalker
17-01-2008, 16:41
apoiko, για τα mp3 που έχουν την συνήθεια να εμφανίζονται έτσι:

01-???? ???? - ? ???? ??? ????mp3

υπάρχει κάποιος τρόπος; Προσπάθησα μέσω της convmv αλλά...

Θα το εκτιμούσα αν το video δεν πάθει τίποτε....

Edit:

Βρήκα έναν τρόπο. Χρησιμοποιώ το script του apoikou (και ας μην έμεινε τηλεόραση στο σπίτι) για να φτιάξω τα metadata και μετά με το easytag αλλάζω το όνομα του αρχείου με αυτό του tag. Για τραγούδια όμως που δεν έχουν tag...

firewalker
18-01-2008, 16:59
Λοιπόν... Έγραψα ένα patch για το script του apoikou. Δίνοντας την παράμετρο -R το πρόγραμμα αφού φτιάξει το id3tag θα διαβάσει το title tag και θα αλλάξει το όνομα το τραγουδιού σε αυτό. Με ελάχιστο κόπο, αντί για το title tag μπορούμε να βάλουμε όποιο tag θέλουμε. Σίγουρα επιδέχεται μεγάλων βελτιώσεων. Απλώς έγραψα το script για δική μου δουλειά (μετονομασία πολλών αρχείων με όνομα ???? - ???? .mp3)και μετά το ενσωμάτωσα στου apoikou.

Βάζουμε το patch στον ίδιο φάκελο με το id3fix.py και δίνουμε την εντολή patch -p0 < patch. Αυτά.

Eusebius
18-01-2008, 19:19
Με λίγο γούγλισμα βρήκα τρία ενδιαφέροντα εργαλειάκια. Δεν έχω δοκιμάσει τίποτα ακόμα...

1.

Σκριπτ για Amarak ονόματι EncodingConverter, φτιαγμένο ειδικά γιʼ αυτή τη δουλειά, νεαρό ακόμα, σε στάδιο πρώιμου beta:
http://www.kde-apps.org/content/show.php/EncodingConverter?content=70579

http://img242.imageshack.us/img242/7990/amarokencodingconvertercv9.png (http://imageshack.us)

2.

Kid3 ~ tag editor που λέει ότι κάνει αυτό που θέλουμε:
http://kid3.sourceforge.net/

3.

Αλλο ένα πυθωνοσκριπτοπρόγραμμα, που μπορεί να πάρει ως παράμετρο την αντικανονική κωδικοσελίδα που έχει χρησιμοποιηθεί στα ID3v1
http://www.kunxi.org/archives/2007/11/howto-convert-chinese-mp3-for-id3-v23-standard/
http://www.kunxi.org/files/howto-convert-chinese-mp3-for-id3-v2.3-standard/eyeD3conv-r1

firewalker
24-01-2008, 14:39
Αυτά στην παρακάτω εικόνα τι είναι; Το script του apoikou βγάζει segmentation fault και το mp3tag δεν τα αλλάζει... Τα κάνει ποιο κινέζικα.

http://imageshack.gr/files/bdvkdx7zx66zqhmd7ejp.jpg

Eusebius
24-01-2008, 19:40
Αυτά νομίζω ότι είναι utf8 που διαβάζονται ως iso-8859-1.

firewalker
24-01-2008, 22:24
Γιατί; Τι να τα κάνω; Επειδή ήταν για φίλο μου που τα ήθελε για το αυτοκίνητο διέγραψα εντελώς τα tags. Θα τα ξαναπάρω να δοκιμάσω.

firewalker
24-01-2008, 23:16
Βρήκα και ένα script για μετονομασία αρχείων mp3 από ελληνικά σε greeklish. greek to greeklish.

http://stavrosg.bang.gr/files/id3-greeklify/greeklify-1.0-source.tar.bz2


#! /usr/bin/env python
#coding: UTF-8
## greeklify.py
## http://stavrosg.bang.gr/pages/greeklify.html
##
## Copyright (C) 2006,2008 Stavros Giannouris <stavrosg@hellug.gr>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 2 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##

import sys
import os
import mutagen
from mutagen.id3 import ID3, TIT2, TALB, TPE1
from optparse import OptionParser
import locale
import fnmatch
import string

# did I miss anything? e-mail!
# TODO: Rectify the conversion dict.
conv_dict = {
u"α": u"a",
u"β": u"b",
u"γ": u"g",
u"δ": u"d",
u"ε": u"e",
u"ζ": u"z",
u"η": u"i",
u"θ": u"th",
u"ι": u"i",
u"κ": u"k",
u"λ": u"l",
u"μ": u"m",
u"ν": u"n",
u"ξ": u"ks",
u"ο": u"o",
u"π": u"p",
u"ρ": u"r",
u"σ": u"s",
u"τ": u"t",
u"υ": u"y",
u"φ": u"f",
u"χ": u"x",
u"ψ": u"ps",
u"ω": u"w",
u"ά": u"a",
u"έ": u"e",
u"ή": u"i",
u"ί": u"i",
u"ό": u"o",
u"ύ": u"y",
u"ώ": u"w",
u"ϊ": u"i",
u"ϋ": u"y",
u"ΐ": u"i",
u"ΰ": u"y",
u"ς": u"s",
u"Α": u"A",
u"Β": u"B",
u"Γ": u"G",
u"Δ": u"D",
u"Ε": u"E",
u"Ζ": u"Z",
u"Η": u"H",
u"Θ": u"Th",
u"Ι": u"I",
u"Κ": u"K",
u"Λ": u"L",
u"Μ": u"M",
u"Ν": u"N",
u"Ξ": u"Ks",
u"Ο": u"O",
u"Π": u"P",
u"Ρ": u"R",
u"Σ": u"S",
u"Τ": u"T",
u"Υ": u"Y",
u"Φ": u"F",
u"Χ": u"X",
u"Ψ": u"Ps",
u"Ω": u"W",
u"Ά": u"A",
u"Έ": u"E",
u"Ή": u"H",
u"Ί": u"I",
u"Ϊ": u"I",
u"Ό": u"O",
u"Ύ": u"Y",
u"Ϋ": u"Y",
u"Ώ": u"W"
}

def greeklify(orig):
i = 0
conv = u""
while i < len(orig):
char = orig[i]
if conv_dict.has_key(char):
try :
new = conv_dict[char]
except UnicodeEncodeError:
new = u"_"
conv = conv + new
else:
conv = conv + char

i = i + 1
# TODO: Should check the string for any remaining non-iso8859-1[or ascii?] chars.
return conv

def greeklify7(orig):
i = 0
conv = u""
text = orig.encode("iso-8859-1").decode("cp1253")
while i < len(text):
char = text[i]
if conv_dict.has_key(char):
new = conv_dict[char]
conv = conv + new
else:
conv = conv + char

i = i + 1
# TODO: Should check the string for any remaining non-iso8859-1[or ascii?] chars.
return conv

def convert_filename(file, quiet, test):
new_name = greeklify(file)
if not quiet:
try:
print "Μετονομασία του", file, "σε", new_name
except UnicodeEncodeError:
print "Μετονομασία σε", new_name
if not test:
os.renames(file, new_name)

def has_id3v1(filename):
f = open(filename, 'rb+')
try: f.seek(-128, 2)
except IOError: pass
else: return (f.read(3) == "TAG")

def convert_tag(file, v1, vocal, quiet, test):
if not quiet:
try :
print "Μετατροπή των ετικεττών στο αρχείο", file
except UnicodeEncodeError:
pass
id3 = mutagen.id3.ID3(file)
if vocal:
id3.pprint().encode("utf-8", "replace")
print "Σε :"
for tag in filter(lambda t: t.startswith("T"), id3):
if tag == "TDRC": # non-unicode field
continue
frame = id3[tag]
# TODO: Should not require two conversion functions.
if frame.encoding == 0:
text = map(greeklify7, frame.text)
else:
text = map(greeklify, frame.text)
frame.encoding = 3
frame.text = text

if vocal:
print id3.pprint().encode("utf-8", "replace")
print "\n"
if not v1 and not test:
try:
id3.save(file, v1=0)
except AttributeError:
pass
if v1 and not test:
try:
id3.save(file, v1=2)
except AttributeError:
pass


def Walk( root, recurse=0, pattern='*', return_folders=0 ):

# initialize
result = []

# must have at least root folder
try:
names = os.listdir(root)
except os.error:
return result

# expand pattern
pattern = pattern or '*'
pat_list = string.splitfields( pattern , ';' )

# check each file
for name in names:
fullname = os.path.normpath(os.path.join(root, name))

# grab if it matches our pattern and entry type
for pat in pat_list:
if fnmatch.fnmatch(name, pat):
if os.path.isfile(fullname) or (return_folders and os.path.isdir(fullname)):
result.append(fullname)
continue

# recursively scan other folders, appending results
if recurse:
if os.path.isdir(fullname) and not os.path.islink(fullname):
result = result + Walk( fullname, recurse, pattern, return_folders )

return result

def main():
# Create the command-line options
# TODO: Convert recursively
parser = OptionParser(usage="%prog [επιλογές] αρχείο1 αρχείο2 ...", version="%prog 1.0")
parser.add_option("-t", "--tag", action="store_true", dest="tag_only", default=False,
help="Μετατροπή μόνο των ετικεττών.")
parser.add_option("-f", "--filename", action="store_true", dest="file_only", default=False,
help="Μετατροπή μόνο των αρχείων.")
parser.add_option("-r", "--recursive", action="store_true", dest="recurse", default=False,
help="Μετατροπή των αρχείων/καταλόγων και στους υποκαταλόγους του τρέχοντος.")
parser.add_option("--keep-v1", action="store_true", dest="save_v1", default=False,
help="Αποθήκευση και του id3v1 tag αντί διαγραφής.")
parser.add_option("-p", "--dry-run", action="store_true", dest="dry_run", default=False,
help="Δοκιμαστική εκτέλεση, δεν θα κάνει μετατροπές.")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False,
help="Προβολή πληροφοριών μετατροπής.")
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False,
help="Σιωπηλή εκτέλεση.")
parser.add_option("--test", action="store_true", dest="test_run", default=False,
help="Ερώτηση για φράση και μετατροπή αυτής, και όχι αρχείων.")

(options, args) = parser.parse_args()

if options.test_run:
phrase = raw_input("Παρακαλώ εισάγετε φράση για μετατροπή: ").decode("utf-8").strip()
print greeklify(phrase)
sys.exit()

if len(args) == 0 and not options.recurse:
args = os.listdir(os.getcwd())
elif len(args) == 0 and options.recurse:
args = Walk('.', 1, '*', 1)
# TODO: make it proccess only supplied directories.

if options.file_only and options.tag_only:
parser.error("δε μπορείτε να χρησιμοποιήσετε ταυτόχρονα τις επιλογές --tag και --file.")
if options.verbose and options.quiet:
parser.error("Οι επιλογές -v και -q είναι ασύμβατες")

files_to_proccess = []
directories = []
for arg in args:
if os.path.isfile(arg):
files_to_proccess.append(arg)
else:
directories.append(arg)

while len(files_to_proccess) > 0:
fle = files_to_proccess.pop(0)
try:
fmane = fle.decode("utf-8")
except UnicodeDecodeError:
fmane = fle.decode("cp1253")

try:
try:
id3 = mutagen.id3.ID3(fmane)
except mutagen.id3.ID3NoHeaderError:
print "Το αρχείο", fmane, "δεν περιέχει ετικέττα."
else:
if not options.file_only:
convert_tag(fmane, options.save_v1, options.verbose, options.quiet, options.dry_run)

finally:
if not options.tag_only:
convert_filename(fmane, options.quiet, options.dry_run)

if options.recurse:
# Reverse list to avoid "file does not exist" errors.
dirs = []
while len(directories) > 0:
dirs.append(directories.pop())
for directory in dirs:
try:
dir = directory.decode("utf-8")
except UnicodeDecodeError:
dir = directory.decode("cp1253")

try:
convert_filename(dir, options.quiet, options.dry_run)
except OSError:
continue

if __name__ == '__main__':
main()

antonis_wrx
30-01-2008, 13:13
λέγοντας πρόβλημα με ελληνικά εννοείτε κάτι σαν το screenshot? λύση με κάποιο πρόγραμμα για linux υπάρχει; γιατί δεν έχω καθόλου win στο pc, ούτε έχω στήσει wine...

geopoul
18-02-2008, 20:59
Μια λύση μέσω windows πιο απλή από το Mp3tag είναι με το h0td0g (www.h0td0g.org). Απλά το τρέχετε με τα default settings, φορτώνετε να mp3 και κάνετε apply changes. Το h0td0g θα ξαναγράψει τα id3v2 tags σε unicode. Δυστυχώς το h0td0g δεν τρέχει μέσω wine.

mariosCS
28-02-2008, 02:24
λέγοντας πρόβλημα με ελληνικά εννοείτε κάτι σαν το screenshot? λύση με κάποιο πρόγραμμα για linux υπάρχει; γιατί δεν έχω καθόλου win στο pc, ούτε έχω στήσει wine...

Ναι κάτι σαν το screenshot. Wine δε χρειάζεται να "στησεις". Βασικά σε Ubuntu είναι απλά $sudo apt-get install wine και αυτό είναι. Μετά ακολουθείς τις οδηγίες στο #5 πόστ , και είσαι κομπλέ. Μόλις το έχω δοκιμάσει τώρα και δουλεύει μια χαρά ;)

η πιο καλή λύση για το θέμα , εύγε ;)

antonis_wrx
28-02-2008, 15:14
ναι τελικά με wine το κάνα εδώ και μέρες.. δούλεψε κομπλέ (debian)

micrace
02-03-2008, 15:53
σε ευχαριστώ ,το πρόβλημά μου λύθηκε :-D

nikitas350
12-05-2008, 20:18
[Πολύ ωραίο post... έψαχνα την λύση εδώ και καιρό... Υπάρχει κανένας τρόπος να γίνει η δουλειά με το easytag; Ευχαριστώ...]
Βρήκα τον τρόπο:
i) εγκαθιστάς το easytag με την εντολή "sudo apt-get install easytag-aac"
ii) τρέχεις το easytag και πηγαίνεις στο μενού settings και μετά preferences
iii) στην καρτέλα id3 tag settings επιλέγεις τα παρακάτω:
α) character set for reading id3 tags: greek (iso-8859-7)
β) id3v2 write id3v2 tag
version:ID3V2.3
Character set: unicode

nikitas350
14-05-2008, 15:38
Στο screenshot έχει τα preferences για το easy tag έτσι ώστε να δουλέψουν σωστά τα mp3...

gpan
15-05-2008, 22:39
Καλησπέρα σε όλους. Έχω κάποιες απορίες:

1)Μπορεί το λινουξ να υποστηρίξει τα ελληνικά των windows, χωρίς να κάνω κάποια μετατροπή;
2)Άμα μετατρέψω τα αρχεία σε ελληνικά που καταλαβαίνει το λινουξ και μετά κάψω ένα cd, το οποιοδήποτε cd-player-stereo θα αναγνωρίζει σωστά τα ελληνικά;
3)Άμα μεταβώ στα windows έπειτα από τη μετατροπή που έκανα στα λινουξ θα μου αναγνωρίσουν σωστά τα ελληνικά;
4)Πόσο αξιόπιστο είναι το h0td0g που αναφέρει ο συμφορουμίτης πιο πάνω;

Ευχαριστώ!

nikitas350
23-05-2008, 21:27
Τα (περισσότερα) ελληνικά mp3 δεν μπορούν να παίζουν στο linux χωρίς μετατρόπή. Αφού γίνει η μετατροπή τα mp3 "παίζουν" και σε linux και σε windows. Για το cd player δεν είμαι σίγουρος αλλά πιστεύω πως λειτουργεί (από ότι ξέρω είναι και αρκετά cd player που δεν αναγνωρίζουν τα ελληνικά mp3 όταν δεν είναι καν "πειραγμένα"). Κατά την γνώμη μου η πιο "ασφαλής" λύση είναι η αρχική. Το μονο που έχεις να κάνεις είναι να κάνεις install το mp3tag και να πατήσεις ένα κουμπι :-D. Καλή επιτυχία

alkisg
09-08-2008, 21:44
Παιδιά μήπως να φύγει αυτό από sticky? Όπως λέει κι ο nikitas350 παραπάνω, το easytag έχει υποστήριξη για windows-1253 codepage, οπότε γίνεται με το πάτημα ενός κλικ, δεν χρειάζονται windows ούτε wine...

giostau
23-08-2008, 18:42
εμένα πάντως μια χαρά με βόλεψε αυτή η λύση!!!
Τα 3500 κομμάτια που είχα στο library του itunes και το amarok, που καραγουστάρω, τα έβλεπε αλαμπουρνέζικα, φτιάχτηκαν μέσα σε 5 λεπτά!

Thanks Eusebius!!!! :-D

poetj
07-09-2008, 14:08
εμένα πάντως μια χαρά με βόλεψε αυτή η λύση!!!
Τα 3500 κομμάτια που είχα στο library του itunes και το amarok, που καραγουστάρω, τα έβλεπε αλαμπουρνέζικα, φτιάχτηκαν μέσα σε 5 λεπτά!

Thanks Eusebius!!!! :-D

μπορεί pleaaaaaase κάποιος να μου εξηγήσει το πώς ? γιατί προσπάθησα, χρησιμοποιώντας το EasyTag αλλά δεν τα κατάφερα...

Θα με πάρει κάποιος από το χεράκι και να μου πεί τα βήματα 1 - πρός - 1 ? :cry:

Χίλια ευχαριστώ!
μ.

simosx
09-09-2008, 06:09
μπορεί pleaaaaaase κάποιος να μου εξηγήσει το πώς ? γιατί προσπάθησα, χρησιμοποιώντας το EasyTag αλλά δεν τα κατάφερα...

Θα με πάρει κάποιος από το χεράκι και να μου πεί τα βήματα 1 - πρός - 1 ? :cry:

Χίλια ευχαριστώ!
μ.

Δες και εδώ,
http://ubuntu.opengr.net/viewtopic.php?f=9&t=936

giannis2001
19-09-2008, 21:20
Και καλά με τα mp3 ρε παιδιά. Καμιά λύση για τα ονόματα των αρχείων και καταλόγων υπάρχει;

edit:
αφού έκανα την ερώτηση είδα και αυτό το θέμα: http://www.insomnia.gr/forum/showthread.php?t=274141
θα το δοκιμάσω και ελπίζω να έχω τα επιθυμητά αποτελέσματα!

Kostas_xolargos
25-03-2009, 00:27
εγω εχω προβλημα στο οτι δεν ακουγονται δυνατα τα αρχεια μουσικης μου υπαρχει καμια λυση γι αυτο?

DIMITRISG
25-03-2009, 08:03
αν εχεις pulseaudio δοκίμασε να αυξησεις την ενταση απο το pavucontrol