Cluster-DVD-Konvertierung

  • Hi,

    ich würde gerne eine Software zur Konvertierung von DVDs schreiben. Die Idee ist, den Konvertierungsprozess auf mehrere Rechner aufzuteilen und so abzukürzen. Immerhin gibt es ganz schön viele Leute, die zu Hause ein kleines Netzwerk aufgebaut haben. Tatsächlich habe ich schon eine lauffähige Version eines solchen Programmes für wav->mp3-Konvertierung (ich weiß, dass das keinen Sinn macht, aber ich wollte erst mal das Konzept erproben).

    Nun habe ich aber von DVD-Konvertierung recht wenig Ahnung. Ich suche daher jemanden, der sich mit dem Kram auskennt und mich ein wenig unterstützen kann. Speziell geht es darum, einige Kommandozeilentools auszuwählen (z.B.: splitten und zusammenfügen von vob-Dateien und DivX- oder XviD-Dateien, natürlich die Konvertierung selbst). Und das ganze bevorzugt auf Windows _und_ Linux.

    Wenn jemand Lust hat, da unterstützend tätig zu werden, möchte sie/er sich doch melden! Ich kann auch gerne noch ein bisken mehr über das Konzept erzählen...

    Jetzt bin ich gespannt :)

    Grüße,
    Jupp

  • Ich glaube, da wäre dieser Beitrag am besten in der Rubrik "Software-Entwicklung" aufgehoben...

    Wir hatten schon mal einen Beitrag zu dem Thema, da tauchte ebenfalls der Begriff "Cluster" auf:

    http://forum.gleitz.de/showthread.php?t=6665

    Stückweise Konvertierung wäre mit AviSynth und "Trim()" machbar; allerdings nur unter Windows. Du bräuchtest da ja sowohl MPEG2-Decoder, als auch MPEG4-Encoder / AVI-"Schreiber", und das auch noch im Quelltext und systemunabhängig (Linux hat ja keine VfW-API). Da hast du dir aber viel vorgenommen...

  • Hi,

    Zitat von LigH

    Ich glaube, da wäre dieser Beitrag am besten in der Rubrik "Software-Entwicklung" aufgehoben...

    Danke fürs forwarden...

    Zitat von LigH

    Stückweise Konvertierung wäre mit AviSynth und "Trim()" machbar; allerdings nur unter Windows. Du bräuchtest da ja sowohl MPEG2-Decoder, als auch MPEG4-Encoder / AVI-"Schreiber", und das auch noch im Quelltext und systemunabhängig (Linux hat ja keine VfW-API). Da hast du dir aber viel vorgenommen...

    ich weiß gar nicht, ob das von meiner Seite her so kompliziert sein muss. Ich will mich eigentlich nur um das Verteilen etc. kümmern müssen und für den Rest existierende Software benutzen. Vielleicht liegt es daran, dass ich zu wenig über den Kram weiß, aber ich beschreibe mal detailliert, was ich vorhabe. Vielleicht kann jemand das kommentieren und mich auf Denkfehler aufmerksam machen...

    -DVD rippen (Resultat: VOB-File, elches Audio- und Video-Informationen enthält)
    -VOB-File in n Teile splitten
    -Die n Teile auf n Rechner übertragen
    -dort das entsprechende Konverterprogramm (z.B. DivX) starten
    -Ergebnisse einsammeln und auf dem ursprünglichen Rechner wieder zusammensetzen
    -AVI-Datei erstellen

    Benötigt werden also: Ein Vob-splitter und ein Vob-Joiner, natürlich das Konvertierungsprogramm, und ein AVI-Joiner. Da die Splitter und Joiner relativ elementare Dinger sind, müsste es davon doch eigentlich Kommandozeilen-Versionen für Windows und Linux geben...

    Probleme, die ich sehe:
    -wenn ich als Zielgröße z.B. 700MB angebe, muss ich die einzelnen Konvertierer natürlich mit 700MB/n als Zielgröße starten. Das Ergebnis dürfte a) eventuell stark von den 700MB abweichen und b) zu Qualitätsverlust führen

    Grüße,
    Jupp

  • da man bei DivX und Konsorten fast schon zwanglaeufig an einem 2-pass-encoding nicht vorbeikommt, wirds bei deinem Clustering wohl zu dem klitzekleinen Problem kommen, wie man die statistiken behandeln soll!
    klar: VOBs splitten und auf die rechner verteilen und analysieren lassen. (1st pass)
    alle rechner muessen dann ihr statistik-file an den hauptrechner schicken, der solange warten muss, bis auch der letzte schnipsel eingetroffen ist. danach berechnet der hauptrechner die gueltigen settings fuer den encoder (bitratenverteilung je schnipsel etc.) und schickt das angepasste statistik-file wieder zu den clients zurueck, welche dann wieder wie wild drauflosrechnen.
    wenn alle fertig sind kann der hauptrechner die videoschnipsel wieder zusammensetzen.

    So stelle ich mir jedenfalls im groben das clustering fuer DIvX/Xvid vor. recht schwierig.

  • Ausserdem wird das Verteilen schwierig sein, da das kopieren von VOB schnipseln, die ja relativ groß sind, eine ganze Menge Zeit braucht, und vor allem der hauptrechner sehr schnell an das Netz angebunden sein muss.

    Bei üblichen 100MBit ist dann der Hauptrechner der Flaschenhals.

    Ist es vielleicht sinnvoller, die Daten über das Netz zu frameserven? Dann könnte man die Zeit während des Übertragens schon zur Konvertierung nutzen. Geht Frameserving übers Netzwerk?

    Ist eine sehr interessante Idee!

    P.S.: VdubMod hatte doch mal testweise eine Clusterfunktion drin, weiß da jemand was genaueres.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Hi,

    Zitat von scharfis_brain

    da man bei DivX und Konsorten fast schon zwanglaeufig an einem 2-pass-encoding nicht vorbeikommt, wirds bei deinem Clustering wohl zu dem klitzekleinen Problem kommen, wie man die statistiken behandeln soll!
    klar: VOBs splitten und auf die rechner verteilen und analysieren lassen. (1st pass)
    alle rechner muessen dann ihr statistik-file an den hauptrechner schicken, der solange warten muss, bis auch der letzte schnipsel eingetroffen ist. danach berechnet der hauptrechner die gueltigen settings fuer den encoder (bitratenverteilung je schnipsel etc.) und schickt das angepasste statistik-file wieder zu den clients zurueck, welche dann wieder wie wild drauflosrechnen.
    wenn alle fertig sind kann der hauptrechner die videoschnipsel wieder zusammensetzen.

    So stelle ich mir jedenfalls im groben das clustering fuer DIvX/Xvid vor. recht schwierig.

    Was, wenn man die einzelnen, aus dem Split-Vorgang resultierenden vob-Files völlig getrennt behandelt? Man hätte dann eben nicht 1 Statistik über die komplette Datei, sondern n Statistiken über die n Teile. Da wohl die wenigsten eine Rechnerfarm mit 30 Rechnern zu Hause haben (realistisch ist m.E. eine Rechneranzahl von 2-5), würde das doch gar nicht so viel ändern!?

    Grüße,
    Jupp

  • Hi,

    Zitat von Kopernikus

    Ausserdem wird das Verteilen schwierig sein, da das kopieren von VOB schnipseln, die ja relativ groß sind, eine ganze Menge Zeit braucht, und vor allem der hauptrechner sehr schnell an das Netz angebunden sein muss.

    Bei üblichen 100MBit ist dann der Hauptrechner der Flaschenhals.

    Ist es vielleicht sinnvoller, die Daten über das Netz zu frameserven? Dann könnte man die Zeit während des Übertragens schon zur Konvertierung nutzen. Geht Frameserving übers Netzwerk?

    Naja, ich hab mal so gerechnet: eine 4GB-Datei braucht, eine Datenübertragungsrate von 8MB/sek vorausgesetzt, 512 Sekunden zur Verteilung. Selbst mit 5MB/sek sind es gerade mal 820 Sekunden oder eine knappe Viertelstunde. Man sollte also mit 20-30 Minuten auf der sicheren Seite sein. Wenn man bedenkt, dass die Konvertierung mehrere Stunden (auf einem Rechner) benötigt, hat man da immer noch nen schönen Zeitgewinn.

    Außerdem: so langsam kommen Gigabit-Netzwerkkarten ja auch in den finanzierbaren Bereich (ok, das ist jetzt ein bißchen optimistisch gedacht :) )

    Eventuell könnte man tatsächlich schon während der Übertragung mit dem Konvertieren beginnen. da bin ich mir aber noch nicht schlüssig drüber - wird auf jeden Fall etwas komplizierter.

    Unter Frameserving kann ich mir leider nix vorstellen :)

    Cu,
    Jupp

  • Ein "Frameserver" ist ein Hilfsmittel, das einem Programm, welches Bilder aus einem Format nicht lesen kann, die Einzelbilder stellvertretend decodiert und in einem Format anbietet, welches das Programm lesen kann - aber nicht per Temporärdatei, sondern live, im Moment der Anforderung.

    Meist können Programme kein MPEG2-Video lesen. Frameserver wie VFAPI, AviSynth oder ffvfw-AVIS tun so, als wären sie eine AVI-Datei: VFAPI und ffvfw-AVIS schreiben da tatsächlich AVI-Dateien, allerdings besteht der "komprimierte Inhalt" ihrer einzelnen "Bilder" in Wirklichkeit aus der Anweisung an ihren VfW-Codec, diese Bilder aus der Quelle zu decodieren. AviSynth dagegen hängt sich in die Windows-Funktionen, die AVI-Dateien für andere Programme lesen, und behauptet Windows gegenüber, die Scriptdatei mit der Endung .avs wie ein AVI lesen zu können.

  • Also wir haben vor einigen Wochen bei uns an der Uni ein ähnliches Projekt gestartet.
    Wir Capturen viel (mein Rechner fast permanent durch "FeM-VCR" (Videorecorder fürs Netzwerk)) von analog TV mit MJPEG. Die Files sind dadurch riesengroß und man will die so schnell wie möglich als DivX haben um die großen Dateien zu löschen. Außerdem dauert das Kopieren der Files auch bei 100 MBit ne Ewigkeit.
    Wir machen das so:
    Der Client von meinem Mitentwickler läuft einfach so im Hintergrund auf den Verschiedensten Rechnern von Studenten (großen Ziel wir wollen Seti verdrängen oder wenigstens gleichauf ziehen). Der Client guggt alle x sek auf nem "Server" (ein einfaches Verzeichner per SMB freigegeben) nach ob da .jobs - Files liegen. Wenn ja dann zieht er sich eins und markiert das auf dem Server als "in Bearbeitung". Dann startet er lokal das VirtualDub und fängt an mit Rechnen. Dabei öffnet er die Quelldatei per SMB von nem anderen Rechner (meiner oder der des anderen Capture-freaks (er möge mir verzeihen)) und schreibt auch die Ausgabedatei per SMB auf diesen (oder auch nen anderen) Rechner. Beide Passes werden natürlich auf ein und dem selben Rechner gerechnet. Die stehen beide im selben Jobfile. Anders gehts ja nich.
    Mein Client dient dazu die Jobs zu splitten. Man bearbeitet das Video ganz normal im VD und erstellt seinen 2 Jobs (1. und 2. Pass). Das Jobfile (ab jetzt "Auftrag" genannt) lädt man dann in meinen Client und sagt wieviel Minuten Film ein Job haben soll. Der Client modifiziert dementsprechend das Jobfile (korrigiert evtl noch die Pfade, da die ja auf die SMB Freigabe verweisen müssen) und schreibt entsprechend viele Jobfiles dann auf den Server.

    Läuft alles unter Windows. Nur der Server läuft unter Linux, da der Encodingclient alle 10 Sekunden oder so den Status von VD in ne INI auf dem Server schreibt und somit immer Verbunden ist. Win erlaubt aber nur 10 Verbindungen. :(

    Mit MJPEG Avi klappt das bisher sehr gut. Hab noch in Erinnerung dass ich mal ne effeltive Renderrate von 17,5 fps bei 2passes hatte. Meine Maschine macht so im Normalfall bestenfalls 9 eher 6-7 fps.
    Wenn dann mehrere Clients an einem Auftrag werkeln geht die Maschine allerdings schon etwas in die Knie.

    Folgende Probleme gibts Momentan noch:
    - alle müssen den gleichen Codec benutzen. Wir habn uns auf den DivX 5.11 festgelegt.
    - DVB MPEG2 geht manchmal aber nicht immer. Wissen noch nich genau worans liegt. Könnte an UDP liegen. Wird noch verifiziert.
    - VOB MPEG2 geht gar nich. Bricht mit der selben Fehlermeldung ab wie DVB aber geht überhaupt nicht.
    - MPEG2 ist überhaupt etwas ungünstig, weil VD die immer vorher parsen muss. Das dauert übers Netz dann auch so 15 Minuten oder mehr und belastet den Rechner, der die Files hält, extrem. Wir werden das mal mit Avisynth testen da muss er nix parsen und vielleicht hilft das auch bei den anderen Problemen.
    - Komfortables zusammenführen und muxxen der vielen kleinen DivX Avis zu einem Endprodukt (ist schon so gut wie gelöst).

    Bei Fragen einfach posten. Ich werd mal mit dem Kelten (kennt den wer?) fragen ob wird villeicht anderen zur Verfügung stellen.

    Also um das Wort Cluster nochmal aufzugreifen. Für ein echtes Clustering also das Auslagern von Prozessen und Speicher brauchts wesentlich mehr als 100 Mbit (Hypertransport hat bis zu 12,8 GByte pro sek) und glaub ein OS was mehrere Prozessoren unterstüzt und ich denke auch Software die mehrere Prozessoren unterstützt. Soweit ich weis kann DivX nur mit einem Prozessor arbeiten...

    MfG
    Ello

  • Zitat von JuppZupp

    Hi,
    Probleme, die ich sehe:
    -wenn ich als Zielgröße z.B. 700MB angebe, muss ich die einzelnen Konvertierer natürlich mit 700MB/n als Zielgröße starten. Das Ergebnis dürfte a) eventuell stark von den 700MB abweichen und b) zu Qualitätsverlust führen

    Das stellt kein Problem dar. Wir berechnen die Bitrate ganz normal und stellen das alles so ein wie immer. Am Ende passt das wunderbar. Files sind genauso groß wie wenn man sie komplett selber rechnen würde.

  • Das hört sich ja ziemlich interessant an.

    Was habt ihr denn für Bandbreite zur Verfügung?
    Wie viel Traffic entsteht denn?
    Wie werden denn die .jobs Files erzeugt? Muss man irgendwie angeben, was komprimiert werden soll, oder wird das ganze laufende Programm bearbeitet?
    Ein Jobfile umfasst nur einen Teil eines Films, oder?

    (Welche Uni ist das?:))

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Wir haben durchweg 100 MBit bis auf ein paar Ausnahmen außerhalb des Campus, die per Funkstrecke angebunden ist.

    Traffic? Naja Das Komplette File wird ja 2 mal (2-pass) übertragen.
    Pro Tag hab ich so 100 GB.

    Die ursprünglichen .jobs ist ein normales VirtualDub Jobfile. Das wird dann entsprechend geteilt in mehrere jobfiles, die dann nur einen Teil enthalten.

    Capturen geht per Auftrag. also ne Webseite, wo man eingträgt, was man haben will und das wird dann automatisch gecaptured und liegt dann auf meinem FTP server bzw auch per SMB. Um das rechnen kümmert sich jeder dann selber bzw mach ichs auch bei Anfrage.

    Das ganze läuft an der TU-Ilmenau innerhalb des FeM-net. FeM ist die Forschungsgemeinschaft elektromische Medien e.v. Die Ham das Netz usw aufgebaut.

    MfG
    Ello

  • Hi,

    Vidomi kann meines Wissens nach Clustern. Mit der Einschränkung aber, das jeder Client(Slave) seine eigenes File bearbeitet. 8xSlaves--> 8xAvis.
    d.h. aus 8 Teilen wider einen Film machen.

    Es gab mal einen Virtualdubmod, der Clusterfähig war. Der Original Entwickler ist hier zu finden. Link
    Auf der Page hat sich aber seit einem Jahr nichts mehr getan. Dieser Mod war auch mal Teil vom "Offiziellen" Virtualdubmod. Etwa 02/03.
    Warum er dieses nich mehr ist, kann ich nicht sagen. Evtl. mal BaronVlad fragen, der ist doch Mod im Virtualdubmod Forum.

    (Vdubnetmod krallt sich übrigens die erste Netzwerkkarte im System, war bei mir die DVB Karte. Hat er natürlich keine Slaves gefunden. Nur mal so am Rande....)

    Nachteil war glaub ich, das das Ganze nur 1pass funktioniert hat.

    Funktioniert übrigens auch mit 10Mbit Netzwerk ganz gut.


    Gruss EKB

    "Was ist der Überfall auf eine Bank, gegen die Gründung einer Bank?" Bertholt Brecht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!