Thread Skript für automatisches File-Linking mit Matroska
(49 answers)
Opened by Habanero at 2010-02-07 13:33
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! |