selfhtml.de - Alles für den Webmaster!

 

Empfehlung:

wix.com

Kostenlose Homepage

Besuchen Sie auch:

Jobs:

Skript für automatisches File-Linking mit Matroska

Autor: habanero [Beiträge: 1]
Datum: 07.02.2010 13:32:46

Hallo,

eins vorweg: Ich hab noch nie nur eine Zeile Code programmiert.

Ich sortiere gerade u.a. Serien um sie auf meinen HTPC zu kopieren. Ich muxe alles in MKV (Matroska), welches die Möglichkeit bietet, 2 Files miteinander zu verlinken. Diese werden dann hintereinander abgespielt, dennoch kann man jede Datei auch einzeln auswählen. Das verlinken per Hand und GUI zu machen dauert ewig, daher wollte ich alle Dateien (jede Episode hat 1 oder 2 Dateien) in einen Ordner packen und in dieser Reihen folge autmatisch verlinken lassen.

Dazu muss z. B. von Datei 2 eine Segment-UID (SID) in die Kopfdaten der Datei 1 eingefügt werden. Dann die SID von datei 3 in die Kopfdaten von Datei 2. Das ganze kann man machen mit mkvmerge (neu muxen) oder mkvpropedit (nur ändern der Kopfdaten).

Problem: Das muxen per Kommandozeile und manuellem Einfügen der SID ist kein Problem, ich würde das aber gern für den kompletten Ordner automatisch machen lassen. Der Entwickler mailte mir dazu, dass man per mkvinfo.exe die SID von z. B. der Datei 2 auslesen lassen muss und diese dann in mkvpropedit (oder mkvmerge) einfügen lassen muss.

Und hier fängt mein Problem an: Wie bringe ich es fertig, dass mkvinfo.exe automatisch die SID ausließt und an mkvpropedit (oder mkvmerge) weitergibt und das für alle Dateien im Ordner?

Der Entwickler hat mir diesen (ungetesteten, schnell getippten Code geschrieben), nur weiß ich da ich nicht programmieren kann, damit nichts anzufangen.

[CODE]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);
}[/CODE]

Kann mir hier jemand helfen wie ich das am besten bewerkstelligen kann?

btw.
Hallo,

eins vorweg: Ich hab noch nie nur eine Zeile Code programmiert.

Ich sortiere gerade u.a. Serien um sie auf meinen HTPC zu kopieren. Ich muxe alles in MKV (Matroska), welches die Möglichkeit bietet, 2 Files miteinander zu verlinken. Diese werden dann hintereinander abgespielt, dennoch kann man jede Datei auch einzeln auswählen. Das verlinken per Hand und GUI zu machen dauert ewig, daher wollte ich alle Dateien (jede Episode hat 1 oder 2 Dateien) in einen Ordner packen und in dieser Reihen folge autmatisch verlinken lassen.

Dazu muss z. B. von Datei 2 eine Segment-UID (SID) in die Kopfdaten der Datei 1 eingefügt werden. Dann die SID von datei 3 in die Kopfdaten von Datei 2. Das ganze kann man machen mit mkvmerge (neu muxen) oder mkvpropedit (nur ändern der Kopfdaten).

Problem: Das muxen per Kommandozeile und manuellem Einfügen der SID ist kein Problem, ich würde das aber gern für den kompletten Ordner automatisch machen lassen. Der Entwickler mailte mir dazu, dass man per mkvinfo.exe die SID von z. B. der Datei 2 auslesen lassen muss und diese dann in mkvpropedit (oder mkvmerge) einfügen lassen muss.

Und hier fängt mein Problem an: Wie bringe ich es fertig, dass mkvinfo.exe automatisch die SID ausließt und an mkvpropedit (oder mkvmerge) weitergibt und das für alle Dateien im Ordner?

Der Entwickler hat mir diesen (ungetesteten, schnell getippten Code geschrieben), nur weiß ich da ich nicht programmieren kann, damit nichts anzufangen.

[CODE]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);
}[/CODE]

Kann mir hier jemand helfen wie ich das am besten bewerkstelligen kann?

btw.
Ich verwende die Windows-Version der Programme.


Beiträge

Antwort schreiben

Username: Usernamen registrieren
Passwort: Passwort vergessen?
Thema:
  Bitte benutze für deinen Beitrag die Groß-/Kleinschreibung!
Beitrag:
Link (URL):
Titel für Link:
Grafik (URL):
  Die Breite der Grafik darf 468 Pixel nicht überschreiten.
 
E-Mail-Benachrichtigung:



Zum Abschicken deines Beitrags bitte die Schaltfläche "Abschicken" nur einmal anklicken und warten. Der Server braucht manchmal einige Zeit, bis er den Beitrag in die Datenbank übernommen hat. Wenn du die Schaltfläche mehrmals drückst, erscheint dein Beitrag auch mehrmals im Forum.

Bewerten Sie Ihren Webhosting-Provider

Webhosting Provider bewerten und Apple iPad gewinnenWie zufrieden sind Sie mit Ihrem Webhosting-Provider? Gibt es Probleme beim Service, mit der Performance oder der Abrechnung?

Teilen Sie jetzt Ihre Erfahrungen mit anderen Webmastern und schreiben Sie eine Provider-Bewertung. Mit etwas Glück können Sie ein Apple iPad gewinnen!

Weitere Informationen und Teilnahme...