QuEnc^n - Das Multicore frontend für QuEnc v0.1 (Beta)

  • Hi Leute,

    Hoffe mal, dass das Thema hier reinpasst ! :seher:
    Ansonsten bitte an einen der Mods den Fred sonst in die richtige Ecke zu verschieben. :D

    Ich habe gerade die letzten Tests mit QuEnc^n gefahren und denke, dass es bereit für eine Beta Release ist.

    Da QuEnc nicht Multiprozessortauglich ist, aber immer mehr Multicore PCs auf den Markt drängen habe ich mir kurzerhand entschlossen ein Frontend zu "bauen", was diese Funktionalität nachrüstet.

    Ich hoffe ihr verzeiht mir, wenn ich kurzerhand einfach nur einen Teil der englischen Readme poste:

    QuEnc^n gibts hier: http://de.geocities.com/dark_soul_71/QuEnc_n.zip

    Gruß,
    D$

  • Die Geschwindigkeit wird es eventuell erhöhen; die Qualität aber bestimmt nicht. Denn optimale Qualität kann ja nur erreicht werden, wenn die Bitratenverteilung über die gesamte Länge des Filmes vorgenommen wird. Hast du erhebliche Unterschiede im Charakter der Szenen, bekommst du nicht-optimale Ergebnisse.

    Beispiel:

    Am Anfang ruhige, weiche Szenen - am Ende detailreiche Action.

    Wird der Film in zwei Teilen encodiert, dann wird an die erste Hälfte zu viel Bitrate verschwendet, für die Zweite ist zu wenig übrig.

    Ein solches Thema wurde bereits unter dem Stichwort "Clustering" besprochen; im Allgemeinen ist das generell wenig geeignet für Videoverarbeitung. Einen wirklichen Gewinn könnte man bei Mehrprozessor-Unterstützung nur in wirklich parallelisierbaren Anteilen des Encodierungs-Algorithmus erreichen, die sind aber eher eng beschränkt und innerhalb von kleinen Bereichen des jeweiligen Einzelbildes, über mehrere Bilder oder größere Flächen hinweg ist eine Parallelisierung kaum möglich.

  • LigH:
    Mag ja sein, aber
    1) kann ich bei 60-70% Geschwindigkeitssteigerung auf nem Dual Core auf das letzte Quäntchen Quallie verzichten.

    2) Quetsche ich meine DVDs nicht so mit analogen Filmen voll, dass ich da erheblich Einbussen erwarte. Wenn du halt ganz weit runter gehst, dann mögen 2x45 min encodeter Film gemerged eventuell eine sichtbar schlechtere Quallie haben als 1x90 min, aber in den Fällen mit 2-4 Segmenten bei 3-4 MBit wage ich zu bezweifeln, dass das sooooo sehr sichtbar ist. Ausser der Encoder wäre zu schlecht.....

    3) Nutzt DVD-RB ja das selbe Konzept und da regt sich keiner über Qualität auf.

    Zitat

    Einen wirklichen Gewinn könnte man bei Mehrprozessor-Unterstützung nur in wirklich parallelisierbaren Anteilen des Encodierungs-Algorithmus erreichen, die sind aber eher eng beschränkt und innerhalb von kleinen Bereichen des jeweiligen Einzelbildes, über mehrere Bilder oder größere Flächen hinweg ist eine Parallelisierung kaum möglich.

    Obwohl ich kein Encoderentwickler bin bezweifele ich das jetzt generell einfach mal. Mag sein, dass "mein" Ansatz mit separat laufenden Encodern nicht optimal ist, aber betrachte dir doch die Arbeitsweise im 2 Pass Modus. Im ersten Durchgang wird das Video analysiert. Wer hindert den Entwickler daran mehrere Segmente gleichzeitig zu analysieren ? Analog dazu könnte der Encoder auch mehrere (2 ?) Segmente mit der entsprechenden Bitratenverteilung encoden.

    Im Cluster wird das ohne vorherige Analyse vielleicht zu Problemen führen, aber wenn ich z.B. einen Encoding Cluster für DVD-RB bastele wo jede Encoding Node nur das selbe Segment runterrechnet was DVD-RB erstellt hat, dann hast du auch im Cluster keinen Quallieverlust, weil ist ja egal ob nun ein Encoder nacheinander die Segmente encodet oder mehrere parallel. Daran bastele ich übrigens auch grade.

    Sry, ich finde der Ansatz hinkt ein bisschen. Mal angenommen QuEnc würde nen "Q"-Encoding Modus bieten und man könnte sowas ähnliches entwickeln wie in D2SRoBa integriert (OPV mit size prediction), dann könnte das "Frontend" den "optimalen" Q-Faktor für den gesamten Film finden und hinterher mehrere Segmente unabhängig vonaneinder mit dem ermittelten Q-Wert vergleichen. Mir kann keiner erzählen, dass sich eine "Q"-Encodingvariante nicht in QuEnc (oder andere Freeware Encoder) integrieren liesse.

    HCEnc hat sich leider bei meinen Experimenten mti dem Constant Quantizer Encoding Modus als ungeeignet für die OPV Prediction gezeigt. Mit AutoMatQEnc (bei dem Sapstar sich aber auch um "Kompatibilität" zu CCE bei CQ bemüht) funzt die Prediction schon ziemlich gut und der arbeitet basierend auf der selben Lib wie QuEnc.

    Ich denke es gäbe genug praktikable Ansätze: Eventuell einen Encoder mit "Quick First Pass" (analog zum Encoding bei OPV Prediction) der durch encoden von kurzen Samples sowas wie einen "schnellen Überblick" über den Film erhält, also wo viel Action ist und wo wenig und dann sein "Bitratenreservoir" entsprechend verteilt.

  • Heya Erklärbär,

    ich finde es schade, dass du nicht nochmal "Stellung beziehst".
    Weißt du, "stänkern" kann jeder. :nein:

    Erinnert mich irgendwie stark an die typischen "Bedenkenträger", die wir in der Firma auch immer sitzen haben. Große Sprüche "Das könnte kritisch sein", "Daran muss man denken" und keine Lösungsvorschläge einbringen. Nicht dass ich dich nach Lösungsvorschlägen gefragt hätte, aber ich würde mir wünschen, dass sich jemand wenn er schon postet auch ein bisschen neutral mit der Materie auseinandersetzt.

    Bevor ich mich dazu äußern würde wie und ob "segmented" encoding einen wirklich sichtbaren Impact auf die Qualität hat, würde ich mal eine solide Testreihefahren, z.B.
    Quellvideo 30 min / 60 min / 120 min
    1-16 Segmente
    Bitraten von 1.2 bis 4 MBit.

    Dann die finalen Videos mit einem PSNR Tool wie dem PF Comparer mal testen (http://www.mpeg-vs-avi.de/PF%20Comparer.html).

    Erst wenn man dann mal ein paar Zahlenwerte hat, kann man sich noch ein bisschen mehr über die Zahlenwerte diskutieren, wie z.B. wie groß ist der Qualliedrop bei n Segmenten und m kBit.

    Wie groß der visuell erfassbare Verlust dann ist, wenn z.B. die segmentiert encodete Datei nen PSNR Wert von 70 und die am Stück encodete Datei von 73 hat, dass lass ich jetzt mal dahin gestellt sein.

    Alles Andere is Kaffeesatzleserei und Unkenrufen ! :seher:

    cu,
    D$

    P.S.: Danke auch für den Hinweis mit der Cluster-Geschichte. Der Fred war zwar schon ein bischen alt, aber interessanter Lesestoff.

  • Zitat

    ich finde es schade, dass du nicht nochmal "Stellung beziehst".
    Weißt du, "stänkern" kann jeder. :nein: ..
    aber ich würde mir wünschen, dass sich jemand wenn er schon postet auch ein bisschen neutral mit der Materie auseinandersetzt.

    wenn jemand seine Meinung und Erfahrung sprechen lässt ist das dann "stänkern" ?
    und das neutral mit der Materie würde ich schon unterschreiben .
    Und Erfahrung ist auch genug vorhanden.
    ps die "Bedenkenträger" haben wir auch in unserer Firma - und meistens / beinahe immer haben sie recht . Leider sind es dann aber die und nicht die Verursacher die die Sch***e wieder in richten dürfen . Von dem vielen Geld das fürs Fenster hinausgeworfen wurde ganz zu schweigen.

  • seeigel:
    "stänkern" steht bewusst in Anführungszeichen ! Ich spreche Ligh generell nicht seine Erfahrung ab, aber achte auf seine Wortwahl:

    Zitat von LigH

    Die Geschwindigkeit wird es eventuell erhöhen;


    Man möge sich diese Aussage auf der Zunge zergehen lassen. Die Geschwindigkeit wird es eventuell erhöhen - QED

    Drüben auf doom9 hat Revgen nen Test mit nem 4600+ X2 Dual-Core Athlon gemacht und für analoges, interlacetes Material ca 65% Geschwindigkeitssteigerung erzielt
    http://forum.doom9.org/showpost.php?p=825589&postcount=12

    Bei progressivem Material über 80%:
    http://forum.doom9.org/showpost.php?p=826001&postcount=16

    Soviel zum Thema "eventuell". Ist ja wohl klar, dass ich zumindestens 30-40% Geschwindigkeitsteigerung bei diesem Ansatz kriege, wenn ich zwei Instanzen eines Encoders gleichzeitig auf ner DualCore Maschine laufen lasse...

    Zitat von LigH

    die Qualität aber bestimmt nicht


    Ich habe nie davon gesprochen, dass die Qualität "gesteigert" werden soll, aber es bleibt ohne echte praktische Tests (wie in meinem oberen Posting ja geschrieben) einfach Kaffeesatzlesen wie gut oder schlecht so ne Methode funzt. Die Mehrheit der Nutzer von QuEnc^n wird ja wohl kaum 3 min Viva Musikvideos auf nem 16 Core Server mit 1 MBit/s encoden, oder ? :ani_lol:

    Ganz im Gegenteil: Die breitere "Masse" (wenn es denn eine gibt) wird wohl eher zu Hause auf nem Dual Core (bestenfalls Dual CPU Dual Core oder Dual Core mit HT) nen Film >= 90 min encoden, oder meinst du nicht ? :ja:

    Dedadewegen und gerade weil ich auch (eben erst) mitbekommen habe, dass QuEnc auch CQ kann, denke ich bereits über eine "dynamische" Bitratenverteilung pro Segment nach.

    Schon deshalb (man möge mir Encoder Mongo verzeihen) halte ich solche Aussagen wie diese schlichtweg für Käse:

    Zitat von LigH

    Ein solches Thema wurde bereits unter dem Stichwort "Clustering" besprochen; im Allgemeinen ist das generell wenig geeignet für Videoverarbeitung. Einen wirklichen Gewinn könnte man bei Mehrprozessor-Unterstützung nur in wirklich parallelisierbaren Anteilen des Encodierungs-Algorithmus erreichen, die sind aber eher eng beschränkt und innerhalb von kleinen Bereichen des jeweiligen Einzelbildes, über mehrere Bilder oder größere Flächen hinweg ist eine Parallelisierung kaum möglich.

    Direkt auf den Encoding Algorithmus bezogen hat LigH ja bestimmt Recht, dass dieser nicht sehr gut parallelsierbar ist, aber der Segmentansatz ist sehr gut parallelisierbar.

    Damit meine ich z.B. die Möglichkeit den ganzen Film per CQ mit Size Prediction zu analysieren und dann mit konstantem CQ Wert die einzelnen Schnippsel encoden. Wo soll da bitte die Quallie leiden ?

    ...aber gut, ich bin doof und LigH hat Recht.:daumen:

  • Moin,
    zunächst mal habe ich wenig Erfahrung mit Mpeg2-Encoding.

    Allerdings ist mir beim Lesen spontan Folgendes aufgefallen:
    Du könntest doch nach dem ersten Durchgang die Bitraten der einzelnen Segmente analysieren und den zur Verfügung stehenden Speicherplatz dann anteilig auf die SEgmente aufteilen.

    Ich mache das beim Serien-XVid-Encoden so: 1.Pass für alle Folgen und stats-Files auswerten). Und da sind zum Teil sehr große Unterschiede, von 300MB bis 600MB (mit q2) - mit demselben Skript. Würde ich allen Folgen den selben Speicherplatz geben (um z.B. 2 Folgen auf eine CD, 700MB zu pressen), würde die 300MB-Folge "besser" als q2 bekommen und die 600MB-Folge könnte man nicht mehr anschauen (klar, 350 von 600 sind ca. 58%).
    Teilt man die Bitrate anteilig auf (wie es der Encoder für einzelne Frames ja auch tut), so kriegt eine Folge 233MB und die andere 466MB, beide sind mit 77% der q2-Größe encodet - sieht i.d.R. wunderbar aus.

    Das Beispiel lässt sich wunderbar auf Dein Programm übertra<gen und schon sind wir bei LigHs Beispiel mit den 2 unterschiedlichen Teilen des selben Films. Daher der Verbesserungsvorschlag. Du brauchst dafür die Möglichkeit, den 1.Pass in Deinem Programm zu analysieren - da kenn ich mich nicht aus.

    Dann ergibt sich nur noch das vernachlässigbare "Problem", dass der Encoder evtl. an Deinen Schnittstellen nicht wirklich I-Frames gesetz hätte - wie gesagt, das halte ich für vernachlässigbar.

    Ansonsten finde ich, dass der Erklär-Bär auf ein Problem hingewiesen hat, das besteht. Und Probleme, die bestehen, aber totgeschwiegen werden, werden auch nicht gelöst. Da solltest Du Dir vielleicht ein etwas dickeres Fell zulegen - LigHs Kritik war ja berechtigt: Es kann ja sein bzw. es kommt vor, dass Filme eine ungleichmäßige Verteilung haben - darauf hinzuweisen finde ich oK. Probleme, die keiner anspricht werden auch nicht gelöst.

    Zitat von Darksoul71


    ...aber gut, ich bin doof und LigH hat Recht.:daumen:


    Hm, beleidigt zu schmollen treibt Dein Projekt sicher nicht voran.

    OK, während ich hier tippe, sehe ich, dass Du die selbe Idee auch schon hattest: Siehst Du - ohne LigHs Kritik wäre Dir die Notwendigkeit dieser Funktion evtl entgangen, weil keiner das Problem angesprochen hätte. Und dfann wundert man sich, warum das Programm bei vielen Filmen funktioniert und manchmal "Klötze" abliefert. Dafür stellt man solche Sachen doch zur Diskussion!

    So genug dazu!

    Viel erfolg mit Deinem Programm und der Implementierung dieser Funktion!

    Grüße!
    Trekkie2

  • Elder geht soviel ich weiß einen ähnlichen aber etwas komplizierteren Weg. Da werden die 1 Pass stats Dateien analysiert, und dann die Bitratenverteilung für die einzelnen Segmente errechnet.

    Sowas in der Art wäre natürlich der Königsweg. Das Problem am Segment Ansatz ist (bei nur einem Pass), dass die Encodiermodi (Quantizer und ähnliches) an einer bestimmten Stelle im Film durchaus auch von dem Ergebnis des Encodens an einer früheren Stelle abhängt (z.B.>/< Zielbitrate)

    Wenn man aber eh zwei Durchgänge macht, könnte man versuchen, aus den Statistiken der einzelnen Segmente eine gute Verteilung der Bitrate für den zweiten Teil zu errechnen.

    Du kannst dir ja mal die Stats Files anschauen, die von QuEnc erzeugt werden, vielleicht lässt sich da was machen

    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 Leute,

    freut mich ja, dass hier ein bisschen "Bewegung" reingekommen ist.

    Meine Ansatz mit der CQ Methode sieht garnicht so schlecht aus:

    Hm, sind doch schon ganz schöne Varianzen pro Segment drin.

    Zitat von Trekkie2

    Hm, beleidigt zu schmollen treibt Dein Projekt sicher nicht voran.


    Das solltest du nicht überbewerten. Ich bin, sagen wir mal, offensiv sarkastisch.

    Wenn jemand was ablässt ohne die Software ganz ersichtlich nicht mal angetestet zu haben, dann darf ich mich nicht gerade darüber freuen, oder ?

    Fakt is ja wohl, dass der Erklärbär (sorry LigH, ich find´s echt geil !) erstmal rein theoretisch geposted hat, oder ?
    Das Bedenken ist theoretisch durchaus berechtigt, aber ich stelle immer noch in Frage wie viel davon ein DualCore User merkt, der mit QuEnc^n ausschließlich längere Filme mit ordentlichen Bitraten encodet, oder ?

    Aber lassen wir das....

    Ich habe die ABD Funktion jetzt mal einfach spaßhalber implementiert und werde mal ein paar Tests fahren.

    We´ll see...

    Kopernikus:
    Habe keine Ahnung, ob die Statsfiles so einfach lesen kann. Das wäre natürlich auch ein Ansatz.

    D$

  • Also zumindest XviD schreibt ASCII Files, und ich kann mir nicht vorstellen, dass QuEnc das anders macht. Also einfach mal mit einem Editor öffnen und versuchen zu lesen.

    Falls das nicht funktioniert, kannst man in den Sourcen zu QuEnc/ffmpeg nachschauen, wie das Format aussieht.

    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.

Jetzt mitmachen!

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