Automatisiertes Demuxxen von großen Mengen

Schneiden, Encoden und Brennen
Antworten
Nachricht
Autor
Seppo
Gelegenheits-Streamer
Gelegenheits-Streamer
Beiträge: 50
Registriert: Sa 06 Dez 2003, 15:03

Automatisiertes Demuxxen von großen Mengen

#1 Beitrag von Seppo » So 30 Jan 2005, 12:53

Hi...

wer kennt das nicht?

Da streamt man über mehrere Tage mit der Dbox (oder einer TV-Karte) seine Lieblingssendungen und will sie nun ordentlich zurechtschneiden.

Da Cuttermaran die Streams nur als Bild und Ton getrennt voneinander verarbeitet ist guter Rat (und auch Zeit) teuer, wie man zB. mal eben 10 Streams mit insgesamt 40GB trennt, ohne sich nen Wolf zu warten oder jeden Stream einzeln trennen zu müssen (zB. mit den MPEG-Tools bei TMPGENC). :wall:

Genau unter dieser Voraussetzung bin ich mal im Internet auf die Suche nach einem Demuxxer gegangen, der sich über die Kommandozeile steuern und füttern lässt :D und bin mit "bbdmux" fündig geworden (zu beziehen HIER: http://members.cox.net/beyeler/bbmpeg.html)

Der Demuxxer ist Bestandteil der bbTOOLS1.9, ist Freeware und (soweit ich es verstanden habe) als Ergänzung zum bbMPEG gedacht, kann aber auch als Standalone laufen :D (Achtung: es kann sein, dass die Site über ihrer Quota ist - einfach GOOGLE mit bbtool19.zip füttern und das Ganze woanders runterladen :ja: :D)

Wer auf ProjectX als Demuxxer setzt, braucht nicht weiter zu lesen, alle anderen, die sich sicher sind, dass ihre Streams OK sind: hier ist die Lösung :ja:

Das Gequotete kann man in eine BATCH-Datei reinschreiben (Achtung: der ROTE TEXT ist EINE LANGE Befehlszeile (OHNE den Pause-Befehl)) und sie dann in dem Verzeichnis starten, wo die zu trennenden MPGs liegen (natürlich muss man die bbdmux.exe bereitliegen haben; Ort kann von User zu User abweichen)
for %%a in (*.mpg) do c:\programme\bbdmux\bbdmux.exe "%%a" 0xe0 "g:\x\%%a.m2v" | c:\programme\bbdmux\bbdmux.exe "%%a" 0xc0 "g:\x\%%a.mp2"
pause
Hier die Erklärung der Batch im Einzelnen:

for %%a in (*.mpg) -> alle im Ordner befindlichen MPGs werden der Reihe nach an die Variable %%a übergeben

do -> Tu was :D

c:\programme\bbdmux\bbdmux.exe "%%a" 0xe0 "g:\x\%%a.m2v" -> bbdmux bekommt die Variable "%%a" übergeben, nimmt sich den Stream 0Xe0 (ist der Videostream - kann aber variieren, wobei ich das noch nicht beobachtet habe) und schreibt den Videostream an die Stelle g:\x\ und hängt noch ein .m2v an den Ursprungsnamen an (zB test.mpg -> test.mpg.m2v)

| -> mach noch was anderes :D

c:\programme\bbdmux\bbdmux.exe "%%a" 0xc0 "g:\x\%%a.mp2" -> was für den Videostream gilt, gilt auch für den Audiostream. (0xc0 ist der MP2-Stream; AC3 hat eine andere Kennung) (zB test.mpg -> test.mpg.mp2)

pause -> damit der User auch sieht, was alles gemacht wurde, ansonsten würde das DOS-Fenster sofort nach der letzten Aktion geschlossen werden :ja:

Wer sich nicht sicher ist, welche Kennungen seine Streams haben, kann bbdmux.exe NUR mit dem MPG-Namen aufrufen (also zB.: bbdmux test.mpg) und bekommt dann aufgelistet, aus wievielen Einzelstreams das MPG besteht und wie die Kennungen sind :ja:

WICHTIG! Die Anführungszeichen MÜSSEN an ihren Stellen bleiben, da sonst Dateien mit LEERZEICHEN im Namen nicht verarbeitet werden können.

Ebenfalls wichtig: Video und Audio werden GLEICHZEITIG getrennt geschrieben, während das Original-MPG eingelesen wird (und nicht etwa nacheinander).


TRANSPORT-STREAMS können auch verarbeitet werden - hierzu muss folgendes beachtet werden:
- for program streams, stream id is the number (in 0x00 format) to extract. For transport streams, stream id is the PID (in 0x0000 format) to extract.

(steht im bbdmux.txt :D)
Wenn man bbdmux.exe nur mit dem MPG-Namen aufruft (also zB. bbdmux.exe test.mpg) und schon bekommt man alle Streams angezeigt und muss dann die 0x....-IDs anpassen :ja:

Hier ein Beispiel:
Scanning for stream id's, press control-c to quit ...

File 1.mpg is an MPEG-1 Program Stream

Found stream id 0xE0 = Video Stream 0
Found stream id 0xC0 = MPEG Audio Stream 0 <-- bei TRANSPORT-STREAMS sollte 0Xcccc stehen (cccc=irgendeine 4-stellige Nummer)
Found stream id 0xBE = Padding Stream

Summary:

MPEG Packs = 21164
System headers = 827
Padding Stream packets = 828, total bytes = 740436
MPEG Audio stream 0 packets = 2862, total bytes = 5794014
Video stream 0 packets = 18301, total bytes = 36211292


Diese Batch ist unter Windows 2000 getestet worden und funktioniert :ja:

Wer 2 Festplatten sein Eigen nennt, sollte (wenn die Original-Streams auf Platte 1 vorliegen) die getrennten Streams auf Platte 2 schreiben lassen bzw. umgekehrt.

Sollten die Streams zB noch auf der Dreambox liegen und man hat Zugriff übers Netz auf die Daten, kann man die Daten übers Netz auch gleich demuxxen, das spart die Zeit fürs Kopieren und ist nur unwesentlich langsamer (ich hatte es für 550MB getestet: übers Netz kopieren: 57 Sekunden; übers Netz demuxxen: 61 Sekunden)

Sollten noch Fragen sein - ich werde versuchen, sie zu beantworten.
Sollten Kritik oder Verbesserungsvorschläge vorhanden sein - als her damit :ja:

Grüße und viel Spaß beim Demuxxen :bia: :jump:

Seppo

Seppo
Gelegenheits-Streamer
Gelegenheits-Streamer
Beiträge: 50
Registriert: Sa 06 Dez 2003, 15:03

#2 Beitrag von Seppo » Fr 18 Feb 2005, 19:07

So... jetzt muss ich nochmal was nachtragen (mit nem Edit des 1. Postings würde das der ein oder andere nicht entdecken :D)

Mir ist aufgefallen, dass, wenn ich diesen Doppelbefehl zum Demuxxen von Platte A -> Platte B (also rechnerintern) benutze, bricht nach einer gewissen Zeit die Demuxxrate massiv ein (von 25MB/sec -> 7-8MB/sec) und erholt sich auch nicht wieder, wenn ein anderes MPG demuxxt wird.

Daher würde ich empfehlen, erst von allen MPGs den Videostream und anschließend den Audiostream zu extrahieren

Das würde zB in der Batchdatei dann so aussehen:
for %%a in (*.mpg) do c:\programme\bbdmux\bbdmux.exe "%%a" 0xe0 "g:\x\%%a.m2v" <- erst alle Videostreams aus den MPGS holen
for %%a in (*.mpg) do c:\programme\bbdmux\bbdmux.exe "%%a" 0xc0 "g:\x\%%a.mp2" <- dann alle Audiostreams
pause
(natürlich muss auch hier jeder wieder die Pfade für sich individuell anpassen :D )

Über das Netzwerk kann man weiterhin die 2-in-1-Methode benutzen, da eh nicht mehr wie 8MB/sec übers Netzwerk kommen (es sei denn, man nennt schon Gigabit-LAN sein eigen, da würde ich "ausprobieren" empfehlen :ja:)

Grüße... :bia:

Seppo

Antworten