Benutzer-Werkzeuge

Webseiten-Werkzeuge


filme_transkodieren

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

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:

  1. DivX5-Video-Codec aus der "lavc" für bessere Bildqualität
  2. 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

# 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

  1. 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;
  2. 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 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
/home/http/wiki/data/pages/filme_transkodieren.txt · Zuletzt geändert: von manfred