Thread Skript für automatisches File-Linking mit Matroska (49 answers)
Opened by Habanero at 2010-02-07 13:33

Linuxer
 2010-02-24 19:52
#133653 #133653
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Ich habe mir nochmal Deinen Code angesehen.
DU solltest schon den Vorgang kontrollieren, wenn Du "Suchen&Ersetzen" verwendest.
Nicht überall durfte mkvinfo ersetzt werden, weil es auch als Variablenname im Skript verwendet wird!

Ich war mal so frei, den Code zu überarbeiten, so dass er (bei mir) fehlerfrei kompiliert.
Ausprobieren musst Du ihn. Beachte bitte die von mir gesetzten Kommentare.

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
use 5.010;
use strict;
use warnings;

# Dateien auflisten und sortieren
my @files = sort glob '*.mkv';

# Segment-UIDs via mkvinfo auslesen
my @uids = map {
    my $file = $_;

    # \ durch \\ ersetzt; Programm wg. Leerzeichen in "" gesetzt
    open my $mkvinfo, '-|', qq/"D:\\Video\\mkvtoolnix 3.1.0\\mkvinfo" --ui-language en "$file"/
          or die qq/Couldn't run "D:\\Video\\mkvtoolnix 3.1.0\\mkvinfo" on $file: $!/;
    
    my $uid;
    # Falsch, hier sollte vom Handle $mkvinfo gelesen werden, nicht vom Dateinamen
    while (my $_ = <$mkvinfo>) {
                if (/\+ Segment UID:\s+(.*?)[\r\n]*\z/) {
                        $uid = $1;
                        $uid =~ s/\s*0x//g;
                        last;
                }
    }

    # Falsch, hier muss das Handle geschlossen werden; nicht der echte Dateiname
    close $mkvinfo
      or die "Error running mkvinfo on $file: $!";

    warn "Couldn't determine UID for $file" unless (defined $uid);

    $uid
} @files;

# Ueber alle Dateien iterieren und Felder setzen
for ($[ .. $#files) {
    my $file = $files[$_];

    my $next_uid = ($_ + 1 <= $#uids ? $uids[$_ + 1] : undef);

    my @options;
    push @options, qq/--set next-uid="$next_uid"/ if (defined $next_uid);

    if (@options) {
        # FRAGE: sollte hier nicht der absolute Pfad zu mkvpropedit benutzt werden?
        system(qq/mkvpropedit "$file" --edit info @options/) == 0
           or die "Couldn't run mkvpropedit on $file: status $?";
    }
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Skript für automatisches File-Linking mit Matroska