Kapitel automatisch pro Datei zum Muxen erstellen

+A -A
Autor
Beitrag
Mr.Tyler-Durden
Ist häufiger hier
#1 erstellt: 18. Okt 2013, 17:25
Hallo!

Ich suche eine Möglichkeit, eine Kapiteldatei für einen mkv Container zu erstellen, und zwar automatisch pro mir vorliegende *.m2ts.

Also: Jede m2ts ist ein Kapitel. Diese Kapitel sollen in einen mkv-Container, in dem auch die reingemuxten m2ts-Dateien hintereinander abgespielt werden.

Ich mache mir zur Zeit die Arbeit und schreibe mir alle Laufzeiten der vorliegenden m2ts-Dateien (MediaInfo gibt mm:ss aus) in eine Excel-Tabelle und lasse sie addieren. Danach gehe ich die aus den m2ts-Dateien fertig gemuxte mkv anhand der per Excel berechneten Anfangs- und Endzeiten der m2ts-Datein step by step im Media Player Calssic durch und schreib mir die exakte Zeit im Format hh:mm:ss.mss heraus (Strg+G).
Danach erstelle ich eine Kapiteldatei in mkvmerge und schreibe die per Media Player Calssic exakt ermittelten Zeiten für die Kapitel in Anfang und Ende.

Warum das notwendig ist, wenn ich schon hh:mm:ss aus dem MediaInfo weiß? Weil MediaInfo die Sekunden rundet. Das führt nach mehr als 10 m2ts-Dateien zu sehr unsauberen Ergebnissen beim Kapitelsprung.

Das geht in mkvmerge nicht, da der Kapiteleditor völlig unabhängig vom Quellmuxer arbeitet.

Danke für Antworten!
Drexl
Inventar
#2 erstellt: 20. Okt 2013, 01:09
Also unter UNIX könnte ich Dir ein Script anbieten. Evtl. würde dieses dann auch in Cygwin laufen.


Noch ein kleiner Tip: ffprobe gibt die Länge ebenfalls mit ms-Genauigkeit aus.
Mr.Tyler-Durden
Ist häufiger hier
#3 erstellt: 20. Okt 2013, 01:45
OK, danke soweit, ich habe mal nach ffprobe gesucht (ein UNIX System habe ich derzeit nicht laufen). Leider fehlt mir das Know-How für etwaige Installationen unter Windows.
Kannst du mir dazu weitere Hinweise geben?
Besten Dank!
Drexl
Inventar
#4 erstellt: 20. Okt 2013, 11:16

Mr.Tyler-Durden (Beitrag #3) schrieb:
Leider fehlt mir das Know-How für etwaige Installationen unter Windows.

Die passende Setup-Datei von http://www.cygwin.com/ herunterladen. Der Rest der Installation sollte selbsterklärend sein.

#!/usr/bin/perl
$tsmuxer = "tsMuxeR";

open(LL, "mkvmerge --list-languages|") or die "mkvmerge: $!";
while(<LL>)
{
  chop;
  my @l = (split);
  my $l = $l[2];
  next if($l !~ /^www$/);
  push(@langlist, $l);
}
close(LL);

sub save
{
  my($file) = @_;
  return if(!$type);
  $line = "$type, "$file"";
  $line .= ", fps=$fps" if($fps);
  $line .= ", timeshift=${delay}ms" if($delay);
  $line .= ", insertSEI, contSPS" if($type =~ m/AVC/);
  $line .= ", track=$id";
  if($lang)
  {
    $lang =~ s/deu/ger/;
    $lang =~ s/fra/fre/;
    $line .= ", lang=$lang";
  }
  push(@line, $line);
  $track{$id}->{LANG} = $lang;
  $track{$id}->{DELAY} = $delay;
  $track{$id}->{FPS} = $fps;
  $track{$id}->{TYPE} = $type;
}

unlink("mkvmeta");
unlink("chapter");

$chapter = "00:00:00.00";

$filenum = 0;
foreach my $file (@ARGV)
{
  ++$filenum;
  $default_track = 0;
  print "n", "-" x 78, "n";
  {
    undef(@line);
    undef(%track);
    undef $id; undef $delay; undef $type; undef $fps; undef $lang;

    $prefix = $file;
    $prefix =~ s/.w+$//;
    $prefix =~ s,.*/([^/]+),1,;
    $title = $prefix;
    $prefix = "./tmp" . $filenum;
    open(READ, "$tsmuxer "$file"|") or die "open: $!";
    while(<READ>)
    {
#      print;
      chomp;
      ($key, $value) = split /:s*/, $_, 2;
      if($key =~ /Track ID/)
      {
        save($file) if($id);
        $id = $value;
        undef $fps; undef $type; undef $delay; undef $lang;
      }
      $delay = $value if($key =~ /Stream delay/);
      $lang = $value if($key =~ /Stream lang/);
      if($key =~ /Stream info/)
      {
        $value =~ m/Frame rate:s*(d+)/;
        $fps = $1;
      }
      $type = $value if($key =~ /Stream ID/);
    }
    save($file) if($id);
    close(READ);
    open(READ, "ffprobe "$file" 2>&1 |") or die "open: $!";
    while(<READ>)
    {
      chomp;
      next unless(/Duration/);
      $duration = (split(" "))[1];
      chop $duration;
    }
    close(READ);
    open(CHAPTER, ">>chapter") or die "open: $!";
    print CHAPTER sprintf("CHAPTER%02d=%sn", $filenum, $chapter);
    print CHAPTER sprintf("CHAPTER%02dNAME=%sn", $filenum, $file);
    close(CHAPTER);
    $chapter = $duration;
    print "$file $prefixn";
    open(META, ">meta") or die "open: $!";
    print META "MUXOPT --no-pcr-on-video-pid --new-audio-pes --demux --vbr --vbv-len=500n";
    foreach $line (@line)
    {
      print META "$linen";
    }
    close(META);
    system($tsmuxer, "meta", "$prefix");
    open(META, ">>mkvmeta") or die "open: $!";
    print META <<EOF if($filenum == 1);
--title
$title
-o
$title.mkv
--chapters
chapter
EOF
    opendir(DIR, "$prefix") or die "opendir($prefix): $!";
    @files = sort grep { /track/ } readdir(DIR);
    closedir(DIR);
    $order = "";
    $fid = 0;
    foreach my $track (@files)
    {
      $order .= "$fid:0,";
      ++$fid;
      $track =~ m/track_(d+)./;
      my $id = $1;
      die "INTERNAL ERROR (TID $id)" if(!defined $track{$id});
      if($track{$id}->{FPS})
      {
        my $fps = $track{$id}->{FPS};
        print META "--default-durationn0:${fps}fpsn";
      }
      if($track{$id}->{LANG})
      {
        my $lang = substr($track{$id}->{LANG},0, 3);
        print META "--languagen0:$langn"
          if(grep /$lang/, @langlist);
      }
      if($track =~ /ac3$/ and !$default_track)
      {
        print META "--default-trackn0n";
        $default_track = 1;
      }
      print META "$prefix/$trackn";
    }
    chop $order;
    print META "--track-ordern$ordern";
    close(META);
  }
}

system("mkvmerge", '@mkvmeta');
unlink("mkvmeta");
for($i = 1; $i <= $filenum; ++$i)
{
  $prefix = "./tmp" . $filenum;
  system("rm -rf $prefix");
}


Richtig testen konnte ich das Script jedoch nicht. Ich habe derzeit nur eine TS-Datei gefunden, und diese ist noch defekt. Für das Script brauchst Du noch den tsMuxeR.
Mr.Tyler-Durden
Ist häufiger hier
#5 erstellt: 20. Okt 2013, 16:29

Drexl (Beitrag #4) schrieb:

Die passende Setup-Datei von ... herunterladen. Der Rest der Installation sollte selbsterklärend sein.
Richtig testen konnte ich das Script jedoch nicht. Ich habe derzeit nur eine TS-Datei gefunden, und diese ist noch defekt. Für das Script brauchst Du noch den tsMuxeR.


Also danke nochmal für die Mühe!

Nenn mich doof aber ich habe keine Ahnung was ich damit anfangen soll...

Ich habe bis jetzt mit StaxRip, mkvmerge und mkvextract gearbeitet.
Drexl
Inventar
#6 erstellt: 20. Okt 2013, 20:04

Mr.Tyler-Durden (Beitrag #5) schrieb:

Nenn mich doof aber ich habe keine Ahnung was ich damit anfangen soll... :?


In eine Datei speichern, ein Cygwin Terminal öffnen, darauf achten, daß mkvmerge, tsRemuX und ffprobe in PATH zu finden sind und ausführen mittels

perl SCRIPTNAME DATEI1.m2ts DATEI2.m2ts ...

Die Ausgabedatei wird so heißen wie DATEI1, nur mit .MKV als Dateiendung.
Mr.Tyler-Durden
Ist häufiger hier
#7 erstellt: 24. Okt 2013, 18:30
Habe cygwin installiert nach C:\cygwin64
Darin befinden sich: bin, dev, etc, home, lib, tmp, usr, var, cygwin.bat, cygwin.ico, cygwin-terminal.ico
Habe das script in eine UTF-8 Textdatei ohne Dateiendung gespeichert und ebenfalls nach C:\cygwin64 kopiert.
Habe einen Ordner "tsmuxer" in C:\cygwin64 erstellt, nach dort die tsMuxeR.exe kopiert.

$ perl /script C:\test1.m2ts test2.m2ts
Scalar found where operator expected at /script line 19, near ""$type, "$file"
(Missing operator before $file?)
String found where operator expected at /script line 19, near "$file"""
(Missing operator before ""?)
Scalar found where operator expected at /script line 58, near ""$tsmuxer "$file"
(Missing operator before $file?)
String found where operator expected at /script line 58, near "$file"|""
(Missing operator before "|"?)
Scalar found where operator expected at /script line 81, near ""ffprobe "$file"
(Missing operator before $file?)
String found where operator expected at /script line 81, near "$file" 2>&1 |""
(Missing operator before " 2>&1 |"?)
syntax error at /script line 19, near ""$type, "$file"
syntax error at /script line 58, near ""$tsmuxer "$file"
syntax error at /script line 81, near ""ffprobe "$file"
Execution of /script aborted due to compilation errors.


Wie gesagt, ich kenne mich mit Unix-Systemen und vorallem mit Scripting nur im Ansatz aus.
Wäre schön, wenn du dich verständlich ausdrücken könntest.


Drexl (Beitrag #6) schrieb:
darauf achten, daß mkvmerge, tsRemuX und ffprobe in PATH zu finden sind


Was ist PATH?
Was meinst du mit "zu finden sind"?
Windows-Version von tsMuxeR installieren oder die tsMuxeR-Files in einen bestimmten Pfad kopieren?
Wenn ja, wohin?

Und wo müssen sich die m2ts-Dateien befinden?

Danke für eine Antwort und Geduld!
Suche:
Das könnte Dich auch interessieren:
MKVs erstellen?
Rostam am 10.08.2010  –  Letzte Antwort am 22.08.2010  –  9 Beiträge
Musik-Video DVD erstellen
Steeli01 am 18.06.2022  –  Letzte Antwort am 20.06.2022  –  9 Beiträge
BD "Der Pate" erstes Kapitel
Orion314 am 26.07.2011  –  Letzte Antwort am 26.07.2011  –  2 Beiträge
Eigene Video DVD erstellen
mega-zord am 12.04.2008  –  Letzte Antwort am 13.04.2008  –  2 Beiträge
3D Aufnahmen selber erstellen?
Saul am 13.02.2012  –  Letzte Antwort am 26.02.2012  –  2 Beiträge
Blu-Ray mit Menü erstellen
Galvano am 22.02.2013  –  Letzte Antwort am 24.03.2013  –  2 Beiträge
Datei MP4-1500_mpeg2video läßt sich nicht konvertieren
hugo-wolff am 26.04.2017  –  Letzte Antwort am 27.04.2017  –  9 Beiträge
VOB Dateien mit Nero Express richtig brennen!
j1GsaW am 20.12.2011  –  Letzte Antwort am 20.12.2011  –  4 Beiträge
Proleme KungFu Panda + Samsung BD-P1400
BlackVoodoo am 26.11.2008  –  Letzte Antwort am 29.11.2008  –  4 Beiträge
Xvid Problem bei gebrannter DVD
zosch3mg am 22.11.2008  –  Letzte Antwort am 23.11.2008  –  4 Beiträge
Foren Archiv
2013

Anzeige

Produkte in diesem Thread Widget schließen

Aktuelle Aktion

Partner Widget schließen

  • beyerdynamic Logo
  • DALI Logo
  • SAMSUNG Logo
  • TCL Logo

Forumsstatistik Widget schließen

  • Registrierte Mitglieder926.061 ( Heute: 1 )
  • Neuestes Mitgliedaltadudley02
  • Gesamtzahl an Themen1.551.967
  • Gesamtzahl an Beiträgen21.558.517

Hersteller in diesem Thread Widget schließen