Thread iTunes: Coverfiles direkt in MP3s speichern? (7 answers)
Opened by ~Br4inP4in~ at 2008-10-04 22:32

MatthiasW
 2008-10-06 18:19
#115212 #115212
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
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
2
3
4
5
6
	unless ( move( $tempfile, $mp3obj->{'filename'} ) )
{
unlink($tempfile);
warn "Couldn't File::Copy::move temporary file $tempfile to $mp3obj->{'filename'}\n";
return -1;
}

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"'

View full thread iTunes: Coverfiles direkt in MP3s speichern?