Der ultimative Blu-Ray Transcoding Guide

  • Der ultimative Blu-Ray Transcoding Guide


    [IMG:http://www.xin.at/thrawn/pics/…alert/bd/blu-ray-logo.jpg]


    Ich habe mich nun entschlossen, mein angesammeltes Wissen aus dem Bereich der Blu-Ray Videoverarbeitung weiterzugeben, und zwar in Form eines Guides, in dessen Rahmen auch eine Beispiel-BD verarbeitet werden soll. Ergänzt wird dies durch allgemeine Informationen über Blu-Rays und unterschiedliche Blu-Ray Standards im Bereich Video, Audio, Untertitel und Metadaten, sowie Hilfestellung zur Verarbeitung ebensolcher.


    Achtung: Trotz des protzigen Adjektivs "ultimativ" erhebt diese Anleitung noch keinen Anspruch auf Vollkommenheit. Sie ist vielleicht noch stellenweise fehlerhaft oder unvollständig. Derartige Unzulänglichkeiten werden natürlich noch durch mehr und mehr Feinschliff beseitigt. Dies kann und wird hoffentlich vor allem durch Feedback von Lesern erreicht werden!


    I.) Was soll hier nicht gezeigt werden?


    Eigentlich wollte ich noch auf die finale Antwort von Ernesto warten, da noch die Entscheidung bezüglich des Posts ausstand, doch da nun keine illegale Handlung mehr Bestandteil der Anleitung ist, und keine Handlung, die eine illegale voraussetzt, denke ich, daß der Post gefahrlos möglich sein sollte. Ich habe mich also entschlossen, in der Beispielverarbeitung keinerlei Arbeitsschritte zu demonstrieren, die..

    • ..das Umgehen einer Kopierschutzmaßnahme zeigen (AACS, BD+) oder..
    • ..auf Material aufsetzen, dessen Verarbeitung das Umgehen einer Kopierschutzmaßnahme voraussetzen würden.


    Weiters habe ich es mir persönlich auferlegt, keine Anfragen bezüglich Software in diesem Thread zuzulassen, die für das Umgehen von Blu-Ray Kopierschutzmaßnahmen genutzt werden könnte. Derartige Anfragen, oder auch die Diskussion über derartige Software oder generische Angriffe auf AACS, BD+ oder künftige ähnlich geartete Schutzsysteme werden umgehend an die Boardmoderation für die Löschung weitergereicht!


    Wenn ihr also Informationen zum "Knacken" einer BD Verschlüsselung sucht: NICHT HIER!


    II.) Was soll hier gezeigt werden?


    Gezeigt oder beschrieben werden soll die gezielte Verarbeitung von bestimmten Containerformaten, nämlich folgenden:

    • BDAV/MPEG-2 Transport Stream (*.m2ts, gezeigt wird Demultiplexing/Demuxing)
    • Matroska MKV (*.mkv, gezeigt wird Multiplexing/Muxing)


    Weiters das Decoden folgender Audio- und Videostreams, sowie Auslesen von Untertitelstreams:

    • Untertitel: SUP Bild-Untertitelformat
    • Video: H.264/MPEG-4 AVC
    • Video: SMPTE/VC-1
    • Audio: DTS (DTS, DTS-HD High Resolution, DTS-HD Master Audio)
    • Audio: Dolby AC3 (AC3, EAC3, Dolby True-HD)
    • Audio: LPCM


    Dann natürlich das Encoden bzw. Erstellen von diversen Streams, oftmals im selben Arbeitsschritt:

    • Untertitel: SRT Text-Untertitelformat
    • Video: H.264/MPEG-4 AVC
    • Audio: Dolby AC3


    Um all dies anhand eines praktischen Beispiels zu demonstrieren, soll eine OpenSource Demoproduktion als Testmaterial herhalten, und zwar die x264 Demo Blu-Ray, die ohne Kopierschutz auskommt, unter CreativeCommons OpenSource Lizenz steht, und die freien Animationsfilme "Big Buck Bunny" sowie "Elephants Dream" beinhaltet. Achtung: Wenn ihr dieses Demo-Image herunterladet, sollte euer System über einen UDF 2.5 Dateisystemtreiber verfügen. Unter Windows XP muß dieser nachinstalliert werden (Google!), freie Optionen sind verfügbar. Unter Windows Vista/7 ist UDF 2.5 mit an Bord. Wenn ihr das ISO mit einem Tool wie Daemon Tools o.ä. einhängen möchtet, müßt ihr dafür sorgen, eine Version dieser Software einzusetzen, die neu genug ist, um Blu-Ray Images zu unterstützen!


    Als Speziallösung demonstriert soll auch der AviSynth Frameserver werden, der in bestimmten Fällen vonnöten sein kann. Vor dem praktischen Anwendungsfall soll noch kurz erwähnt werden, über welche Software man verfügen sollte, bevor es losgeht. Nicht JEDE Software wird in allen Fällen benötigt, aber um bestens vorbereitet zu sein, sollte man über eine komplette Sammlung verfügen.


    ACHTUNG, Update (2012): Mittlerweile ist AviSynth im unten besprochenen VC-1 Videostream Fall NICHT mehr vonnöten! Neuere Versionen von x264 können diese Elementarstreams nun direkt verarbeiten, nachdem man sie aus den M2TS Containern auf einer entsprechenden Blu-Ray geholt hat. Dadurch kann dieser komplizierte Zwischenschritt für VC-1 Video entfallen, ich bitte das beim Weiterlesen unten im Kopf zu behalten. Wo also steht daß man AviSynth "braucht", ist das in Wahrheit nicht mehr der Fall!


    III.) Die Software


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/logos-1.png][IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/logos-2.png][IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/logos-3.png]


    Folgende Software sollte man also haben:


    Wie in der Liste jetzt nur teilweise zu sehen ist, handelt es sich zum Großteil um OpenSource Software oder zumindest Freeware, lediglich ArcSoft TotalMedia Theatre 3, die aktuelle Version des ArcSoft Wiedergabepaketes ist hier kommerzieller Natur. Das Paket kann mit eac3to zum Zweck höherwertigerer Audioumwandlung genutzt werden, es handelt sich dabei aber um kein Muß!


    Der Mediaplayer ist ebenfalls in allen Fällen optional, schließlich muß man sich das erzeugte Video ja nicht unbedingt auf einem PC ansehen, hilfreich ist es zur Sicherstellung eines sauberen Transcodes aber auf jeden Fall.


    Ein Hinweis noch: Teilweise wird im Rahmen dieser Anleitung auf 64-Bit Software zurückgegriffen. Aus Kompatibilitätsgründen empfehle ich aber, wo auch nur möglich unter Windows auf 32-Bit Software zu setzen, da es gerade im Mediabereich unter Windows sehr problematisch sein kann, etwas anderes zu tun!


    Damit hätten wir's, schreiten wir zum praktischen Anwendungsfall:


    1.) Das Demultiplexing des Blu-Ray Quellmaterials


    In diesem Arbeitsschritt verwendete Software:

    • tsMuxeR GUI
    • BDEdit
    • eac3to


    Jede Blu-Ray liegt in einer standardisierten Struktur vor, so wie es auch schon bei der DVD der Fall war. Wie schon bei der DVD sind auch bei der Blu-Ray nicht alle Ordner von Bedeutung. In unserem Fall liegen die wichtigsten Daten im Unterordner ".\BDMV\STREAM\", diese Dateien haben die Endung *.m2ts, und stellen die A/V Containerfiles der BD dar (so wie *.VOB auf einer DVD).


    Auch interessant können die Dateien im Ordner ".\BDMV\PLAYLIST\" sein, welche die Endung *.mpls aufweisen. Diese Playlisten sind in bestimmten Fällen interessant, nämlich dann, wenn der zu rippende Film nicht innerhalb eines einzelnen *.m2ts Containers vorliegt.


    [IMG:http://www.xin.at/thrawn/pics/…rt/bd/folderstructure.gif]


    Bei kommerziellen Blu-Rays liegt der Hauptfilm üblicherweise innerhalb eines einzelnen Containers, der ca. zwischen 16GB und 45GB messen kann. Sieht man ein solches File, kann man sich sicher sein, daß man seinen Filmcontainer schon gefunden hat. Sind die Daten aber auf viele kleine *.m2ts Dateien mit einer Größe von z.B. 100MB - 3GB aufgeteilt, so ist der Film höchstwahrscheinlich splitted. Um dann die korrekten Dateien zu finden, benötigt man die Playlisten. Um in einem solchen Fall die korrekte Playlist des Hauptfilms zu identifizieren, muß man wissen, wie lange der Film genau ist (in Minuten). Dann kann man BDEdit starten, und die Blu-Ray Struktur öffnen (den "BDMV" Folder angeben), und im Falle unserer Beispiel-BD würde das so aussehen (auch wenn es bei "Elephants Dream nicht wirklich vonnöten ist):


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/bdedit_1.gif]


    Nun wechselt man auf den PLAYLIST Reiter, und kann ganz links oben die Playlisten der BD durchblättern Im Bereich "Playlist" zeigt die sechste Spalte die Spieldauer des Films an, so wie hier zu sehen:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/bdedit_2.gif]


    Nun braucht man also nur noch die Playlist zu finden, deren Spieldauer sich mit der des Hauptfilms der BD exakt deckt! So kann man auch jene Filme verarbeiten, bei denen der Hauptfilm auf sehr viele kleine *.m2ts Container aufgeteilt wurde, über die Playlisten! Hat man nämlich die entsprechende Playlist gefunden, kann man selbige ganz einfach im tsMuxeR öffnen, so wie es auch bei *.m2ts Containern möglich ist. Unsere Playlist für "Elephants Dream" würde hier "00002.mpls" heißen, diese Datei wäre also in so einem Fall einfach in tsMuxeR zu öffnen.


    In unserem Fall aber sind drei Kurzfilme auf der OpenSource Sample-BD, und ich weiß bereits, daß der gewünschte "Elephants Dream" zur Gänze im Container 00003.m2ts residiert, es wird also nicht nötig sein, auf Playlisten zurückzugreifen.


    Ich öffne also wie in den meisten Fällen nicht die Playlistendatei, sondern direkt die 00003.m2ts Containerdatei mit tsMuxeR GUI, und das sieht dann so aus:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/tsmuxer.gif]


    Nun selektiert man die gewünschten Spuren, die man demultiplexen möchte, in unserem Falle sind das alle. Bei kommerziellen BDs würde man hier diverse Untertitel- und Audiospuren deselektieren, die man nicht braucht, z.B. Ton in den unterschiedlichsten Sprachen.


    ACHTUNG, IM SONDERFALL: Liegt ein VC-1 Videostream vor, ist dieser hier nicht zu selektieren! Elementare VC-1 Videostreams sind etwas unbrauchbar! In so einem Fall läßt man selbigen mit tsMuxeR besser im Container, und arbeitet mit eac3to, welches gleich besprochen werden wird!


    In diesem Fall ist das Video H.264, wir demuxen also alles.


    ACHTUNG! Hier sollte man sich unbedingt den fps Wert merken, dieser wird später zwingend benötigt! Dieser kann z.B. bei 24 oder 24000/1001 liegen (das entspräche ~23.97fps), also notieren:


    [IMG:http://www.xin.at/thrawn/pics/…oalert/bd/tsmuxer_fps.gif]


    Sollte der Videostream aber VC-1 sein, so muß man sich mit eac3to helfen. Da elementare VC-1 Streams nicht von x264 gelesen werden können, braucht man einen Container drumherum, mit dem x264 auf Umwegen etwas anfangen kann, MKV zum Beispiel! eac3to ist zwar eigentlich ein Audioencoder, kann aber auch praktisch als Remultiplexer eingesetzt werden, um das VC-1 inklusive der Metadaten aus dem *.m2ts Container in einen *.mkv zu remuxen. Dabei muß man eac3to die Tracknummer des Videostreams plus Quelldatei angeben (Tracknummer meistens "2"), und dann noch die Zieldatei. Das würde z.B. so gehen:


    Code
    1. eac3to.exe quelle.m2ts 2: vc1-rohmaterial.mkv


    Die Syntax ist also:


    Code
    1. eac3to.exe <QUELLCONTAINER> <STREAMNUMMER>: <ZIELCONTAINER>


    Für das VC-1 wird dann später auch noch ein Frameserver besprochen, aber erst im Transcoding-Abschnitt. Fürs erste ist das Demuxen damit abgeschlossen.


    In unserem Fall haben wir jetzt drei Elementarstreams hier liegen, eine "00003.track_4113.264" Datei (Video), Eine "00003.track_4352.dts" Datei (Audio) und eine "00003.track_4608.sup" Datei (Untertitel in Bildform). Da wir H.264 Video vorliegen haben, wird das Transcoding wesentlich simpler als im VC-1 Fall.


    Das Demuxen ist damit abgeschlossen! In unserem Fall sehen wir hier als Ergebnis die Elementarstreams:


    [IMG:http://www.xin.at/thrawn/pics/…lert/bd/demuxed_files.gif]

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700 (defekt)

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be!

    5 Mal editiert, zuletzt von GrandAdmiralThrawn ()

  • 2.) Das Transcoding der Blu-Ray Elementarstreams bzw. der Remux-Container


    In diesem Arbeitsschritt verwendete Software:

    • x264
    • eac3to
    • AviSynth
    • ArcSoft DTS Decoder (optional)


    2.1.) Audio:


    Dies ist der eigentliche Arbeitsschritt. In der Regel erfordert dies weit mehr Leistung vom Rechner, als vom User, abgesehen von der Eingabe der ganzen Kommandozeilenbefehle. Der Einfachheit halber widmen wir uns zuerst den Audiostreams, oder in unserem Fall "dem" Audiostream. Zwar kann man auch mehrere einbetten, aber unsere Beispieldisc bietet nur englischen Ton, der in der "00003.track_4352.dts" Datei liegt.


    Ich persönlich bevorzuge AC3 Ton, der ein recht gutes Verhältnis zwischen Qualität und Speicherverbrauch aufweist, AC3 wurde schon bei der DVD eingesetzt. Ich entscheide mich für die maximal mögliche Bitrate für AC3, 640kbit/s, und wähle den Zieldateinamen "english_audio.ac3".


    Code
    1. eac3to.exe 00003.track_4352.dts english_audio.ac3 -640


    AC3 liefert 5.1 Ton. Sollte die Quelle 6.1 oder 7.1 bieten, so werden die zusätzlichen Kanäle downmixed, aber immer noch für unser finales Audio in Betracht gezogen! Wir encoden also unter einer gewissen Berücksichtigung des gesamten Quellmaterials.


    ACHTUNG, IM SONDERFALL: Manche BDs weisen Ton in massiv hoher Sampling-Rate auf. Das ist zwar extrem selten, kann aber vorkommen. eac3to beschwert sich in solchen Fällen mit einer "Sampling Rate" Fehlermeldung. Dies läßt sich aber durch Downsampling auf die maximale in AC3 erlaubte Samplingrate - 48kHz - umgehen. Das würde, wenn man es in unserem Falle versuchen wollte z.B. so aussehen:


    Code
    1. eac3to.exe 00003.track_4352.dts english_audio.ac3 -640 -resampleTo48000


    eac3to encodet den Ton also mit maximal zwei Threads runter (Mehrkerner profitieren also hier ein wenig), und dann liegt ein "english_audio.ac3" File in unserem Ausgabeordner. Damit ist der Ton transcoded. Dies mag in unserem Fall in Sachen Dateigröße nicht nach einer wesentlichen Verbesserung aussehen, doch manche Filme weisen 3-6GB große Tonspuren auf, die man dann locker auf 400-600MB heruntergepresst bekommt, hier zahlt sich das also schnell aus.


    Aussehen würde ein Output des Encoders z.B. so:


    Code
    1. eac3to.exe" 00003.track_4352.dts english_audio.ac3 -640This doesn't seem to be a valid EVO/VOB file ($0).DTS Master Audio, 5.1 channels, 16 bits, 48khz(core: DTS, 5.1 channels, 16 bits, 1509kbps, 48khz)Decoding with ArcSoft DTS Decoder...Encoding AC3 <640kbps> with libAften...Creating file "english_audio.ac3"...The original audio track has a constant bit depth of 16 bits.eac3to processing took 30 seconds.Done.


    2.2.) Video:


    Hier kommt unser magischer x264 Encoder zum Einsatz, momentan vielfach als der weltbeste H.264 Encoder gesehen. Zuerst widmen wir uns unserer Beispiel-BD, also dem "00003.track_4113.264" Elementarstream. Als Einstellungen gebe ich hier jene vor, die ich als noch relativ vertretbar in Sachen Laufzeit ansehe, und welche dabei maximale Qualität liefern, ohne bei einer Spielfilm-BD die DVD9 zu sprengen. Das Ziel ist es also, in Summe immer gut unter 9GB bzw. 8.5GB zu bleiben. In unserem Fall macht das keinen Sinn, weil "Elephants Dream" noch nicht einmal 11 Minuten lang ist. Wir entscheiden uns daher für eine Hausnummern-Bitrate von 6MBit/s. Dies ist natürlich nur ein Richtwert, der eigentliche Bitratenwert ist dann szenenabhängig variabel.


    Über den Daumen gepeilt kann man jedoch sagen, daß folgender Richtwert im Schnitt relativ gut sein müßte, um eine Zieldatei von etwa ~8GB zu erreichen, Video und Audio inklusive:


    100 Minuten Film - 9800kBit/s Video.


    Hat man nun z.B. 90 Minuten Film zu encoden, kann man seinen Richtwert einfach anpassen, bei weniger Laufzeit kann man unter der Vorgabe der selben Größenlimitierungen eine höhere Bitrate investieren! Wir gehen vom 100-Minuten Beispiel aus, und rechnen:


    100 / 90 =~ 1.11 (Anpassungsfaktor).


    9800 * 1.11 = 10878kBit/s Video.


    Nehmen wir nun an, ein Film hätte extreme 190 Minuten, hier müßte man also die Bitrate deutlich senken, um im Rahmen zu bleiben:


    100 / 190 =~ 0.52.


    9800 * 0.52 = 5096kBit/s Video.


    Für "Elephants Dream" passen wir die Bitrate nicht gemäß dieser Rechnung an, weil wir keinen 8GB großen 10-Minuten Film brauchen. 6MBit/s sollten ok sein.


    Um die Qualität möglichst hoch zu halten führt man am besten einen 2-Pass Encode durch. Dabei wird der Film 2 Mal codiert! Beim ersten Mal schreibt x264 ein Statistik-File, sowie ein Macroblock-Tree File mit, um so den Film analysieren zu können. Dabei wird erfaßt, wo am besten Bitrate investiert werden sollte (z.B. schnelle Wechsel auf rasante Szenen), und wo nicht (ruhige Bilder).


    Durch 2-Pass Encoding minimieren sich diese "Blocking" Artefakte, die man sonst bei schnellen Szenenwechseln manchmal zu Gesicht bekommt.


    2.2.1.) H.246 -> H.264:


    Wir codieren den ersten Pass, und geben dabei an, wie das Statistikfile heißen soll:


    Code
    1. x264.exe --preset veryslow --tune film --b-adapt 2 --b-pyramid normal -r 3 -f -2:0 --bitrate 6000 --aq-mode 1 -p 1 --slow-firstpass --stats elephantsdream_cli.stats -t 2 --no-fast-pskip --cqm flat 00003.track_4113.264 -o elephantsdream_1stpass.264


    Wenn der erste Pass abgeschlossen ist, wird der zweite und finale in unserem Fall wie folgt gestartet (hier kann man auch noch die Bitrate anhand der Dateigröße des Files "elephantsdream_1stpass.264" etwas nach oben oder unten korrigieren, um sich so näher an die gewünschte Zielgröße anzunähern):


    Code
    1. x264.exe --preset veryslow --tune film --b-adapt 2 --b-pyramid normal -r 3 -f -2:0 --bitrate 6000 --aq-mode 1 -p 2 --stats elephantsdream_cli.stats -t 2 --no-fast-pskip --cqm flat 00003.track_4113.264 -o elephantsdream_final.264


    Als Beispiel würde der Output bei genau diesen Einstellungen und Dateien dann in etwa so aussehen:


    Code
    1. D:\0_ADVDWORKDIR\x264demo>x264.exe --preset veryslow --tune film --b-adapt 2 --b-pyramid normal -r 3 -f -2:0 --bitrate 6000 --aq-mode 1 -p 1 --slow-firstpass --stats elephantsdream_cli.stats -t 2 --no-fast-pskip --cqm flat 00003.track_4113.264 -o elephantsdream_1stpass.264ffms [error]: could not create indexlavf [info]: 1920x1080p 1:1 @ 24/1 fps (cfr)x264 [info]: using SAR=1/1x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2x264 [info]: profile High, level 4.0x264 [info]: frame I:104 Avg QP:15.03 size:239015x264 [info]: frame P:4965 Avg QP:19.34 size: 49953x264 [info]: frame B:10622 Avg QP:24.01 size: 16618x264 [info]: consecutive B-frames: 8.0% 5.4% 10.6% 59.9% 5.7% 3.6% 1.5% 5.1% 0.2%x264 [info]: mb I I16..4: 24.8% 46.0% 29.2%x264 [info]: mb P I16..4: 5.9% 13.9% 2.1% P16..4: 32.5% 10.8% 3.1% 0.4% 0.3% skip:30.9%x264 [info]: mb B I16..4: 0.5% 1.6% 0.3% B16..8: 34.5% 2.2% 2.0% direct: 4.4% skip:54.5% L0:42.8% L1:47.2% BI:10.0%x264 [info]: final ratefactor: 18.54x264 [info]: 8x8 transform intra:62.4% inter:56.6%x264 [info]: direct mvs spatial:99.9% temporal:0.1%x264 [info]: coded y,uvDC,uvAC intra: 58.9% 47.6% 20.2% inter: 12.0% 8.7% 0.6%x264 [info]: i16 v,h,dc,p: 43% 13% 7% 38%x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 10% 13% 8% 10% 11% 10% 11% 11%x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 9% 7% 9% 13% 13% 11% 11% 11%x264 [info]: Weighted P-Frames: Y:5.7%x264 [info]: ref P L0: 61.7% 16.1% 10.1% 11.6% 0.4%x264 [info]: ref B L0: 86.4% 10.6% 3.1%x264 [info]: ref B L1: 93.4% 6.6%x264 [info]: kb/s:5498.89encoded 15691 frames, 6.25 fps, 5498.89 kb/sD:\0_ADVDWORKDIR\x264demo>x264.exe --preset veryslow --tune film --b-adapt 2 --b-pyramid normal -r 3 -f -2:0 --bitrate 6000 --aq-mode 1 -p 2 --stats elephantsdream_cli.stats -t 2 --no-fast-pskip --cqm flat 00003.track_4113.264 -o elephantsdream_final.264ffms [error]: could not create indexlavf [info]: 1920x1080p 1:1 @ 24/1 fps (cfr)x264 [info]: using SAR=1/1x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2x264 [info]: profile High, level 4.0x264 [info]: frame I:104 Avg QP:14.93 size:240731x264 [info]: frame P:4965 Avg QP:18.97 size: 54641x264 [info]: frame B:10622 Avg QP:23.37 size: 18283x264 [info]: consecutive B-frames: 8.0% 5.4% 10.6% 59.9% 5.7% 3.6% 1.5% 5.1% 0.2%x264 [info]: mb I I16..4: 23.6% 47.1% 29.2%x264 [info]: mb P I16..4: 5.8% 14.5% 2.5% P16..4: 31.6% 11.3% 3.4% 0.4% 0.4% skip:30.1%x264 [info]: mb B I16..4: 0.6% 1.7% 0.4% B16..8: 35.0% 2.4% 2.2% direct: 4.6% skip:53.1% L0:42.9% L1:46.2% BI:11.0%x264 [info]: 8x8 transform intra:62.8% inter:55.5%x264 [info]: direct mvs spatial:94.9% temporal:5.1%x264 [info]: coded y,uvDC,uvAC intra: 61.0% 48.3% 21.1% inter: 12.6% 9.2% 0.8%x264 [info]: i16 v,h,dc,p: 42% 12% 7% 38%x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 10% 13% 8% 10% 11% 10% 11% 11%x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 9% 7% 9% 13% 13% 11% 11% 11%x264 [info]: Weighted P-Frames: Y:5.7%x264 [info]: ref P L0: 63.0% 20.1% 9.7% 7.0% 0.2%x264 [info]: ref B L0: 85.7% 11.8% 2.5%x264 [info]: ref B L1: 93.1% 6.9%x264 [info]: kb/s:6002.34encoded 15691 frames, 7.55 fps, 6002.34 kb/s


    Die Meldung ffms [error]: could not create index kann hier ignoriert werden. ffms (ffmpegsource) verweigert die Indizierung elementarer *.264 Streams, und schlägt fehl. Das übernimmt jedoch dann automatisch lavf (libavcodec) für uns, gleich wie ffms ein Bestandteil der FFDShow Codec Suite.


    x264 nutzt übrigens bis zu 32 Threads mit sehr guter Skalierungseffizienz, also kommen Besitzer von Prozessoren mit mehreren Kernen besonders auf ihre Rechnung. Zudem nutzt x264 auch fortschrittliche Befehlssätze - sofern vorhanden - und setzt damit wie oben zu sehen auch Dinge wie SSSE3 oder SSE4.2 ein!


    2.2.1.) VC-1 -> H.264:


    Sollte man nun aber noch auf seinem in einen *.mkv remultiplexten VC-1 Stream festsitzen, muß man auch nicht verzagen. Sofern man noch keine MKV-fähige Version von x264 hat (so wie ich), läßt sich das mit einem AviSynth Frameserver lösen. Dieser kann das Windows DirectShow Subsystem nutzen, um das VC-1 zu decoden, und liefert dann unkomprimierte Frames an x264 für den Transcode. Man öffne einen beliebigen Texteditor, und erstelle:


    "beliebiges_avs_script.avs"


    In dieses Script schreibe man z.B. (in einem sehr einfachen Fall, mehr brauchts i.d.R. nicht):


    Code
    1. DirectShowSource("<PFAD ZUM MKV FILE MIT VC-1 STREAM>")


    Speichern, fertig. Eine solche Datei kann x264 als Quelle geliefert werden, also so wie oben anstatt "00003.track_4113.264" einfach "beliebiges_avs_script.avs" als Quelle angeben, Rest gleich belassen, und schon encodet unser x264 einen VC-1 Stream in wesentlich braveres H.264!


    Damit ist der Transcoding Prozess abgeschlossen!


    Eine Randnotiz: Auf einem Core i7 920 @ 3.6GHz mit 3.24GHz Uncore Takt brauchte der Videotranscode von "Elephants Dream" für beide Passes mit diesen Einstellungen knapp 2 Stunden. Bei einem Hollywoodfilm kann das schnell in 20-24 Stunden ausarten, obwohl hier keine so schlechte CPU eingesetzt wurde. Dies soll nur aufzeigen, mit welcher Art von Laufzeit zu rechnen ist, wenn man derart gute Einstellungen wählt! Der Transcode der Audiodaten ging im Vergleich dazu in wenigen Minuten von der Hand.



    3.) Die Umwandlung von Blu-Ray Untertiteln


    In diesem Arbeitsschritt verwendete Software:

    • SupRip


    Um Untertitel sinnvoll einbetten zu können, kann man mit der 00003.track_4608.sup Datei nicht viel anfangen. Diese müßte in ein kleineres, textbasiertes Untertitelfile konvertiert werden, ein *.srt! Nur wie konvertiert man Bilddaten zu Textdaten? Mit OCR - Optical Character Recognition, visueller Zeichenerkennung also. Das funktioniert manchmal automatisch. Wobei "manchmal" in Wahrheit eher "so gut wie überhaupt nie" bedeutet.


    Wir starten SupRip, und öffnen die bilddatenbasierte Untertitelspur 00003.track_4608.sup. Hier sieht man, daß der Untertitel angezeigt wird, und daß man einzelne Buchstaben anklicken kann. Im Textfeld darunter kann man dann den Buchstaben eingeben, der dem jeweiligen Teilbild entspricht:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/suprip_1.gif]


    Soll heißen: Man markiert "L", gibt unten den Text "L" ein, drückt OK, danach der nächste Buchstabe usw. Bereits eingegebene Buchstaben merkt sich das Tool. Taucht das "L" Bild also nochmals auf (und Buchstaben tauchen nun einmal vermehrt auf!), dann wird SupRip den Buchstaben also wiedererkennen, zumindest in den meisten Fällen. Funktioniert das nicht so gut, kann man noch ein wenig tunen:

    • Character Similarity Tolerance: Sollte geändert werden, wenn SupRip bereits eingegebene Lettern weiter hinten plötzlich nicht wiedererkennt.
    • Character Split Tolerance: Sollte geändert werden, wenn SupRip z.B. zwei Buchstaben als einen erkannt haben will (nicht so gut).
    • Contrast: Sollte geändert werden, wenn der Kontrast für den Bilderkenner zu schwach ist.


    Im Optimalfall sollte man also alle Buchstaben des Alphabets, alle Satz- und Sonderzeichen nur 1 Mal eingeben müssen, dann sollte SupRip den Rest selbsttätig auf Basis der "gelernten" Lettern erkennen. Da das nicht immer klappt, sitzt man aber letzten Endes dabei, immer ALLE Untertitel des Films komplett durchzuchecken, um sicherzugehen. Danach kann man das ganze unter dem SRT-Reiter als textbasierten *.srt Untertitel ablegen.


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/suprip_2.gif]


    Zur Not lassen sich hier auch noch letzte Korrekturen manuell vornehmen. In unserem Fall verzichte ich darauf, die Untertitel manuell durchzuarbeiten, und speichere einfach was wir haben als "english_subs.srt".


    Die Konvertierung der Untertitel ist damit abgeschlossen.



    4.) Multiplexing - Der Bau des abschließenden MKV Containers


    In diesem Arbeitsschritt verwendete Software:

    • MKVtoolnix / mkvmerge


    Wenn wir unser codiertes *.264, den *.ac3 Sound sowie ggf. die *.srt Untertitel herumliegen haben, muß das ganze nur noch zusammengestoppelt werden. Dazu setzen wir MKVtoolnix ein, bzw. die mkvmerge Komponente namens "mmg.exe".


    Wir öffnen nun unseren ersten Stream, die Videodaten, nun begrüßt uns MKVtoolnix auch schon harsch:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/mkvtoolnix_1.gif]


    Unser elementarer H.264 Stream weist keine Metadaten auf! Dies ist kritisch, da für die Sicherstellung der Audio+Video Synchronisation eine Frameratenangabe erforderlich ist!


    Glücklicherweise haben wir uns diesen Wert ganz am Anfang bei der Arbeit mit tsMuxeR notiert! :)


    Wir fügen also noch Audio und Untertitel ein, und machen uns dann an die Konfiguration, hier wird der von tsMuxeR notierte Frameratenwert für's Video eingetragen, im Tab "Formatspezifische Optionen", der Videotrack muß hierzu in der Liste markiert sein:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/mkvtoolnix_2.gif]


    Wenn man die MKV Datei z.B. auf Standalone Playern für Fernseher abspielen möchte, kann es viel bringen, noch weitere Metadaten z.B. für die Audiostreams einzutragen, wie etwa die Sprache eines Streams, oder ob ein Stream der Standardstream sein soll oder nicht:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/mkvtoolnix_3.gif]


    Nach Überprüfung aller Eingaben, und Sicherstellung des Vorhandenseins aller wichtigen Metadaten braucht man nur mehr "Muxen starten" zu drücken. Nach einem Haufen I/O ist das MKV nun endgültig fertig, und kann im Mediaplayer der Wahl (ob am PC oder auch nicht) getestet werden!


    Ende gut, alles gut, solange nichts explodiert ist!


    Und so sollte der Anfang des soeben neu gepressten Films aussehen:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/elephantsdream-1.jpg]


    Und ca. so die Nähe vom Ende:


    [IMG:http://www.xin.at/thrawn/pics/hw/voodooalert/bd/elephantsdream-2.jpg]


    :)

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700 (defekt)

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be!

    2 Mal editiert, zuletzt von GrandAdmiralThrawn ()

  • Ich hoffe der eine oder andere kann davon profitieren. :) Es gibt vielleicht mittlerweile auch einfachere Wege, eine Blu-Ray in ein MKV zu verwandeln, aber der hier gezeigte erlaubt die (meines Wissens nach) maximale Kontrolle und den maximalen Einfluß des Users auf jeden einzelnen Arbeitsschritt, sowie auch die maximal mögliche Qualität im Endprodukt.


    Der Ablauf läßt sich z.B. sehr einfach modifizieren, falls jemand lieber DVD5 als Zielgröße möchte, oder lieber DTS Sound statt AC3 usw..


    Ich war mir nicht ganz sicher, ob der Brocken nicht etwas zu unübersichtlich ist, also ich bin für jede Form von konstruktiver Kritik offen. :D


    Danke für die Blumen. :D

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700 (defekt)

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be!

    Einmal editiert, zuletzt von GrandAdmiralThrawn ()

  • Wow respect und DANKE für deine Arbeit! Ich werd hier sicherlich das ein oder andere mal reinschaun, weil sowas hab ich gesucht!


    5 Sterne!

    Voodoo5-PC: Athlon XP 2600+, Gigabyte GA-7VRXP, Voodoo 5 5500 AGP, 1,5GB RAM


    Realität ist eine Illusion, die durch Alkoholmangel hervorgerufen wird.
    MainPC: AMD Ryzen 7 2700X, 32 GB DDR4-2666 @ 3066 MHz, nVidia GeForce GTX 1080 TI, Samsung 960 Evo NVMe SSD, Thermaltake Smart DPS 700W ( Stand 15.08.18 )

  • Ajo, für Fragen ist natürlich jederzeit Platz, egal welcher Natur sie sein mögen (bis auf Kopierschutz-bezogen, das nicht!). Ich habe mich damit zurückgehalten, die Grundlagen alle im Guide darzulegen, weil es sonst einfach zu monströs geworden wäre alles zusammen, liest ja kein Schwein mehr dann, so lang wie der Mist jetzt schon is! ;) Das kann man aber noch einzeln abarbeiten, falls jemand irgendwo hängt oder sonstwie mehr wissen möchte.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700 (defekt)

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be!

  • So, um die Skalierung von x264 im Bereich Multithreading zu demonstrieren folgt hier noch ein kurzer Leistungsvergleich zwischen meiner alten CPU, einem Core i7 920, und der neuen, einem Core i7 980X. Specs wie folgt:


    Core i7 920:

    • Core: 3600MHz * 4 (8MB L3)
    • Uncore: 3240MHz
    • QPI: 6480MT/s
    • RAM: DDR-III/1440

    Core i7 980X:

    • Core: 4004MHz * 6 (12MB L3)
    • Uncore: 3276MHz
    • QPI: 6552MT/s
    • RAM: DDR-III/1456


    Getestet wurde wieder Elephants Dream im Videotranscoding, sowohl für Pass 1 wie auch für Pass 2 (Benchmarks im Netz zeigen bei x264, daß Pass 2 üblicherweise mehr vom Threadwahnsinn profitiert). Encodet wurde mit den im Guide beschriebenen Einstellungen bei 10MBit/s für beide Passes.


    Resultate:


    Core i7 920:
    1st Pass: 5.14fps
    2nd Pass: 5.67fps


    Core i7 980X:
    1st Pass: 7.30fps (+42%)
    2nd Pass: 9.23fps (+63%)


    Man sieht also, Blu-Ray Transcoding ist eine Applikation, bei der sich nicht nur Takt, sondern auch die Anzahl der Kerne gut auszahlen können, 6 statt 4 mit +400MHz resultieren hier in einem Schnitt von +52.5% gegenüber dem Quadcore!


    Die Last visualisiert:
    [IMG:http://www.xin.at/thrawn/pics/hw/corei7980x/i7980x_taskmgr.png]

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700 (defekt)

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be!

    Einmal editiert, zuletzt von GrandAdmiralThrawn ()

  • "View / Show Kernel Times" => Das zeigt die die Anteile des Kernels an (die Spikes am Anfang sind wohl irgendein Bug, die tauchen immer auf). So siehst, wieviel der CPU Last im Kernelspace (Treiber, I/O usw.) verbraucht wurde, das wird eben als roter Graph angezeigt.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700 (defekt)

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be!