view DOCS/de/encoding.html @ 10686:8eb690f0e342

- seek() is always synchronized to keyframes, so the decoders don't crash anymore; successfully tested with libmpeg2 and ffmpeg12 - support for tables PAT and PMT, used the associate pids to program and to play the right streams - option -tsprog <number> to specify the chosen program (-vid and -aid still override the single stream pids) - initial support for MPEG4 in TS (M4V is working, but not AAC yet) - defragmenting mechanism (without buffering, so it has 0 added cost) to improve the playback of high bitrate movies - refers to demux_mpg_control() to get length and percentage position in the stream patch by Nico <nsabbi@libero.it>
author arpi
date Sun, 24 Aug 2003 18:07:00 +0000
parents a5785a0b9ee1
children
line wrap: on
line source

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>

<HEAD>
  <TITLE>Encodieren - MEncoder - The Movie Encoder for Linux</TITLE>
  <LINK REL="stylesheet" TYPE="text/css" HREF="../default.css">
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</HEAD>

<BODY>


<H2><A NAME="encoding">7. Encodieren mit MEncoder</A></H2>

<P>Eine komplette Auflistung aller MEncoder-Optionen und aller Beispiele
findest du in der man-page. Einige sinnvolle Beispiele und detaillierte
Anleitungen, wie die diversen Parameter benutzt werden, findest du in den
<A HREF="../tech/encoding-tips.txt">Encodierungstipps (englisch)</A>, die
von mehreren Emails auf der
<A HREF="http://mplayerhq.hu/mailman/listinfo/mplayer-users">mplayer-users</A>
zusammengetragen wurden. Durchsuche auch das
<A HREF="http://mplayerhq.hu/pipermail/mplayer-users/">Archiv</A>. Dort findest
du eine Unmenge an Diskussionen &uuml;ber alle m&ouml;glichen Themen rund um
die Encodierung mit MEncoder.</P>

<H3><A NAME="2pass">7.1 MPEG4-Encodierung ("DivX") in zwei oder drei
Durchl&auml;ufen </A></H3>

<P><U><B>2-pass-Encodierung:</B></U> Der Name kommt in der Tat daher, dass
diese Methode die Datei <I>zweimal</I> encodiert. Das erste Encodieren (1.
<P>Pass</I> [=Durchlauf]) erzeugt einige tempor&auml;re Dateien (*.log) mit
einer Dateigr&ouml;&szlig;e von nur wenigen MB. L&ouml;sche sie nicht (das AVI
kannst du aber l&ouml;schen). Im zweiten Pass wird die Ausgabedatei unter
Verwendung der Bitraten-Daten der tempor&auml;ren Datei erzeugt. Die
endg&uuml;ltige Datei wird deswegen eine weitaus bessere Bildqualit&auml;t
besitzen. Wenn dies das erst Mal ist, dass du davon h&ouml;rst, solltest du
einige Guides im Internet lesen.</P>

<P>Dieses Beispiel zeigt dir, wie du mit 2 Passes eine DVD in ein MPEG4-AVI
("DivX") encodierst. Nur 2 Befehle sind erforderlich:<BR>

<CODE>&nbsp;&nbsp;&nbsp;&nbsp;rm frameno.avi</CODE> - L&ouml;sche diese Datei,
  welche von einer fr&uuml;heren 3-Pass-Encodierung kommen kann (Sie f&uuml;hrt zu
  einem Konflikt mit der momentanen Encodierung).<BR>

<CODE>&nbsp;&nbsp;&nbsp;&nbsp;mencoder dvd://2 -lavcopts
vcodec=mpeg4:vpass=1 -oac copy -o film.avi</CODE><BR>

<CODE>&nbsp;&nbsp;&nbsp;&nbsp;mencoder dvd://2 -lavcopts
vcodec=mpeg4:vpass=2 -oac copy -o film.avi</CODE></P>

<P><U><B>3-Pass-Encodierung:</B></U> Dies ist eine Erweiterung der
2-Pass-Encodierung, in der die Encodierung von Audio in einem separaten
Durchlauf erledigt wird. Diese Methode erlaubt es MEncoder,
Vorschl&auml;ge f&uuml;r die Videobitrate zu machen, sodass das Ergebnis auf
eine CD passt. Auch wird der Ton im Unterschied zum 2-Pass nur einmal
encodiert. Das Schema: </P>

<OL>
  <LI>L&ouml;sche die alte Datei:
    <P>CODE>rm frameno.avi</CODE></P></LI>
  <LI>Erster Durchlauf:
    <P><CODE>mencoder &lt;file/DVD&gt; -ovc frameno -oac mp3lame -lameopts
      vbr=3 -o frameno.avi</CODE></P>
      
    <P>Hierbei wird ein AVI erstellt, das <B>nur</B> die gew&auml;hlte
      Audiospur enth&auml;lt. Vergiss nicht, die <CODE>-lameopts</CODE> deinen
      W&uuml;nschen anzupassen. Wenn du einen langen Film encodierst, so gibt
      dir MEncoder am Schluss die empfohlenen Videobitraten aus, damit
      ein resultierender Film auf eine 650MB-, eine 700MB- oder eine 800MB-CD
      passt.</P></LI>
  <LI>Zweiter Durchgang:
    <P><CODE>mencoder &lt;file/DVD&gt; -oac copy
      -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=&lt;bitrate&gt;
      </CODE></P>
    <P>Genauso wie der erste Durchgang vom DivX4-Beispiel oben. Gib hier die
      nach dem ersten Durchlauf von MEncoderempfohlene  oder eine andere
      von dir gew&auml;hlte Videobitrate an.</LI></P>
  <LI>Dritter Durchgang:
    <P><CODE>mencoder &lt;file/DVD&gt; -oac copy
      -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=&lt;bitrate&gt;
      </CODE></P>
    <P>Genauso wie der zweite Durchgang vom DivX4-Beispiel oben. Gib hier die
      gleiche Bitrate wie im ersten Durchgang an, es sei denn, du wei&szlig;t
      genau, was du tust. In diesem Durchgang wird die im
      ersten Durchgang encodierte Audiospur in die endg&uuml;ltige Datei
      eingef&uuml;gt. Nun ist alles fertig!</LI></P>
</OL>
    
<H4>Beispiel einer 3-Pass-Encodierung:</H4>

<CODE>&nbsp;&nbsp;&nbsp;&nbsp;rm frameno.avi</CODE> - L&ouml;sche diese Datei,
  welche von einer fr&uuml;heren 3-Pass-Encodierung kommen kann (Sie f&uuml;hrt
  zu einem Konflikt mit der momentanen Encodierung).<BR>

<CODE>&nbsp;&nbsp;&nbsp;&nbsp;mencoder dvd://2 -ovc frameno
  -o frameno.avi -oac mp3lame -lameopts vbr=3<BR>

&nbsp;&nbsp;&nbsp;&nbsp;mencoder dvd://2 -ovc lavc
  -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi<BR>

&nbsp;&nbsp;&nbsp;&nbsp;mencoder dvd://2 -ovc lavc
  -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi</CODE></P>


<H2><A NAME="mpeg">7.2 In das MPEG-Format encodieren</A></H2>

<P>MEncoder kann MPEG-Dateien (MPEG-PS) erstellen. Das ist wahrscheinlich
nur in Kombination mit dem <I>mpeg1video</I>-Codec der libavcodec sinnvoll,
da alle Player (bis auf MPlayer) MPEG1-Video und MPEG1 Layer 2 (MP2)-Audio
in MPEG-Dateien erwarten.</P>

<P>Dieses Feature ist momentan nicht wirklich n&uuml;tzlich, mal davon
abgesehen, dass es wahrscheinlich noch einige Fehler enth&auml;lt. Schlimmer
ist aber, dass MEncoder momentan kein MPEG1 Layer 2 (MP2)-Audio erzeugen
kann, das alle anderen Player in einer MPEG-Datei erwarten.</P>

<P>Das Ausgabeformat von MEncoder kann mit <CODE>-of mpeg</CODE> auf MPEG
ge&auml;ndert werden.</P>

<P>Beispiel:<BR>
  &nbsp;&nbsp;<CODE>mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video
  -oac copy &lt;weitere Optionen&gt; media.avi -o ausgabe.mpg</CODE></P>



<H3><A NAME="rescaling">7.3 Skalierung von Filmen</A></H3>

<P>Oftmals ist die &Auml;nderung der Bildgr&ouml;&szlig;e erforderlich. Die
Gr&uuml;nde daf&uuml;r k&ouml;nnen verschieden sein: Dateigr&ouml;&szlig;e
verringern, Netzwerkbandbreite nicht &uuml;berlasten etc. Viele Leute skalieren
das Bild auch, wenn sie von DVD zu SVCD oder DivX-AVI konvertieren. <B>Das ist
allgemein schlecht.</B> Wenn du das vermeiden willst, dann lies den Abschnitt
&uuml;ber das <A HREF="#aspect">Beibehalten des
H&ouml;hen-/Breitenverh&auml;ltnisses</A>.</P>

<P>Der Skalierungsprozess erfolgt durch den <I>'scale</I>-Videofilter:
<CODE>-vf scale=breite:hoehe</CODE>. Die Qualit&auml;t kann durch die Option
<CODE>-sws</CODE> angegeben werden. Wenn nichts angegeben ist, verwendet
MEncoder 0: schnelle bilienare Filterung ('fast bilinear').</P>

<H4>VERWENDUNG</H4>

<CODE>&nbsp;&nbsp;&nbsp;&nbsp;mencoder beispiel-svcd.mpg -ovc lavc -lavcopts
  vcodec=mpeg4 -vf scale=640:480 -sws 2 -oac copy -o ausgabe.avi</CODE></P>

<H3><A NAME="copying">7.4 Stream-Kopiermodus</A></H3>

<P>MEncoder kann Input-Streams auf zwei Arten bearbeiten:
<B>encodieren</B> oder <B>kopieren (copy)</B>. Diese Sektion erkl&auml;rt die
<B>Stream-Kopie</B>.</P>

<UL>
  <LI><B>Videostreams</B> (Option <CODE>-ovc copy</CODE>): Es k&ouml;nnen nette
    Sachen gemacht werden :)<BR> Wie das kopieren (nicht konvertieren) von FLI-
    oder VIVO- oder MPEG1-Video in eine AVI-Datei. Nat&uuml;rlich ist nur
    MPlayer in der Lage, solche Dateien abspielen :) Und vermutlich ist
    das auch absolut nicht praxisrelevant. Das Kopieren von Videostream
    kann n&uuml;tzlicher sein, wenn man zum Beispiel nur den Audiostream
    encodieren will (z.B.: unkomprimiertes PCM zu MP3).</LI>
  <LI><B>Audiostreams</B> (Option <CODE>-oac copy</CODE>): geht genauso.</LI>
    Es ist m&ouml;glich, eine externe Audiodatei (MP3, AC3, Vorbis) zu nehmen,
    und diese dem Ausgabestream hinzuzuf&uuml;gen. Benutze dazu die Option 
    <CODE>-audiofile &lt;dateiname&gt;</CODE>.</LI>
</UL>


<H3><A NAME="fixing">7.5 Reparieren von AVIs mit defektem Index oder
schlechtem Interleaving</A></H3>

<P>Trivial. Wir kopieren einfach die Video- und Audiostreams, und
MEncoder erzeugt den Index. Nat&uuml;rlich kann das keine Fehler in den
Video- und/oder Audiostreams beheben. Es kann auch Dateien mit kaputten
Interleaving reparieren, sodass die Option <CODE>-ni</CODE> f&uuml;r diese
nicht mehr gebraucht wird.</P>

<P>Befehl: <CODE>mencoder -idx eingabe.avi -ovc copy -oac copy -o
ausgabe.avi</CODE></P>

<H3><A NAME="appending">7.5.1 Aneinanderh&auml;ngen mehrerer AVI-Dateien</A>
</H3>

<P>Ein Nebeneffekt des oben erw&auml;hnten Reparierens ist, dass MEncoder
damit auch zwei oder mehrere aneinandergeh&auml;ngte AVI-Dateien reparieren
kann:</P>

<P>Kommando: <CODE>cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o
ausgabe.avi -</CODE></P>

<P><B>Anmerkung:</B> Hier wird angenommen, dass <CODE>1.avi</CODE> und
<CODE>2.avi</CODE> den gleichen Codec verwenden, die gleiche Aufl&ouml;ung und
Streamrate besitzen etc., und wenigstens 1.avi darf nicht defekt sein.
Eventuell musst du, wie  <A HREF="#fixing">oben</A> beschrieben, die
Quelldateien erst reparieren.</P>

<H3><A NAME="libavcodec">7.6 Encodierung mit der
  <I>libavcodec</I>-Codec-Familie</A></H4>

<P><A HREF="codecs.html#libavcodec">libavcodec</A> bietet eine einfache
Encodierung f&uuml;r  viele interessante Video-und Audio-formate (momentan
werden deren Audio-Codecs nicht  unterst&uuml;tzt). Du kannst zu folgenden
Codecs encodieren:</P>

<UL>
  <LI>mjpeg - Motion JPEG</LI>
  <LI>h263 - H263</LI>
  <LI>h263p - H263 Plus</LI>
  <LI>mpeg4 - ISO-Standard-MPEG4 (kompatibel zu DivX5, XviD)</LI>
  <LI>msmpeg4 - pre-Standard-MPEG4-Variante von MS, v3 (aka DivX3)</LI>
  <LI>msmpeg4v2 - pre-Standard-MPEG4-Variante von MS, v2 (wird in alten
    ASF-Dateien benutzt)</LI>
  <LI>rv10 - ein alter RealVideo-Codec</LI>
  <LI>mpeg1video - MPEG1-Video :)</LI>
  <LI>huffyuv - verlustfreie Kompression</LI>
</UL>

<P>Die erste Spalte enth&auml;lt den Codec-Namen, den du nach dem
<CODE>vcodec</CODE>-Stichwort &uuml;bergibst, wie z.B.:
<CODE>-lavcopts vcodec=msmpeg4</CODE></P>

<P>Ein Beispiel mit MJPEG-Compression:<BR>
<CODE>&nbsp;&nbsp;&nbsp;&nbsp;mencoder dvd://2 -o titel2.avi -ovc lavc -lavcopts
vcodec=mjpeg -oac copy</CODE></P>

<H3><A NAME="image_files">7.7 Encodierung von mehreren Einzelbildern
  (JPEGs, PNGs oder TGAs)</A></H3>

<P>MEncoder kann aus mehreren JPEG-, PNG- oder TGA-Einzelbildern
einen Film erstellen. Durch einfaches Kopieren der Bilder kann er MJPEG-
(Motion JPEG), MPNG- (Motion PNG) oder MTGA-Filme (Motion TGA) erzeugen.</P>

<P>So l&auml;uft dieser Prozess ab:</P>

<OL>
  <LI>MEncoder <I>decodiert</I> das/die Eingangsbild(er) mit
    <CODE>libjpeg</CODE> (wenn PNGs decodiert werden, wird die <B>libpng</B>
    benutzt).</LI>
  <LI>MEncoder f&uuml;hrt die decodierten Bilder danach dem
    gew&auml;hlten Videokompressor zu (DivX4, Xvid, ffmpeg msmpeg4, etc...).
  </LI>
</OL>

<H4>Beispiele</H4>

<P>Die Erkl&auml;rung der <CODE>-mf</CODE>-Option kann in der Manpage gefunden
werden.</P>

<P><I>Erstellung einer DivX4-Datei aus allen JPEG-Dateien im aktuellen
Verzeichnis:</I><BR>

  &nbsp;&nbsp;<CODE>mencoder -mf on:w=800:h=600:fps=25 -ovc divx4
  -o ausgabe.avi \*.jpg</CODE></P>

<P><I>Erstellung einer DivX4-Datei aus einigen JPEG-Dateien im aktuellen
Verzeichnis:</I><BR>

  &nbsp;&nbsp;<CODE>mencoder -mf on:w=800:h=600:fps=25
  -ovc divx4 -o ausgabe.avi frame001.jpg,frame002.jpg</CODE></P>

<P><I>Erstellung einer Motion JPEG-Datei (MJPEG) aus allen JPEG-Dateien im
aktuellen Verzeichnis:</I><BR>

  &nbsp;&nbsp;<CODE>mencoder -mf on:w=800:h=600:fps=25 -ovc copy
  -o output.avi \*.jpg</CODE></P>

<P><I>Erstellung einer unkomprimierten Datei aus allen PNG-Dateien im
momentanen Verzeichnis:</I><BR>

  &nbsp;&nbsp;<CODE>mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb
  -o output.avi \*.png</CODE></P>

<P><B>Anmerkung:</B> Die Breite muss ein Vielfaches von 4 betragen, was eine
Beschr&auml;nkung des RGB-AVI-Formates ist.</P>

<P><I>Erstellung einer Motion PNG-Datei (MPNG) aus allen PNG-Dateien im
momentanen Verzeichnis:</I><BR>

  &nbsp;&nbsp;<CODE>mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy
  -o output.avi \*.png</CODE></P>

<P><I>Erstellung einer Motion TGA-Datei (MTGA) aus allen TGA-Dateien im
aktuellen Verzeichnis:</I><BR>

  &nbsp;&nbsp;<CODE>mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy
  -o output.avi \*.tga</CODE></P>

<H3><A NAME="vobsub">7.8 Extrahieren von DVD-Untertiteln in eine
Vobsub-Datei</A></H3>
  
<P>MEncoder kann Untertitel von einer DVD extrahieren und sie als Datei
im Vobsub-Format speichern. Dieses besteht aus einem Dateipaar
(<CODE>.sub</CODE> und <CODE>.idx</CODE>) und wird gew&auml;hnlich in ein
einziges <CODE>.rar</CODE> Archiv verpackt. MPlayer kann diese mit den
Optionen <CODE>-vobsub</CODE> und <CODE>-vobsubid</CODE> wiedergeben.</P>

<P>Du gibst mit <CODE>-vobsubout</CODE> den Basisnamen der Ausgabedatei  (ohne
<CODE>.idx</CODE>- oder <CODE>.sub</CODE>-Endung) und mit 
<CODE>-vobsuboutindex</CODE> den Index des Untertitels der Ausgabedatei 
an.</P>

<P>Wenn die Eingabe nicht von einer DVD stammt, solltest du mit der Option
<CODE>-ifo</CODE> die Datei angeben, die zur Erstellung der resultierenden
<CODE>.idx</CODE>-Datei ben&ouml;tigt wird.</P>

<P>Wenn die Eingabe nicht von einer DVD stammt und keine
<CODE>.ifo</CODE>-Datei vorhanden ist, ben&ouml;tigst du die
<CODE>-vobsuboutid</CODE>-Option, um MPlayer zu sagen, welche Sprach-ID
f&uuml;r die <CODE>.idx</CODE> Datei verwendet werden soll.</P>

<P>Jeder Aufruf f&uuml;gt neue Untertitel dazu, falls die <CODE>.idx</CODE>-
und <CODE>.sub</CODE>-Dateien bereits existieren. Sie sollten im Bedarfsfall
also vor dem Starten gel&ouml;scht werden.</P>

<H4>Beispiele:</H4>

<P><I>Kopieren zweier Untertitel von einer DVD mit 3-Pass-Encodierung</I><BR>

&nbsp;&nbsp;<CODE>rm untertitel.idx untertitel.sub</CODE><BR>

&nbsp;&nbsp;<CODE>mencoder dvd://1 -vobsubout untertitel -vobsuboutindex 0 -sid
2 -o frameno.avi -ovc frameno -oac mp3lame -lameopts vbr=3</CODE><BR>

&nbsp;&nbsp;<CODE>mencoder dvd://1 -oac copy -ovc divx4 -divx4opts
pass=1</CODE><BR>

&nbsp;&nbsp;<CODE>mencoder dvd://1 -oac copy -ovc divx4 -divx4opts pass=2
  -vobsubout untertitel -vobsuboutindex 1 -sid 5</CODE></P>


<P><I>Kopieren eines franz&ouml;sischen Untertitels von einer MPEG-Datei</I><BR>

&nbsp;&nbsp;<CODE>rm untertitel.idx untertitel.sub</CODE><BR>

&nbsp;&nbsp;<CODE>mencoder film.mpg -ifo film.ifo -vobsubout untertitel
-vobsuboutindex 0 -vobsuboutid fr -sid 1</CODE></P>

<H3><A NAME="aspect">7.9 Das H&ouml;hen-/Breitenverh&auml;ltnisses erhalten
</A></H3>

<P>DVDs und SVCDs (z.B. MPEG1/2) enthalten einen Wert, der das Verh&auml;ltnis
zwischen der Ausgebeh&ouml;he und der Ausgebebreite enth&auml;lt. Der Player
sorgt dann durch Skalierung daf&uuml;r, dass dieses Verh&auml;ltnis erreicht
wird, sodass wir Menschen keine Eierk&ouml;pfe sehen (Beispiel: die
Bildma&szlig;e betragen 480x480, das gespeicherte Verh&auml;ltnis betr&auml;gt
4:3, und der Player spielt den Videostream dann bei 640x480 ab). Wenn du
allerdings solche Dateien in ein AVI umwandelst, dann musst du beachten, dass
das AVI-Format das H&ouml;hen-/Breitenverh&auml;ltnis <B>nicht</B> speichern
kann. Die Skalierung beim Encodieren ist ein zeitraubender und
qualit&auml;tsmindernder Prozess. Es sollte doch eine bessere M&ouml;glichkeit
geben!?</P>

<P>Ganz genau - die gibt es.</P>

<P>MPEG4 enth&auml;lt ein einzigartiges Feature: Im Videostream selber kann
das H&ouml;hen-/Breitenverh&auml;ltnis gespeichert werden. Jop, genauso wie
bei MPEG1/2 (DVD, SVCD). Leider gibt es bisher <U>keinen</U> Videoplayer, der
dieses Feature unterst&uuml;tzt. Bis auf MPlayer nat&uuml;rlich.</P>

<P>Dieses Feature kann nur in Verbindung mit dem <CODE>mpeg4</CODE>-Codec der
<B>libavcodec</B> genutzt werden. Denke immer daran, dass - auch wenn
MPlayer die Datei richtig wiedergeben wird - alle anderen Player ein
falsches H&ouml;hen-/Breitenverh&auml;ltnis anzeigen werden.</P>

<P>Du solltest ernsthaft in Erw&auml;gung ziehen, die eventuell vorhandenen
schwarzen Balken oberhalb und unterhalb des Bildes wegzuschneiden. Lies
in der man-Page dazu, wie du die <CODE>cropdetect</CODE>- und
<CODE>crop</CROP>-Filter benutzt.</P>

<H4>BENUTZUNG</H4>

<P><CODE>$ mencoder beispiel-svcd.mpg -ovc lavc -lavcopts
  vcodec=mpeg4:aspect=16.0/9.0 -vf crop=714:548:0:14 -oac copy -o
  ausgabe.avi</CODE></P>

</BODY>
</HTML>