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

MatthiasW
 2008-10-06 19:46
#115214 #115214
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
@nepos, Danke für den Link, wenn ich nochmal drüber nachdenke hatte meine Annahme sowieso recht wenig Sinn, ich ging schließlich davon aus, dass der Picture-Type etwas mit dem Mimetype zu tun hat.

Als Entschädigung ein kleines Skript, das vom aktuellen Verzeichnis aus allen .mp3-Dateien ein Cover gibt, falls es ein Cover im jeweiligen Verzeichnis findet:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/perl

use strict;
use warnings;

use MP3::Tag;
use File::Find;

File::Find::find( \&wanted, '.' );

{
        my $cover;
        my @mp3;

        sub wanted
        {
                for ($File::Find::name)
                {
                        -d && do {
                                undef $cover;
                                last;
                        };

                        /\.(jpg|gif)$/ && do {
                                $cover = [ $_, "image/$1" ];

                                if ( @mp3 )
                                {
                                        add_cover( $_, $cover ) for @mp3;
                                        @mp3 = ();
                                } # if

                                last;
                        };

                        /\.mp3$/ && do {
                                $cover ? add_cover( $_, $cover )
                                       : push @mp3, $_;
                                last;
                        };
                } # for
        } # wanted
}

sub add_cover
{
        my( $file, $cover ) = @_;

        my $mp3 = MP3::Tag->new( $file );

        $mp3->get_tags;

        my $id3v2 = exists $mp3->{'ID3v2'}
                        ? $mp3->{'ID3v2'}
                        : $mp3->new_tag('ID3v2');

        open( my $in, '<', $cover->[0] )
                or die "Cannot open file '$cover->[0]': $!";

                binmode( $in );

                my $data = do{ local $/=undef; <$in> };

                unless ( $id3v2->get_frame('APIC') )
                {
                        $id3v2->add_frame( 'APIC', $cover->[1], 3, 'Cover Image', $data );
                } # unless
                else
                {
                        $id3v2->change_frame( 'APIC', $cover->[1], 3, 'Cover Image', $data );
                } # else

                $id3v2->write_tag;

        close( $in );

        $mp3->close;
} # add_cover

Noch ist es quick&dirty, wenn ich etwas Zeit finde schreibe ich noch eine GUI drum und mache es einfacher das Ganze an eigene Befürfnisse anzupassen.

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?