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

murphy
 2010-02-09 18:42
#132467 #132467
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Hier mal das ganze Skript in einem vernünftigen Programmierstil:
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
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 = $_;

    open my $mkvinfo, '-|', qw/mkvinfo --ui-language en/, $file
        or die "Couldn't run mkvinfo on $file: $!";
    
    my $uid;
    while (my $_ = <$mkvinfo>) {
        if (/\+ Segment UID:\s+(.*)$/) {
            $uid = $1;
            last;
        }
    }

    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 $prev_uid = ($_ - 1 >= $[ ? $uids[$_ - 1] : undef);
    my $next_uid = ($_ + 1 <= $#uids ? $uids[$_ + 1] : undef);

    my @options;
    push @options, '--set', "prev-uid=$prev_uid" if (defined $prev_uid);
    push @options, '--set', "next-uid=$next_uid" if (defined $next_uid);

    if (@options) {
        system('mkvpropedit', $file, qw/--edit info/, @options) == 0
            or die "Couldn't run mkvpropedit on $file: status $?"
    }
}


Wichtige Änderungen:
  • use strict; und use warnings;
  • Fehlerbehandlung
  • Aufrufe externer Programme unter Umgehung der Shell, wodurch Quotingprobleme bei den Argumenten von vornherein vermieden werden.


Ich konnte in Ermangelung einer Matroskainstallation nur mit Dummyskripten testen, also Daumen drücken, dass es funktioniert :-)

(edit: Arrayzugriffslogik für @uids korrigiert)
Last edited: 2010-02-09 18:49:25 +0100 (CET)
When C++ is your hammer, every problem looks like your thumb.

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