Hallo,
Ziel ist es eine [Blocked Image: http://www.movie2digital.de/alink.gif]<acronym class="jgs_acronym_standart" title="Digital Versatile Disc"> DVD</acronym> zu erstellen mit dem mencoder als encoder. Das ganze soll ohne <acronym class="jgs_acronym_standart" title="(Graphical User Interface) Grafische Benutzeroberfläche mit Mausbedienung, die kommerziell erfolgreich als erstes von Apple eingesetzt wurde und unter Windows ebenfalls Verwendung findet. Graphical User Interface (GUI), von der PARC-Forschungsgruppe des Xerox-Konzerns "erfunden", hat den Siegeszug des WWW, mit einer benutzerfreundlichen und leicht zu bedienenden Browser-Oberfläche, beschleunigt.">GUI</acronym> wie z.B. Avidemux im Terminal geschehen.
Ich möchte hier noch kurz erwähnen dass das Ganze bestimmt nicht der Weisheit letzter Schluss ist. Dafür sind die Möglichkeiten zu vielfältig.
So, los geht's.
Testfile:
So als erstes brauchen wir einen Test-File, man will ja nicht den ganzen Film encoden um zu sehen das die eingesetzten Filter nicht so funktionieren wie man sich das gewünscht hat.
Dazu nehme ich folgendes Script.
<table style="width: 98%; table-layout: fixed;" align="center"> <tbody><tr> <td> <table style="width: 100%;" class="tableinborder" cellpadding="4" cellspacing="1"> <tbody><tr class="smallfont"> <td class="tablecat" colspan="2">code:</td> </tr> <tr class="smallfont"> <td class="inposttable" align="right" nowrap="nowrap">
1:
</td> <td class="inposttable" style="width: 100%;" valign="top" align="left" nowrap="nowrap">
mencoder /home/morpheus/Downloads/a1.avi -ovc copy -oac copy -ss 5:00 -endpos 8:00 -o /home/morpheus/Videos/Test mencoder/test.avi</td> </tr> </tbody></table>
</td> </tr> </tbody></table>
Hier gibt es nur zwei Optionen die eben erklären will.
-ss 5:00 Damit startet der mencoder zum herausschneiden des Files in der Filmminute 5. Wer braucht schon den Vorspann zum testen.
-endpos 8:00 Damit endet das herausschneiden bei Filmminute 13. Es werden also 8min. Film herausgeschnitten.
Somit hat man ein kurzes Stück Film zum testen.
1-pass encoding
<table style="width: 98%; table-layout: fixed;" align="center"> <tbody><tr> <td> <table style="width: 100%;" class="tableinborder" cellpadding="4" cellspacing="1"> <tbody><tr class="smallfont"> <td class="tablecat" colspan="2">code:</td> </tr> <tr class="smallfont"> <td class="inposttable" align="right" nowrap="nowrap">
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
</td> <td class="inposttable" style="width: 100%;" valign="top" align="left" nowrap="nowrap">
mencoder \
/home/morpheus/Test.avi \
-of mpeg \
-ovc lavc -lavcopts vcodec=mpeg2video:aspect=4/3:vrc_buf_size=1835:vrc_minrate=2000:\
vrc_maxrate=8000:vbitrate=5000:keyint=12:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:vqmin=1:lmin=1:dc=10:vstrict=0:turbo -ofps 25 \
-mpegopts format=dvd:tsaf \
-srate 48000 \
-sws 7 \
-vf scale=720:448,expand=720:576,harddup \
-oac lavc -lavcopts acodec=ac3:abitrate=192 \
-af lavcresample=48000 \
-o /home/morpheus/1.mpg \</td> </tr> </tbody></table>
</td> </tr> </tbody></table>
Die Erklärungen zu den einzelnen Optionen findet hier unter dem 2-Pass Script.
2-Pass encoding
<table style="width: 98%; table-layout: fixed;" align="center"> <tbody><tr> <td> <table style="width: 100%;" class="tableinborder" cellpadding="4" cellspacing="1"> <tbody><tr class="smallfont"> <td class="tablecat" colspan="2">code:</td> </tr> <tr class="smallfont"> <td class="inposttable" align="right" nowrap="nowrap">
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
</td> <td class="inposttable" style="width: 100%;" valign="top" align="left" nowrap="nowrap">
#!/bin/bash
mencoder \
/home/morpheus/Test.avi \
-of mpeg \
-ovc lavc -lavcopts vcodec=mpeg2video:aspect=4/3:vpass=1:vrc_buf_size=1835:vrc_minrate=2000:\
vrc_maxrate=8000:vbitrate=5000:keyint=12:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:vqmin=1:lmin=1:dc=10:vstrict=0:turbo -ofps 25 \
-mpegopts format=dvd:tsaf \
-srate 48000 \
-sws 7 \
-vf scale=720:448,expand=720:576,harddup \
-oac lavc -lavcopts acodec=ac3:abitrate=192 \
-af lavcresample=48000 \
-o /home/morpheus/.Trash/1.mpg \
&& \
sleep 30 ; mencoder \
/home/morpheus/Test.avi \
-of mpeg \
-ovc lavc -lavcopts vcodec=mpeg2video:aspect=4/3:vpass=2:vrc_buf_size=1835:vrc_minrate=2000:\
vrc_maxrate=8000:vbitrate=5000:keyint=12:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:vqmin=1:lmin=1:dc=10:vstrict=0 -ofps 25 \
-mpegopts format=dvd:tsaf \
-srate 48000 \
-sws 7 \
-vf scale=720:448,expand=720:576,harddup \
-oac lavc -lavcopts acodec=ac3:abitrate=192 \
-af lavcresample=48000 \
-o /home/morpheus/Videos/Test.mpg</td> </tr> </tbody></table>
</td> </tr> </tbody></table>
Das Script wird als ausführbare Datei gespeichert, man kann aber die einzelnen passes auch getrennt in das Terminal kopieren. Wenn man möchte, wichtig ist das die Log Datei aus dem ersten Pass nicht gelöscht wird. Die Einstellung müssen im ersten und zweiten pass identisch sein. Der Unterschied zum 1-pass verfahren besteht nur aus dem Eintrag vpass der Rest ist auch hier identisch.
Die einzelnen Einstellungen:
Allgemeine Optionen:
-of mpeg Mit diesem Kommando kontrolliert der mencoder das der korrekte Dateityp erstellt wird.
-mpegopts format=dvd:tsaf Setzt die <acronym class="jgs_acronym_standart" title="Motion Picture Experts Group (Kompressionsstandard für digitale Videobilder)">MPEG</acronym> Optionen. Format setzt den Stream Typ fest. tsaf setzt Zeitstempel (timestamps) bei allen Frames, wenn möglich, empfohlen bei format=dvd.
srate= Erzwingt eine zu benutzende Audioabspielrate (Optional, Default ist 48000)
-sws 7 Mit dieser Option wird der Resizer bestimmt der unter scale benutzt werden soll.
Folgende Möglichkeiten gibt es:
<table style="width: 98%; table-layout: fixed;" align="center"> <tbody><tr> <td> <table style="width: 100%;" class="tableinborder" cellpadding="4" cellspacing="1"> <tbody><tr class="smallfont"> <td class="tablecat" colspan="2">code:</td> </tr> <tr class="smallfont"> <td class="inposttable" align="right" nowrap="nowrap">
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
</td> <td class="inposttable" style="width: 100%;" valign="top" align="left" nowrap="nowrap">
0 fast bilinear
1 bilinear
2 bicubic (gute Qualität) (Standard)
3 experimentell
4 nearest neighbour (schlechte Qualität)
5 area
6 luma bicubic / chroma bilinear
7 gauss
8 sincR
9 lanczos
10 natural bicubic spline</td> </tr> </tbody></table>
</td> </tr> </tbody></table>
Lavc Optionen:
vcodec=mpeg2video Dürfte klar sein, hier wird der benutzte codec eingestellt.
aspect= Hier wird die Aspect Ratio eingestellt. Wenn du dir nicht sicher bist kannst du auch autoaspect angeben. Dann entscheidet der mencoder welches Seitenverhältnis. (autoaspect ist unter mpeg2 nur bedingt zu gebrauchen die Aspect Ratio von Hand einstellen ist immer die erste Wahl)
keyint=12 Stellt die GOP-Größe ein.
vstrict=0 Diese Einstellung sorgt dafür das SAP's den späteren Film einwandfrei abspielen können. Ohne dies Einstellung werden wohl inkorrekte Stream erzeugt.. (Mehr habe ich über diese Einstellung auch noch nicht herausgefunden)
vrc_buf_size=1835 Puffergröße in kBit (Durchlauf 1/2). Für MPEG-1/2 setzt dies außerdem die vbv-Puffergröße. Der VBV Puffer ist wichtig damit der spätere Film sauber abgespielt werden kann.
vrc_minrate=2000 Legt die min. Bitrate fest.
vrc_maxrate=8000 Legt die max. Bitrate fest.
turbo Beschleunigt den ersten pass.
-ofps Setzt die Framerate fest. Für Pal 25
Die jetzt folgenden Optionen müssen nicht gesetzt werden. Sie sollen aber die Qualität erhöhen, was aber noch getestet werden muss. Die unten angegebenen Werte sind als Beispiel zu sehen und sollten nicht 1 zu 1 übernommen werden. Wenn du diese Werte verändern willst ist ein Blick in die mencoder man unverzichtbar.
trell Trellis-Quantisierung. Hiermit wird die optimale Encodierung für jeden 8x8-Block gefunden. Die Trellis-Quantisierung ist bei gegenseitiger Abschätzung von PSNR-Wert gegen die Bitrate optimal (unter der Annahme, dass durch die IDCT keine Rundungsfehler ins Spiel kommen − was natürlich nicht der Fall ist). Sie findet einfach einen Block für das Minimum von Fehler und lambda*Bits.
mbd= Macroblock decision algorithm: Entscheidungsalgorithmus für Macro-Blocks (hohe Qualitätsstufe), encodiert jeden Macro-Block in allen Modi und wählt den besten aus. Dies ist zwar langsam, führt aber zu besserer Qualität und Dateigröße. Wenn mbd auf 1 oder 2 gesetzt ist, wird der mbcmp-Wert beim Vergleich von Macro-Blöcken ignoriert. Falls jedoch irgendeine Vergleichseinstellung (precmp, subcmp, cmp oder mbcmp) ungleich null ist, wird eine langsamere aber bessere Bewegungssuche verwendet, die auf halbe Pixel genau arbeitet. Dabei ist egal, auf welchen Wert mbd gesetzt wurde. Wenn qpel gesetzt ist, wird in jedem Falle auf Viertelpixel genaue Bewegungssuche verwendet.
0 Benutze von mbcmp gegebene Vergleichsfunktion (Standard).
1 Wählt denjenigen Modus für einen Macro-Block, der die wenigsten Bits benötigt (entspricht vhq).
2 Wählt den Modus für einen Macro-Block mit der geringsten Ratenverzerrung
precmp Setzt die Vergleichsfunktion für "pre pass"-Bewegungsabschätzung (siehe mbcmp für eine Liste der verfügbaren Vergleichsfunktionen) (Standard: 0).
subcmp Setzt die Vergleichsfunktion für "sub pel"-Bewegungsabschätzung (siehe mbcmp für eine Liste der verfügbaren Vergleichsfunktionen) (Standard: 0)
cmp Setzt die Vergleichsfunktion für "full pel"-Bewegungsabschätzung (siehe mbcmp für eine Liste der verfügbaren Vergleichsfunktionen) (Standard: 0)
dia Rautentyp und -größe für die Bewegungsabschätzung. Bewegungsabschätzung ist ein iterativer Prozess. Eine kleine Raute zu benutzen begrenzt die Suche nicht auf das Auffinden von nur kleinen Motion-Vectors. Es ist nur irgendwie wahrscheinlicher, dass die Suche anhält, bevor der beste Motion-Vector gefunden wurde − vor allem, wenn Rauschen involviert ist. Größere Rauten erlauben eine ausgedehntere Suche nach dem besten Motion-Vector, welche daher langsamer ist, dafür aber zu einem besseren Ergebnis führt.
Große normale Rauten sind qualitativ besser als an das Muster anpassende ("shape adaptive") Rauten. An das Muster anpassende Rauten sind ein guter Kompromiss zwischen Geschwindigkeit und Qualität.
predia Rautentyp und -größe für "pre pass"-Bewegungsabschätzung
cbp Ratenverzerrtes optimal codiertes Blockmuster (coded block pattern). Wird dasjenige codierte Blockmuster auswählen, das Verzerrung + lambda*Rate minimiert. Dies kann nur zusammen mit der Trellis-Quantisierung benutzt werden.
mv0 Versuche jeden Macroblock mit Motion-Vector=<0,0> zu encodieren und wähle den besseren. Dies hat keinen Effekt, falls mbd=0
vqmin minimaler Quantisierungsparameter (Durchlauf 1/2)
1 Nicht empfohlen (viel größere Datei, geringer Qualitätsunterschied und seltsame Seiteneffekte: msmpeg4 und h263 werden eine sehr geringe Qualität liefern und die Bitratenkontrolle wird verwirrt sein, was auch eine geringere Qualität zur Folge hat; manche Decoder werden es nicht decodieren können).
2 Empfohlen für normales Encodieren mit mpeg4/mpeg1video (Standard).
3 Empfohlen für h263(p)/msmpeg4. Der Grund dafür, 3 dem Wert 2 vorzuziehen ist, dass 2 zu Overflows führen kann. (Dies wird zukünftig für h263(p) korrigiert werden, indem der Quantisierungsparameter pro Macro-Block geändert wird; msmpeg4 kann nicht korrigiert werden, da es dies nicht unterstützt.
lmin Minimaler Frame-Level basierter Lagrange-Multiplikator für die Bitratenkontrolle (Standard: 2.0). Lavc wird Quantisierungparameter, die unter dem Wert für lmin liegen, kaum verwenden. Ein niedriger Wert für lmin bewirkt, dass lavc für manche Frames eher niedrigere Quantisierungsparameter verwendet, jedoch nicht niedriger als der angegebene Wert für vqmin. Entsprechend wird ein größerer Wert für lmin bewirken, dass lavc niedrige Quantisierungsparameter eher nicht verwendet, auch wenn vqmin diese erlaubt hätte. Vermutlich willst du lmin ungefähr gleich vqmin setzen. Wenn adaptive Quantisierung verwendet wird, wirkt sich die Änderung von lmin/lmax weniger stark aus.
dc Intra-DC-Genauigkeit in Bits (Standard: 8). Wenn du vcodec=mpeg2video angibst, kann dieser Wert 8, 9, 10 oder 11 sein.
Audio Optionen:
acodec Hier stellst du den Audiocodec ein.
abitrate Hier die gewünschte Bitrate.
lavcresample Ändert die Samplerate des Audiostreams