Thread iTunes: Coverfiles direkt in MP3s speichern?
(7 answers)
Opened by ~Br4inP4in~ at 2008-10-04 22:32
Nach einer kleinen Änderung in MP3/Tag/ID3v2.pm funktioniert folgendes prima:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #!/usr/bin/perl use strict; use warnings; use MP3::Tag; my $mp3 = MP3::Tag->new( 'test.mp3' ); $mp3->get_tags; my $id3v2 = exists $mp3->{'ID3v2'} ? $mp3->{'ID3v2'} : $mp3->new_tag('ID3v2'); { open( my $in, '<', 'test.jpg' ) or die "Cannot open file 'test.jpg': $!"; binmode( $in ); my $data = do{ local $/=undef; <$in> }; unless ( $id3v2->get_frame('APIC') ) { $id3v2->add_frame( 'APIC', 'image/jpg', 3, 'Cover Image', $data ); } # unless else { $id3v2->change_frame( 'APIC', 'image/jpg', 3, 'Cover Image', $data ); } # else $id3v2->write_tag; } Dieses Skript lädt die Datei test.mp3, holt das ID3v2 Tag(erstellt es, falls noch nicht vorhanden) und liest die Datei test.jpg ein um anschließend den APIC Frame zu ändern/erstellen. Leider konnte ich bisher nicht herausbekommen, wann man welchen Picture-Type(im Skript die 3 in der add_frame/change_frame Methode) verwenden muss. Nach der Doku von MPEG::ID3v2Tag ist es eine 0 für image/gif und nach einer kurzen google-Suche eine 3 für image/jpg. Andere hab ich noch nicht gefunden. Folgendes musste ich in ID3v2.pm ändern: 1. Zeile 12 Ein use File::Copy; und ein newline einfügen. 2. Zeile 602 Das gesamte unless-Statement durch folgendes ersetzen: Code: (dl
)
1 unless ( move( $tempfile, $mp3obj->{'filename'} ) ) Ohne diese Änderungen konnte auf meinem System kein neuer APIC Frame der MP3-Datei hinzugefügt werden. MfG perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
|