Leser: 29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
my @files = sort glob "*.mkv";
# Segment-UID via mkvinfo auslesen
my @segment_uids;
foreach my $filename (@files) {
my $uid = `mkvinfo --ui-language en "$filename" | grep -i '\+ Segment
UID:'`;
chomp $uid;
$uid =~ s/.*:\s+//;
push @segment_uids, $uid;
}
# Ueber alle Dateien iterieren und Felder setzen
foreach my $idx (0..scalar(@files) - 1) {
my @options;
push @options, "--set 'next-uid=" . $segment_uids[$idx + 1] . "'" if
($idx + 1 < scalar(@files));
push @options, "--set 'prev-uid=" . $segment_uids[$idx - 1] . "'" if
($idx > 0);
system qq|mkvpropedit "$files[$idx]" --edit info | . join(" ",
@options);
}
QuoteCode (perl): (dl )1 2 3 4 5 6 7foreach my $filename (@files) { my $uid = `mkvinfo --ui-language en "$filename" | grep -i '\+ Segment UID:'`; chomp $uid; $uid =~ s/.*:\s+//; push @segment_uids, $uid; }
1 2 3 4 5 6
foreach my $filename (@files) { my $uid = `mkvinfo --ui-language en "$filename"`; chomp $uid; $uid =~ s/\+\s+Segment\s+UID.*?:\s+(.*?)\n/$1/; push @segment_uids, $uid; }
1 2
push @options, '--set "next-uid=' . $segment_uids[$idx + 1] . '"' if ($idx + 1 < scalar(@files)); push @options, '--set "prev-uid=' . $segment_uids[$idx - 1] . '"' if ($idx > 0);
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 $?" } }
1
2
3
push @options, "--set 'next-uid=" . $segment_uids[$idx + 1] . "'" if
...
push @options, "--set 'prev-uid=" . $segment_uids[$idx - 1] . "'" if
Guest Habanero[...]
Das mit den Hexadezimalziffern könnte folgendes Grund haben: mkvinfo ließt die SID im Format 0xaa 0xbb 0xcc usw. aus. mkbpropedit will die aber im Format aabbcc usw. haben, also ohne "0x" vor jedem Wert. Kann man das anpassen lassen?
[...]
Quote[...]
Starte ich das Skript über die Eingabeaufforderung kommt folgende Meldung: "List form of pipe open not implemented at pfad/zur/datei datei.pl"
Guest HabaneroIst perl eher für Unix-artige ausgelegt?
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+0x(.*)$/) {
$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 $?"
}
}
QuoteMatroska (…) ist ein Containerformat für Audio- und Videodaten.
Guest Habanero[...]
Da kann leider nicht programmieren und mir den Code zurechtschreiben, aus diesem Grund hab ich mich ans Forum gewand.
[...]
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, '-|', qq/mkvinfo --ui-language en "$file"/ or die "Couldn't run mkvinfo on $file: $!"; my $uid; while (my $_ = <$mkvinfo>) { if (/\+ Segment UID:\s+0x(.*)$/) { $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(qq/mkvpropedit "$file" --edit info @options/) == 0 or die "Couldn't run mkvpropedit on $file: status $?" } }
QuoteEs wurde mehr als ein Dateiname angegeben ("01.mkv" und 0x21")
Quote"\0x21" ist "!" ich wüsste nicht wie das da hin kommen sollte
QuoteDu kannst auch einfach mal posten, was mkvinfo --ui-language en "$filename" zurückliefert und was Du davon haben willst...
1 2
push @options, '--set', 'prev-uid="'.$prev_uid.'"' if (defined $prev_uid); push @options, '--set', 'next-uid="'.$next_uid.'"' if (defined $next_uid);
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
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, '-|', qq/mkvinfo --ui-language en "$file"/ or die "Couldn't run mkvinfo on $file: $!"; my $uid; while (my $_ = <$mkvinfo>) { if (/\+ Segment UID:\s+(.*)$/) { $uid = $1; $uid =~ s/\s*0x//g; 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, qq/--set prev-uid="$prev_uid"/ if (defined $prev_uid); push @options, qq/--set next-uid="$next_uid"/ if (defined $next_uid); if (@options) { system(qq/mkvpropedit "$file" --edit info @options/) == 0 or die "Couldn't run mkvpropedit on $file: status $?" } }
QuoteDie Datei wird analysiert.
Fehler: Der Merkmalswert ist keine gültige Hexadezimalziffer oder nicht exakt 12
'. The file has not been modified.2103d032153ad5a8143e7dbb9205c0
Couldn't run mkvpropedit on 01.mkv: status 512 at x:\pfad\datei.pl line 44.
1
2
3
4
5
Die Datei wird analysiert.
Fehler: Der Merkmalswert ist keine gültige Hexadezimalziffer oder nicht exakt 12
8 Bits lang bei '--set next-uid=99 0x21 0x03 0xd0 0x32 0x15 0x3a 0xd5 0xa8 0x14
'. The file has not been modified.
Couldn't run mkvpropedit on 01.mkv: status 512 at x:\pfad\datei.pl line 43.
Guest Habanero[...]
Wenn ich das Skript ausführen, erhalte ich die meldung
QuoteDie Datei wird analysiert.
Fehler: Der Merkmalswert ist keine gültige Hexadezimalziffer oder nicht exakt 12
'. The file has not been modified.2103d032153ad5a8143e7dbb9205c0
Couldn't run mkvpropedit on 01.mkv: status 512 at x:\pfad\datei.pl line 44.
QuoteÄndere ich die Zeile 17 so wie oben geändert kommt das gleiche.
QuoteNumber found where operator expected at x:\pfad\suid7.pl line 1, near "Version 5.1.2600"
(Do you need to predeclare Version?)
Bareword found where operator expected at x:\pfad\suid7.pl line 2, near ") Copyright"
(Missing operator before Copyright?)
Number found where operator expected at x:\pfad\suid7.pl line 2, near "Copyright 1985"
(Do you need to predeclare Copyright?)
Bareword found where operator expected at x:\pfad\suid7.pl line 2, near "2001 Microsoft"
(Missing operator before Microsoft?)
Backslash found where operator expected at x:\pfad\suid7.pl line 4, near "Einstellungen\"
Backslash found where operator expected at x:\pfad\suid7.pl line 10, near "F\"
Backslash found where operator expected at x:\pfad\suid7.pl line 12, near "F\"
Bareword found where operator expected at x:\pfad\suid7.pl line 12, near "1.pl"
(Missing operator before pl?)
syntax error at x:\pfad\suid7.pl line 1, near "XP ["
Unrecognized character \xFC in column 37 at x:\pfad\suid7.pl line 14.
Guest Habanerohttp://forum.gleitz.info/showthread.php?t=41726
Das ist der Link bei doom9. Hatte jedoch nur entfernt etwas hiermit zu tun.
QuoteUnrecognized escape \V passed through at E:\pfad\suid7.1.pl line 12.
Unrecognized escape \m passed through at E:\pfad\suid7.1.pl line 12.
Unrecognized escape \m passed through at E:\pfad\suid7.1.pl line 12.
Unrecognized escape \V passed through at E:\pfad\suid7.1.pl line 13.
Unrecognized escape \m passed through at E:\pfad\suid7.1.pl line 13.
Unrecognized escape \m passed through at E:\pfad\suid7.1.pl line 13.
Unrecognized escape \V passed through at E:\pfad\suid7.1.pl line 16.
Unrecognized escape \m passed through at E:\pfad\suid7.1.pl line 16.
Unrecognized escape \m passed through at E:\pfad\suid7.1.pl line 16.
Backslash found where operator expected at E:\pfad\suid7.1.pl line 24, near "pfad\"
Number found where operator expected at E:\pfad\
suid7.1.pl line 24, near "mkvtoolnix 3.1.0"
(Do you need to predeclare mkvtoolnix?)
Backslash found where operator expected at E:\pfad\suid7.1.pl line 24, near "3.1.0\"
(Missing operator before \?)
Global symbol "$D" requires explicit package name at E:\pfad\suid7.1.pl line 16.
Global symbol "$D" requires explicit package name at E:\pfad\suid7.1.pl line 24.
syntax error at E:\pfad\suid7.1.pl line 24, near "$D:"
Execution of E:\pfad\suid7.1.pl aborted due to compilation errors.
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
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, '-|', qq/D:\Video\mkvtoolnix 3.1.0\mkvinfo --ui-language en "$file"/
or die "Couldn't run D:\Video\mkvtoolnix 3.1.0\mkvinfo on $file: $!";
my $uid;
while (my $_ = <$D:\Video\mkvtoolnix 3.1.0\mkvinfo>) {
if (/\+ Segment UID:\s+(.*?)[\r\n]*\z/) {
$uid = $1;
$uid =~ s/\s*0x//g;
last;
}
}
close $D:\Video\mkvtoolnix 3.1.0\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) {
system(qq/mkvpropedit "$file" --edit info @options/) == 0
or die "Couldn't run mkvpropedit on $file: status $?"
}
}
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 $?"; } }
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
use 5.010; use strict; use warnings; # Die "%s" sind Platzhalter für die zusätzlichen Informationen # der Befehl "sprintf" macht die Ersetzung # Die mkinfo Kommandozeile my $mkvinfo_cmd=q/"D:\Video\mkvtoolnix 3.1.0\mkvinfo" --ui-language en "%s"/; # Die mkvpropedit Kommandozeile my $mkvpropedit_cmd=q/mkvpropedit "%s" --edit info %s/; # Dateien auflisten und sortieren my @files = sort glob '*.mkv'; # Segment-UIDs via mkvinfo auslesen my @uids = map { my $file = $_; my $cmd=sprintf $mkvinfo_cmd,$file; open my $mkvinfo, '-|', $cmd or die qq/Couldn't run $cmd : $!/; my $uid; while (my $_ = <$mkvinfo>) { if (/\+ Segment UID:\s+(.*?)[\r\n]*\z/) { $uid = $1; $uid =~ s/\s*0x//g; last; } } close $mkvinfo or die "Error running $cmd: $!"; 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) { my $cmd=sprintf $mkvpropedit_cmd,$file,"@options"; system($cmd) == 0 or die "Couldn't run $cmd: status $?"; } }
Guest werWarum nicht gleich richtig?