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 $?"; } }