Benutzer-Werkzeuge

Webseiten-Werkzeuge


filme_transkodieren

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
filme_transkodieren [2016-04-12 22:50:01] – Externe Bearbeitung 127.0.0.1filme_transkodieren [2024-04-19 21:09:31] (aktuell) – [DivX-Beispiel 1] manfred
Zeile 1: Zeile 1:
 +====== Filme transkodieren ======
 +
 +Hier geht es nur um eine komplette Transkodierung von Filmen, die einzelnen Transkodierungen von purem Audio zum Beispiel, wird unter [[Audio]] behandelt.
 +
 +
 +===== Videobearbeitung =====
 +
 +  * [[DVDs kopieren]]
 +  * [[Blurays kopieren]]
 +
 +
 +==== Infos aus einer Filmdatei auslesen ====
 +
 +
 +=== mit FFmpeg ===
 +
 +Das hier ist das einfachste.
 +
 +  # ffmpeg -i Film.mkv
 +
 +
 +=== mit MPlayer ===
 +
 +Das hier ist das ausführlichste.
 +
 +  # mplayer Film.mkv -vo null -ao null -identify -frames 0 -nocache
 +
 +
 +=== mit mkvinfo ===
 +
 +Mit //mkvinfo// funktioniert das natürlich nur bei MKV-Dateien!
 +
 +  # mkvinfo Film.mkv
 +
 +
 +==== Videospur unverändert extrahieren ====
 +
 +  # mencoder Film.vob -nosound -ovc copy -o Film_stumm.avi
 +oder
 +  # mplayer Film.vob -dumpstream -dumpfile Film_stumm.avi
 +
 +
 +==== ID's der Audiospuren ermitteln ====
 +  # mplayer Film.mpg -vo null -ao null -identify -frames 0 -nocache | fgrep 'ID_AUDIO_ID' | awk -F'=' '{print $NF}' | sort -n
 +
 +==== Audiospur unverändert dumpen (-dumpaudio) ====
 +  # ffmpeg -i Film.mpg -vn -acodec copy -y Film_tonspur
 +  # mplayer Film.vob -aid 128 -vo null -dumpaudio -dumpfile Film_tonspur
 +
 +
 +==== Audio- und Videospur aus einer MKV-Datei unverändert extrahieren ====
 +
 +  # mkvextract tracks Film.mkv 1:Film_stumm.mkv 2:Film_tonspur
 +
 +
 +==== Audiospur als unkomprimiertes WAVE speichern ====
 +  # mplayer -vo null -ao pcm:waveheader:file=Film_tonspur.wav Film.vob
 +
 +
 +==== Spielfilmlänge ermitteln ====
 +
 +== die zuverlässigste und langsamste Methode ==
 +Ausgabe in Sekunden:
 +  # mplayer FILM.mkv -forceidx -speed 100 -mc 0 -ao null -vo null 2>/dev/null | egrep 'A: |V: '
 +
 +== schnell und recht unzuverlässig ==
 +Ausgabe in Sekunden:
 +  # mplayer FILM.mkv -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH
 +
 +== schnell mit FFmpeg ==
 +  # ffmpeg -i FILM.mkv 2>&1 | fgrep 'Duration: '
 +
 +Ausgabe in Sekunden:
 +  # ffmpeg -i FILM.mkv 2>&1 | fgrep 'Duration: ' | tr -s '\t' ' ' | tr -s ' ' '\n' | tr -d ',' | egrep '[0-9]:[0-9][0-9]:[0-9]' | awk -F':' '{print ($1*60*60)+($2*60)+$3}'
 +
 +
 +==== Audiospur und Videospur muxen ====
 +
 +  # mkvmerge --default-language ger --aspect-ratio 1:16:9 -o neuer_Film.mkv --compression 1:none Film_stumm.avi --compression 1:none Film_tonspur
 +
 +
 +==== Film mit unterschiedlich langen Audio- und Videospuren korrigieren ====
 +
 +Manchmal kommt es beim Film transcodieren vor, dass die Videospur sich in der Länge ändert.
 +Das hängt mit den verschiedenen Übertragungs- und Darstellungstechniken zusammen, die es gibt.
 +
 +Man könnte dann, sehr aufwendig, die Videospur in der Länge korrigieren
 +aber das ist sehr kompliziert und lässt sich oft nicht wieder rückgängig machen.
 +
 +Hier zeige ich jedoch zwei elegantere Methoden.
 +
 +
 +=== als erstes muss die Laufzeitdifferenz erstmal ermittelt werden ===
 +
 +Länge der Audiospur ermitteln:
 +  # mplayer Film_tonspur -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH
 +  ID_LENGTH=596.00
 +
 +Länge der Videospur ermitteln:
 +  # mplayer Film_stumm.mkv -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH
 +  ID_LENGTH=536.79
 +
 +
 +=== durch Container-Parameter synchronisieren ===
 +
 +Der Matroska-Container bietet hierfür sehr gute Unterstützung.
 +
 +Audio- und Videospur muxen:
 +  # mkvmerge --default-language ger --aspect-ratio 1:16:9 -o Film_out_of_sync.mkv --compression 1:none Film_stumm.mkv --compression 1:none Film_tonspur
 +
 +Track ID der Audiospur ermitteln (in diesem Fall "2"):
 +  # mkvmerge --identify Film_out_of_sync.mkv
 +  File 'Film_out_of_sync.mkv': container: Matroska
 +  Track ID 1: video (V_MPEG4/ISO/AVC)
 +  Track ID 2: audio (A_AAC)
 +
 +synchronisieren:
 +  # mkvmerge -y 2:0,596.00/536.79 -o Film_in_sync.mkv --compression 1:none --compression 2:none Film_out_of_sync.mkv
 +
 +
 +=== durch Längenanpassung der Audiospur synchronisieren ===
 +
 +Andere Container-Formate haben nicht die besonderen Fähigkeiten des Matroska-Container-Formates
 +und selbst das Matroska-Container-Format kann nicht überall unter Berücksichtigung all seiner
 +Fähigkeiten abgespielt werden.
 +
 +Und so ist es immer noch am sichersten, wenn man beide Spuren auf gleiche Länge bringt.
 +
 +Längendifferenz in Prozent ermitteln:
 +  # echo "596.00 536.79"|awk '{print (($1*100)/$2)-100}'
 +  11.0304
 +
 +Audiospur in der Länge anpassen:
 +  # soundstretch Film_tonspur.wav Film_tonspur_plus11proz.wav -tempo=+11.0304
 +
 +Audiospur transcodieren:
 +  # faac --tns -q 160 -w -o Film_tonspur_plus11proz.m4a Film_tonspur_plus11proz.wav
 +
 +Video- und Audiospur zum Film zusammenfühgen:
 +  # mkvmerge --default-language ger --aspect-ratio 1:1.77778 -o Film_synchron.mkv --compression 1:none Film_stumm.mkv --compression 1:none Film_tonspur_plus11proz.m4a
 +
 +
 +==== Bildwiederholrate ändern ====
 +
 +=== 24->25 bzw. 23.976->25 ===
 +
 +mit DVD-Standardeinstellungen:
 +  # mencoder -of mpeg -mpegopts format=dvd:film2pal
 +
 +mit den max. vbitrate für MPEG-2:
 +  # mencoder Film.mkv -noaudio -ovc lavc -lavcopts vcodec=mpeg2video:autoaspect:trell=yes:mbd=2:vbitrate=24000000 -of mpeg -mpegopts format=mpeg2:muxrate=12000000:film2pal -o Film_PAL_stumm.mpg
 +
 +Leider funktionieren diese Optionen nur mit dem MPEG2-Codec und MPEG2-Container,
 +was die Auswahl recht stark einschränkt.
 +Aus dem Grund sollte man es nur als "Zwischenschritt" ansehen.
 +
 +Bei dieser Methode behält der Film seine Originallänge!
 +
 +
 +=== 30->25 ===
 +
 +  # mencoder -fps 30 -ofps 25 -vf filmdint=io=6:5,harddup
 +
 +=== 24p->30i bzw. 23.976p->29.97i ===
 +
 +== alt ==
 +  # mencoder -fps 30000/1001 -ofps 30000/1001 -vf telecine,harddup
 +
 +== neu ==
 +  # mencoder -of mpeg -mpegopts format=dvd:telecine
 +
 +Das ausgangsmaterial muss durchgehend "progressiv" sein,
 +sonst bricht "telecine" ab.
 +
 +==== schwarze Balken oben und unten abschneiden ====
 +
 +Als erstes muss man sich Richtwerte besorgen:
 +
 +  # mplayer Film.vob -vf cropdetect
 +  [CROP] Crop area: X: 7..709  Y: 2..479  (-vf crop=688:464:16:10)
 +
 +In diesem Beispiel schlägt MPlayer die Parameter "-vf crop=688:464:16:10" vor.
 +Nach einigen Versuchen, haben sich aber bei diesem Video (selbst mit dem PC von DVB-T in NTSC 720x480 aufgenommen)
 +die Parameter "-vf crop=704:340:06:68" als ideal herausgestellt.
 +
 +Rechnerisch, wenn der Film genau in der Mitte des Bildes wäre, hätte es "-vf crop=704:340:08:70" sein müssen.
 +
 +Meistens ist bei unseren PAL-Sendungen aber "704:432:08:72" zu verwenden.
 +
 +Das Transkodier-Kommando kann zum Beispiel so aussehen:
 +
 +  # mencoder -mc 0 -forceidx -aspect 16:9 -aid 128 alter_Film.mpg -ovc x264 -x264encopts crf=25:b_adapt=2:direct=auto:me=tesa:no_fast_pskip:merange=24:partitions=all:ref=16:subme=10:trellis=2:rc_lookahead=60:deblock=-1/-1:psy_rd=1.0/0.15:weightp=0:bframes=3:vbv_maxrate=40000:vbv_bufsize=30000:level=4.1:keyint=24:b_pyramid=strict:slices=4:aud:colorprim=bt709:transfer=bt709:colormatrix=bt709:sar=1/1:threads=1:nr=100 -vf softskip,harddup,crop=704:432:08:72 -oac faac -faacopts mpeg=4:object=2:raw:br=192:tns -channels 2 -of lavf -lavfopts format=matroska -o Film_mencoder.mkv
 +
 +Da der MKV-Muxer bei MEncoder defekt ist muss das hier noch nachgeschoben werden:
 +
 +  # mkvmerge --aspect-ratio 1:1.7778 --default-language ger -o neuer_Film.mkv Film_mencoder.mkv
 +
 +
 +==== Rauschunterdrückung ====
 +
 +Hat man den gleichen Film zwei mal, einmal in sauberer Form (zum Beispiel als DVD) und einmal in verrauschter Form (zum Beispiel aus dem Fernsehen aufgenommen), dann ist nach dem transcodieren (zum Beispiel von MPEG-2 nach AVC) die verrauschte Version deutlich größer. Verwendet man dann eine Rauschunterdrückungsoption (beim x264 ist das "nr") mit einem geeigneten Wert (den muss man ausprobieren oder schätzen), dann wird nicht nur das Bild besser, sondern auch die Datei kleiner!
 +
 +
 +===== MPEG-4 Part 2 / ASP =====
 +
 +In den **ASP**-Bereich fallen in erster Linie die Codec's //DivX 3// bis //DivX 6// sowie der freie Abkömmling //Xvid//.
 +
 +Hier werde ich zwei Beispiel-Scripte vorstellen.
 +
 +Im ersten Beispiel wird keine externen Bibliotheken benötigen,
 +sondern alles (DivX-kompatibler Video-Codec und AC3-kompatibler Audio-Codec) wird mit Hilfe der "libavc" des FFmpeg-Team's bewerkstelligen.
 +
 +Die Filme, die mit ihm erstellt werden, sollten mit einem //DivX 5//-kompatibelen Player abgespielt werden können.
 +
 +Die Bildqualität des DivX-kompatiblen Codecs aus der "libavc" des FFmpeg-Team's liefert die bessere Qualität gegenüber dem freien //Xvid//-Codec, allerdings ist die Rechtliche Lage dieser Bibliothek umstritten und soll gegen ein paar DivX-Patente verstoßen.
 +
 +Aus diesem Grund stelle ich auch noch ein zweites Beispiel vor,
 +bei dem der Video-Encoder //Xvid// (DivX-kompatibel) und der Audio-Encoder //LAME// (MP3) zum Einsatz kommen.
 +
 +Die erzielten Dateigrößen liegen mit beiden Beispielen bei ca. 2/3 der Original VOB-Datei von einer DVD.
 +
 +Das Script aus "Beispiel 2" war Jahre lang mein Archivierungs-Script.
 +
 +Jetzt setze ich auf das Script im "AVC-Beispiel".
 +
 +
 +==== DivX-Beispiel 1 ====
 +
 +In diesem Script werden nur die DivX5-kompatiblen Codecs aus der „libavc“-Bibliothek des FFmpeg-Team's verwendet, damit dieses Script mit jeder MEncoderinstallation funktioniert und auf Abhängigkeiten nicht angewiesen ist.
 +
 +**ASP@L5 (HD):**
 +  > ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i ALTERFILM.mpg -c:v mpeg4 -vtag DX50 -profile:v 15 -level 5 -b:v 8192k -g 300 -c:a ac3 -f avi -y NEUERFILM.avi
 +
 +**ASP@L4 (SD):**
 +  > ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i ALTERFILM.mpg -c:v mpeg4 -vtag DX50 -profile:v 15 -level 4 -b:v 3072k -g 300 -c:a ac3 -f avi -y NEUERFILM.avi
 +
 +ASP (SD):
 +  > mencoder -mc 0 -forceidx -oac lavc -lavcopts acodec=ac3:abitrate=384 -ovc lavc -lavcopts vcodec=mpeg4:autoaspect:trell=yes:mbd=2:v4mv=yes:qpel:vbitrate=2500 -o NEUERFILM.avi ALTERFILM.mpg
 +
 +
 +==== Xvid-Beispiel 2 ====
 +
 +In diesem Script werden nur Codec's aus extern einzubindende Bibliotheken eingesetzt um Lizenzprobleme mit dem Video-Codec zu umgehen und eine bessere Audiokompression zu erreichen.
 +Leider ist die Bildqualität nicht ganz so gut wie die, die von dem Script aus "Beispiel 1".
 +
 +  # mencoder -mc 0 -forceidx -oac mp3lame -lameopts q=0:aq=0:br=224 -channels 2 -ovc xvid -vf pp=tn:${RAUSCH}/ci/hb/vb/dr/al,harddup -xvidencopts me_quality=6:trellis:hq_ac:vhq=4:autoaspect:bitrate=2500 -o NEUERFILM.avi ALTERFILM.mpg
 +
 +
 +==== ASP-Beispiel 3 ====
 +
 +Zu guter letzt, werden die besten Eigenschaften aus den obigen beiden Scripten in diesem vereinigt:
 +  - DivX5-Video-Codec aus der "lavc" für bessere Bildqualität
 +  - MP3-Audio-Codec von "LAME" für bessere Audiokompression
 +
 +  # mencoder -mc 0 -forceidx -oac mp3lame -lameopts q=0:aq=0:br=224 -channels 2 -ovc lavc -lavcopts vcodec=mpeg4:autoaspect:trell=yes:mbd=2:v4mv=yes:qpel:vbitrate=2500 -o NEUERFILM.avi ALTERFILM.mpg
 +
 +
 +==== XORO HSD 415 ====
 +
 +  * [[http://www.wiki.csoft.at/index.php/Xoro_DVD-Player|XORO HSD 415 DVD/CD/MP3-Player]]
 +
 +  # mencoder -oac lavc -ovc lavc -lavcopts codec=mpeg4:vbitrate=1400:acodec=mp3:abitrate=128:aspect=4/3:vhq:keyint=15 -vf scale=720:576 -ffourcc DX50 -ofps 25 -o ${AUSGABEDATEI} ${QUELLVIDEO}
 +
 +  # mencoder -mc 0 -forceidx -oac mp3lame -lameopts abr:br=128 -ovc lavc -lavcopts vcodec=mpeg4:threads=1:vbitrate=1400:autoaspect:mbd=2:v4mv:trell:cbp:mv0:mv0_threshold=0:qprd:umv:nr=0:lumi_mask=0.1:dark_mask=0.1:p_mask=0.1 -vf-pre pp=tn:0/ci/hb/vb/dr/al,harddup,scale=720:-2,expand=:576:::1,crop=720:576 -ffourcc DX50 -o ${AUSGABEDATEI} ${QUELLVIDEO}
 +
 +
 +===== MPEG-4 Part 10 / AVC =====
 +
 +Der AVC-Codec ist der //H.264// und der freie //x264//.
 +
 +In meinem Beispiele wird die Audio- bzw. Video-Spur nur dann transcodiert, wenn sie
 +  - nicht schon im //divx//-, //xvid//-, //H.264//- oder //x264//-Codec vorliegt, denn die genannten ASP-Codecs sind gut genug und die Bildqualität wird vom unnötigen transcodieren nicht besser;
 +  - nicht schon im //ac-3//-, //mp3//- oder //aac//-Codec vorliegt, denn die genannten ASP-Codecs sind gut genug und die Tonqualität wird vom unnötigen transcodieren nicht besser;
 +
 +Als Zielformate wird hier der freien Video-Encoder //x264// und der freie Audio-Encoder //faac// sowie das freien Container-Format //Matroska// verwendet. Diese drei werden üblicherweise nur vom //DivX 7//-Standard vereint.
 +
 +Alle anderen Standard's (z.B: Flash-9 mit //.flv// und MPEG-4 Part 10 mit //.mp4//) verwenden jeweils eigene Container-Formate.
 +
 +Da es aber verschiedenen Kombinationen der verschiedenen Audio- und Video-Codec's gibt,
 +wird dieses Script nicht in jedem Fall eine //DivX 7//-kompatible Datei erstellen
 +aber in jedem Fall eine MPEG4-kompatible (Part 2 / Part 10) Datei.
 +
 +Ich verwende den //MEncoder// am liebsten,
 +weil der FFmpeg ein Memory-Leak hat und man bei //getrennter// Bearbeitung von Audio- und Video-Spur
 +manchmal beide auseinander laufen können und man dann mühevoll von Hand nacharbeiten und Justieren muss.
 +
 +Diese Probleme kann man mit dem //mencoder -mc 0// prima umgehen.
 +
 +Das alles habe ich aber auch schon auf der Seite [[VideoSoftware]] beschrieben.
 +
 +
 +==== AVC ====
 +
 +Der erste Blu-Ray-kompatible Film wurde vom x264-Team mit "crf=16" erstellt,
 +jetzt soll "crf=20" Standard sein.
 +
 +"crf=0" ist Verlustfrei.
 +
 +Das x264-Team empfiehlt einen Wert zwischen "20" und "25".
 +
 +Meine persönlichen Tests mit dem Film "Suspect Zero" (aus dem Fernseher im PAL-Format auf DVD aufgenommen, nach dem die Werbung rausgeschnitten war, hatte die VOB-Datei noch eine Größe von knapp 3GB),
 +zeigten folgende Dateigrößen bei entsprechenden Einstellungen:
 +  * "crf=16" komprimiert eine DVD auf ca. **90%** der Originalgröße runter
 +  * "crf=20" komprimiert eine DVD auf ca. **80%** der Originalgröße runter
 +  * "crf=21" komprimiert eine DVD auf ca. **70%** der Originalgröße runter
 +  * "crf=22" komprimiert eine DVD auf ca. **60%** der Originalgröße runter
 +  * "crf=23" komprimiert eine DVD auf ca. **50%** der Originalgröße runter
 +  * "crf=24" komprimiert eine DVD auf ca. **40%** der Originalgröße runter
 +  * "crf=25" komprimiert eine DVD auf ca. **30%** der Originalgröße runter
 +Die restlichen Einstellungen sind auf beste Qualität gesetzt.
 +
 +Die Bildqualität bei vergrößerter Darstellung war mit "crf=16" bestens.
 +Bei "crf=20" gab es vereinzelte sichtbare Schwächen, die aber nur auffallen,
 +wenn man gezielt darauf achtet.
 +
 +Mit der Einstellung "crf=25" sind, bei vergrößerter Darstellung,
 +deutliche Veränderungen im Bild sichtbar, die aber bei normaler Betrachtung
 +auf dem Fernseher nicht bemerkt werden.
 +
 +Weitere Tests mit kleineren Filmstückchen haben folgende grobe Richtwerte ergeben:
 +  * "crf=0" ergibt eine Dateigröße von ca. **1100%** (ca. 11-mal so groß),
 +  * "crf=5" ergibt eine Dateigröße von ca. **470%** (ca. 4,7-mal so groß) und
 +  * "crf=10" ergibt eine Dateigröße von ca. **330%** (ca. 3,3-mal so groß)
 +gegenüber einer MPEG2-Datei, die mit einer Datenrate von ca. 4000-4500 kBps erstellt wurde.
 +Die Bildqualität entspricht weitestgehend dem Original.
 +
 +Die Oben genannten Werte, sind als grobe Richtwerte zu sehen und können sehr stark schwanken,
 +sie hängen sehr stark vom bearbeiteten Bildmaterial ab!
 +
 +Meine Tests haben am Ende gezeigt, das "crf>23" (bei vergrößerter Wiedergabe) sichtbare Qualitätseinschränkungen zur Folge haben und "crf<22" (für meinen Geschmack) zu große Videodateien erzeugen.
 +
 +Um die Dateigröße in einem vernünftigen Rahmen zu halten, kann man ein kleineres Profil für das Zielformat festlegen.
 +Im Einzelfall kann man auch die Werte für "vbv-maxrate" verringern (nicht empfohlen, da es nicht mehr Profil-konform ist).
 +
 +Man sollte dabei aber unbedingt darauf achten, das der Wert für "vbv-maxrate" in dem Profil (bzw. der von Hand verringerte Wert) mindestens so groß ist,
 +das 7 Bit Datenrate je Pixel vorhanden sind. Sonst ist mit einer (bei vergrößerter Wiedergabe) sichtbaren Qualitätsverschlechterung zu rechnen.
 +
 +Die entsprechenden Werte der Profile kann man aus dieser Tabelle ablesen [[http://forum.doom9.org/showthread.php?t=154533]]:
 +
 +^Anzahl der Bildzeilen (Video-Format) ^Bilder je Sekunde ^Bildaufbau ^Profil-Level ^BD - VBV-MaxRate ^DVD - VBV-MaxRate ^BD - VBV-BufferSize ^DVD - VBV-BufferSize ^Max. Ref-Frames ^Slices ^
 +^1080p | 23.976 | Progressive | 4.1 | 40000 | 15000 | 30000 | 15000 | 4 | 4 |
 +^1080p | 24.000 | Progressive | 4.1 | 40000 | 15000 | 30000 | 15000 | 4 | 4 |
 +^1080i | 25.000 | Interlace | 4.1 | 40000 | 15000 | 30000 | 15000 | 4 | 4 |
 +^1080i | 29.970 | Interlace | 4.1 | 40000 | 15000 | 30000 | 15000 | 4 | 4 |
 +^1080p | 23.976 | Progressive | 4.0 | 24000 | 15000 | 30000 | 15000 | 4 | 1 |
 +^1080p | 24.000 | Progressive | 4.0 | 24000 | 15000 | 30000 | 15000 | 4 | 1 |
 +^1080i | 25.000 | Interlace | 4.0 | 24000 | 15000 | 30000 | 15000 | 4 | 1 |
 +^1080i | 29.970 | Interlace | 4.0 | 24000 | 15000 | 30000 | 15000 | 4 | 1 |
 +^ | | | | | | | | | |
 +^720p | 23.976 | Progressive | 4.1 | 40000 | 15000 | 30000 | 15000 | 6 | 4 |
 +^720p | 24.000 | Progressive | 4.1 | 40000 | 15000 | 30000 | 15000 | 6 | 4 |
 +^720p | 25.000 | Progressive | 4.1 | 40000 | 15000 | 30000 | 15000 | 6 | 4 |
 +^720p | 29.970 | Progressive | 4.1 | 40000 | 15000 | 30000 | 15000 | 6 | 4 |
 +^720p | 23.976 | Progressive | 4.0 | 24000 | 15000 | 30000 | 15000 | 6 | 1 |
 +^720p | 24.000 | Progressive | 4.0 | 24000 | 15000 | 30000 | 15000 | 6 | 1 |
 +^720p | 25.000 | Progressive | 4.0 | 24000 | 15000 | 30000 | 15000 | 6 | 1 |
 +^720p | 29.970 | Progressive | 4.0 | 24000 | 15000 | 30000 | 15000 | 6 | 1 |
 +^ | | | | | | | | | |
 +^576i | 25.000 | Interlace | 4.1 | 40000 | 15000 | 30000 | 15000 | 6 | 4 |
 +^576i | 25.000 | Interlace | 4.0 | 24000 | 15000 | 24000 | 15000 | 6 | 1 |
 +^576i | 25.000 | Interlace | 3.2 | 24000 | 15000 | 24000 | 15000 | 6 | 1 |
 +^576i | 25.000 | Interlace | 3.1 | 16800 | 15000 | 16800 | 15000 | 6 | 1 |
 +^576i | 25.000 | Interlace | 3.0 | 12000 | 12000 | 12000 | 12000 | 5 | 1 |
 +^ | | | | | | | | | |
 +^480i | 29.970 | Interlace | 4.1 | 40000 | 15000 | 30000 | 15000 | 6 | 4 |
 +^480i | 29.970 | Interlace | 4.0 | 24000 | 15000 | 24000 | 15000 | 6 | 1 |
 +^480i | 29.970 | Interlace | 3.2 | 24000 | 15000 | 24000 | 15000 | 6 | 1 |
 +^480i | 29.970 | Interlace | 3.1 | 16800 | 15000 | 16800 | 15000 | 6 | 1 |
 +^480i | 29.970 | Interlace | 3.0 | 12000 | 12000 | 12000 | 12000 | 6 | 1 |
 +^ | | | | | | | | | |
 +
 +Der AVC-Standard ist da etwas lockerer: [[http://forum.doom9.org/showthread.php?t=101345]]
 +
 +Zum Beispiel sollte man nicht versuchen ein Video mit einer Auflösung von
 +1920x1080 Bildpunkten mit dem Profil-Level //3.0// zu transcodieren.
 +Das liefert auf keinen Fall ein gutes Ergebnis, allerdings eine sehr kleine Datei.
 +
 +Ich transcodiere meine Videos mit dem //DVD-Profil//, //Level 3.0// sowie //CRF=23// und bekomme damit eine
 +Datei, die nur ca. 40% der Originalen MPEG2-Dateigröße hat ohne sichtbare Qualitätsverschlechterung.
 +
 +Bei einer Transcodierung ins Xvid-Format, mit einer Bitrate von 2500kBps,
 +muss ich immer eine Qualitätsverschlechterung bei einer Dateigröße von ca. 60%
 +der Originalen MPEG2-Dateigröße in Kauf nehmen.
 +
 +Damit hat der //x264// bei mir seine Qualitäten schon bewiesen.
 +
 +
 +=== einen Film ins AVC-Format transcodieren ===
 +
 +  # 1920x1080 / Blu-Ray / Level 4.1 (großes HD-Profil)
 +  #X264OPTIONEN="--threads 1 --b-adapt 2 --bframes 8 --direct auto --me tesa --merange 24 --partitions all --ref 4 --subme 10 --trellis 2 --rc-lookahead 60 --deblock -1:-1 --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 40000 --vbv-bufsize 30000 --level 4.1 --keyint 24 --b-pyramid strict --slices 4 --aud --colorprim "bt709" --transfer "bt709" --colormatrix "bt709" --sar 1:1"
 +  
 +  # 1280x720 (720p) / Blu-Ray / Level 4.0 (kleines HD-Profil)
 +  #X264OPTIONEN="--threads 1 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 6 --subme 10 --trellis 2 --deblock -1:-1 --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 24000 --vbv-bufsize 24000 --level 4.0 --keyint 24 --b-pyramid strict --slices 1 --aud --colorprim bt709 --transfer bt709 --colormatrix bt709 --sar 1:1"
 +  
 +  # 1280x720 (720p) / DVD / Level 4.0 (kleinstes HD-Profil)
 +  #X264OPTIONEN="--threads 1 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 6 --subme 10 --trellis 2 --deblock -1:-1 --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 15000 --vbv-bufsize 15000 --level 4.0 --keyint 24 --b-pyramid strict --slices 1 --aud --colorprim bt709 --transfer bt709 --colormatrix bt709 --sar 1:1"
 +  
 +  # 720x576 / DVD / Level 3.0 (kleinstes SD-Profil: halbiert den Platzbedarf einer Standard-DVD, ohne Qualitätsverlust)
 +  X264OPTIONEN="--threads 1 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 5 --subme 10 --trellis 2 --deblock -1:-1 --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 12000 --vbv-bufsize 12000 --level 3.0 --keyint 24 --b-pyramid strict --slices 1 --aud --colorprim bt709 --transfer bt709 --colormatrix bt709 --sar 1:1"
 +  
 +  # mplayer Film.vob -aid 128 -vo null -ao pcm:waveheader:file=Film_audiospur.wav
 +  
 +  # faac --tns -q 160 -w -o Film_audiospur.m4a Film_audiospur.wav
 +  
 +  # mencoder Film.vob -forceidx -ovc raw -really-quiet -noskip -lavcopts threads=1 -lavdopts threads=1 -demuxer lavf -vfm ffmpeg -vf pp=ci/hb/vb/dr/al,crop=704:432:08:72,scale=720:432,softskip,harddup,format=i420 -oac copy -of rawvideo -rawvideo fps=25 -o - | x264 - --input-res 720:432 --crf 23 ${X264OPTIONEN} --nr 0 -o Film_videospur.mkv
 +  
 +  # mkvmerge --default-language ger --aspect-ratio 1:16/9 -o Film.mkv Film_videospur.mkv Film_audiospur.m4a
 +
 +Wenn nötig, kann man Audio- und Videospur noch syncronisieren, sollte aber im Normalfall bereits syncron sein:
 +  VLENGTH="$(mplayer Film_videospur.mkv -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH | awk -F'=' '{print $2}')"
 +  ALENGTH="$(mplayer Film_audiospur.m4a -vo null -ao null -identify -frames 0 -nocache 2>/dev/null | fgrep ID_LENGTH | awk -F'=' '{print $2}')"
 +  # mkvmerge -y 2:0,${VLENGTH}/${ALENGTH} -o Film_syncron.mkv Film.mkv
 +  # mv -f Film_syncron.mkv Film.mkv
 +
 +Jetzt aufräumen:
 +  # rm -f Film_videospur.mkv Film_audiospur.m4a Film_audiospur.wav
 +
 +
 +== AVC-Parameter ermitteln ==
 +
 +Um die nötigen //AVC//-Parameter, zu einer bestimmten Auflösung, zu ermitteln, müsste man sich die RFC's reinziehen...
 +
 +Das ist allerdings nicht mein Fall, deshalb habe ich mir den größten Teil der Infos aus den RFC's mal (verständlich ausgedrückt) wiedergeben lassen
 +und dann damit ein **[[AVC-Parameter ermitteln|Script]]** geschrieben.
 +
 +Leider konnte mir bis jetzt niemand die genauen Einschränkungen für eine Blu-Ray-Kompatibilität nennen...  :-(
 +
 +
 +=== Problem ===
 +
 +
 +== Problembeschreibung ==
 +
 +Die Filme, die ich auf meinem FreeBSD-Rechner transcodiert habe:
 +  # mkvmerge --default-language ger --aspect-ratio 1:16/9 -o Film.mkv Video.mkv Audio.m4a
 +
 +... können auf meinem Linux-Rechner nicht abgespielt werden.
 +Es werden auf der Konsole nur solche Fehler ausgegeben:
 +
 +  [h264 @ 0x18bd6c0]AVC: Consumed only 1 bytes instead of 521
 +  [h264 @ 0x18bd6c0]AVC: nal size 2007757492
 +  [h264 @ 0x18bd6c0]no frame!
 +  Error while decoding frame!
 +  [h264 @ 0x18bd6c0]AVC: Consumed only 1 bytes instead of 521
 +  [h264 @ 0x18bd6c0]AVC: nal size -205018566
 +  [h264 @ 0x18bd6c0]no frame!
 +  Error while decoding frame!
 +  [h264 @ 0x18bd6c0]AVC: Consumed only 1 bytes instead of 521
 +  [h264 @ 0x18bd6c0]AVC: nal size -940479566
 +  [h264 @ 0x18bd6c0]no frame!
 +  Error while decoding frame!
 +
 +Wenn ich den MKV-Container auf meinem Linux-Rechner neu baue:
 +
 +  # mkvmerge -o Film_repariert.mkv Film.mkv
 +
 +...dann ist der Film wieder prima abspielbar.
 +
 +
 +== Lösung ==
 +
 +Auf meinem FreeBSD-Rechner habe ich schon mkvtoolnix-4.2.0, auf meinem Linux-Rechner aber noch das alte mkvtoolnix-4.0.0 installiert...
 +
 +Grund ist eine neue MKV-Funktion, die den Header komprimieren kann.
 +Wenn diese Abspielsoftware bzw. -hardware das nicht unterstützt, dann hat man natürlich ein Problem...
 +
 +Das lässt sich aber umgehen, indem man diese Funktion einfach so umkonfiguriert, das nichts komprimiert wird:
 +  # mkvmerge --default-language ger --aspect-ratio 1:16/9 -o Film.mkv --compression 1:none Video.mkv --compression 1:none Audio.m4a
 +
 +Möglicherweise müssen die entsprechenden Track-ID's erst ermittelt werden:
 +  # mkvmerge --identify Video.mkv
 +  # mkvmerge --identify Audio.m4a
 +