mirror of https://github.com/mpv-player/mpv
1255 lines
46 KiB
XML
1255 lines
46 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision$ -->
|
|
<chapter id="mencoder">
|
|
<title>Encoding with <application>MEncoder</application></title>
|
|
|
|
<para>
|
|
For the complete list of available <application>MEncoder</application> options
|
|
and examples, please see the man page. For a series of hands-on examples and
|
|
detailed guides on using several encoding parameters, read the
|
|
<ulink url="../../tech/encoding-tips.txt">encoding-tips</ulink> that were
|
|
collected from several mailing list threads on mplayer-users. Search the
|
|
<ulink url="http://mplayerhq.hu/pipermail/mplayer-users/">archives</ulink>
|
|
for a wealth of discussions about all aspects of and problems related to
|
|
encoding with <application>MEncoder</application>.
|
|
</para>
|
|
|
|
<sect1 id="menc-feat-mpeg4">
|
|
<title>Encoding 2-pass MPEG4 ("DivX")</title>
|
|
|
|
<para>
|
|
The name comes from the fact that this method encodes the file <emphasis>twice</emphasis>.
|
|
The first encoding (dubbed pass) creates some temporary files
|
|
(<filename>*.log</filename>) with a size of few megabytes, do not delete
|
|
them yet (you can delete the AVI). In the second pass, the 2-pass output
|
|
file is created, using the bitrate data from the temporary files. The
|
|
resulting file will have much better image quality. If this is the first
|
|
time you heard about this, you should consult some guides available on the
|
|
net.
|
|
</para>
|
|
|
|
<example>
|
|
<title>copy audio track</title>
|
|
<para>
|
|
2-pass encode of a DVD to an MPEG4 ("DivX") AVI while copying
|
|
the audio track.
|
|
<screen>
|
|
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o <replaceable>movie.avi</replaceable>
|
|
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o <replaceable>movie.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</example>
|
|
|
|
<example>
|
|
<title>encode audio track</title>
|
|
<para>
|
|
2-pass encode of a DVD to an MPEG4 ("DivX") AVI while encoding
|
|
the audio track to MP3.
|
|
<screen>
|
|
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac mp3lame -lameopts vbr=3 -o <replaceable>movie.avi</replaceable>
|
|
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac mp3lame -lameopts vbr=3 -o <replaceable>movie.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="menc-feat-mpeg">
|
|
<title>Encoding to MPEG format</title>
|
|
<para>
|
|
<application>MEncoder</application> can create MPEG (MPEG-PS) format output
|
|
files. It's probably useful only with
|
|
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>'s
|
|
<emphasis>mpeg1video</emphasis> codec, because players - except
|
|
<application>MPlayer</application> - expect MPEG1 video, and MPEG1 layer 2 (MP2)
|
|
audio streams in MPEG files.
|
|
</para>
|
|
|
|
<para>
|
|
This feature is not very useful right now, aside that it probably has many bugs,
|
|
but the more importantly because <application>MEncoder</application> currently
|
|
cannot encode MPEG1 layer 2 (MP2) audio, which all other players expect in MPEG files.
|
|
</para>
|
|
|
|
<para>
|
|
To change <application>MEncoder</application>'s output file format,
|
|
use the <option>-of mpeg</option> option.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
<screen>
|
|
mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy <replaceable>other_options</replaceable> <replaceable>media.avi</replaceable> -o <replaceable>output.mpg</replaceable>
|
|
</screen>
|
|
</para>
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="menc-feat-rescale">
|
|
<title>Rescaling movies</title>
|
|
|
|
<para>
|
|
Often the need to resize movie images' size emerges. Its reasons can be
|
|
many: decreasing file size, network bandwidth,etc. Most people even do
|
|
rescaling when converting DVDs or SVCDs to DivX AVI. If you wish to rescale,
|
|
read the <link linkend="aspect">Preserving aspect ratio</link> section.
|
|
</para>
|
|
|
|
<para>
|
|
The scaling process is handled by the <literal>scale</literal> video filter:
|
|
<option>-vf scale=<replaceable>width</replaceable>:<replaceable>height</replaceable></option>.
|
|
Its quality can be set with the <option>-sws</option> option.
|
|
If it's not specified, <application>MEncoder</application> will use 0: fast
|
|
bilinear.
|
|
</para>
|
|
|
|
<para>
|
|
Usage:
|
|
<screen>
|
|
mencoder <replaceable>input.mpg</replaceable> -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=640:480 -o <replaceable>output.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="menc-feat-streamcopy">
|
|
<title>Stream copying</title>
|
|
|
|
<para>
|
|
<application>MEncoder</application> can handle input streams in two ways:
|
|
<emphasis role="bold">encode</emphasis> or <emphasis role="bold">copy</emphasis>
|
|
them. This section is about <emphasis role="bold">copying</emphasis>.
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
<emphasis role="bold">Video stream</emphasis> (option <option>-ovc copy</option>):
|
|
nice stuff can be done :) Like, putting (not converting!) FLI or VIVO or
|
|
MPEG1 video into an AVI file! Of course only
|
|
<application>MPlayer</application> can play such files :) And it probably
|
|
has no real life value at all. Rationally: video stream copying can be
|
|
useful for example when only the audio stream has to be encoded (like,
|
|
uncompressed PCM to MP3).
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis role="bold">Audio stream</emphasis> (option <option>-oac copy</option>):
|
|
straightforward. It is possible to take an external audio file (MP3,
|
|
WAV) and mux it into the output stream. Use the
|
|
<option>-audiofile <replaceable>filename</replaceable></option> option
|
|
for this.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="menc-feat-fix-avi">
|
|
<title>Fixing AVIs with broken index or interleaving</title>
|
|
|
|
<para>
|
|
Easiest thing. We simply copy the video and audio streams, and
|
|
<application>MEncoder</application> generates the index. Of course this cannot fix possible bugs in
|
|
the video and/or audio streams. It also fixes files with broken interleaving,
|
|
thus the <option>-ni</option> option won't be needed for them anymore.
|
|
</para>
|
|
|
|
<para>
|
|
Command:
|
|
<screen>
|
|
mencoder -idx <replaceable>input.avi</replaceable> -ovc copy -oac copy -o <replaceable>output.avi</replaceable><!--
|
|
--></screen>
|
|
</para>
|
|
|
|
|
|
<sect2 id="menc-feat-appending">
|
|
<title>Appending multiple AVI files</title>
|
|
|
|
<para>
|
|
As a side-effect, the broken AVI fixer function enables <application>MEncoder</application>
|
|
to append 2 (or more) AVI files:
|
|
</para>
|
|
|
|
<para>
|
|
Command:
|
|
<screen>cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o <replaceable>output.avi</replaceable> -</screen>
|
|
</para>
|
|
|
|
<note><para>
|
|
This expects <filename>1.avi</filename> and <filename>2.avi</filename> to use
|
|
the same codecs, resolution, stream rate etc, and at least <filename>1.avi</filename>
|
|
must not be broken. You may need to fix your input AVI files first, as described
|
|
<link linkend="menc-feat-fix-avi">above</link>.
|
|
</para></note>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="menc-feat-enc-libavcodec">
|
|
<title>Encoding with the <systemitem class="library">libavcodec</systemitem>
|
|
codec family</title>
|
|
|
|
<para>
|
|
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>
|
|
provides simple encoding to a lot of interesting video and audio formats.
|
|
You can encode to the following codecs (more or less up to date):
|
|
|
|
<informaltable frame="all">
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row><entry>Codec name</entry><entry>Description</entry></row>
|
|
</thead>
|
|
<tbody>
|
|
<row><entry>mjpeg</entry><entry>
|
|
Motion JPEG
|
|
</entry></row>
|
|
<row><entry>ljpeg</entry><entry>
|
|
Lossless JPEG
|
|
</entry></row>
|
|
<row><entry>h263</entry><entry>
|
|
H263
|
|
</entry></row>
|
|
<row><entry>h263p</entry><entry>
|
|
H263 Plus
|
|
</entry></row>
|
|
<row><entry>mpeg4</entry><entry>
|
|
ISO standard MPEG4 (DivX 5, XVID compatible)
|
|
</entry></row>
|
|
<row><entry>msmpeg4</entry><entry>
|
|
pre-standard MPEG4 variant by MS, v3 (aka DivX3)
|
|
</entry></row>
|
|
<row><entry>msmpeg4v2</entry><entry>
|
|
pre-standard MPEG4 by MS, v2 (used in old asf files)
|
|
</entry></row>
|
|
<row><entry>wmv1</entry><entry>
|
|
Windows Media Video, version 1 (aka WMV7)
|
|
</entry></row>
|
|
<row><entry>wmv2</entry><entry>
|
|
Windows Media Video, version 2 (aka WMV8)
|
|
</entry></row>
|
|
<row><entry>rv10</entry><entry>
|
|
an old RealVideo codec
|
|
</entry></row>
|
|
<row><entry>mpeg1video</entry><entry>
|
|
MPEG1 video
|
|
</entry></row>
|
|
<row><entry>mpeg2video</entry><entry>
|
|
MPEG2 video
|
|
</entry></row>
|
|
<row><entry>huffyuv</entry><entry>
|
|
lossless compression
|
|
</entry></row>
|
|
<row><entry>asv1</entry><entry>
|
|
ASUS Video v1
|
|
</entry></row>
|
|
<row><entry>asv2</entry><entry>
|
|
ASUS Video v2
|
|
</entry></row>
|
|
<row><entry>ffv1</entry><entry>
|
|
FFmpeg's lossless video codec
|
|
</entry></row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
The first column contains the codec names that should be passed after the
|
|
<literal>vcodec</literal> config, like: <option>-lavcopts vcodec=msmpeg4</option>
|
|
</para>
|
|
|
|
<informalexample>
|
|
<para>
|
|
An example, with MJPEG compression:
|
|
<screen>mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy</screen>
|
|
</para>
|
|
</informalexample>
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="menc-feat-enc-images">
|
|
<title>Encoding from multiple input image files (JPEG, PNG, TGA, SGI)</title>
|
|
|
|
<para>
|
|
<application>MEncoder</application> is capable of creating movies from one
|
|
or more JPEG, PNG or TGA files. With simple framecopy it can create MJPEG
|
|
(Motion JPEG), MPNG (Motion PNG) or MTGA (Motion TGA) files.
|
|
</para>
|
|
|
|
<orderedlist>
|
|
<title>Explanation of the process:</title>
|
|
<listitem><para>
|
|
<application>MEncoder</application> <emphasis>decodes</emphasis> the input image(s) with
|
|
<systemitem class="library">libjpeg</systemitem> (when decoding PNGs, it
|
|
will use <systemitem class="library">libpng</systemitem>).
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<application>MEncoder</application> then feeds the decoded image to the
|
|
chosen video compressor (DivX4, XviD, FFmpeg msmpeg4, etc.).
|
|
</para></listitem>
|
|
</orderedlist>
|
|
|
|
<formalpara>
|
|
<title>Examples</title>
|
|
<para>
|
|
The explanation of the <option>-mf</option> option is in the man page.
|
|
|
|
<informalexample>
|
|
<para>
|
|
Creating an MPEG4 file from all the JPEG files in the current directory:
|
|
<screen>
|
|
mencoder mf://*.jpg -mf type=jpg:w=800:h=600:fps=25 -ovc lavc -lavcopts vcodec=mpeg4 -oac copy -o <replaceable>output.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</informalexample>
|
|
|
|
<informalexample>
|
|
<para>
|
|
Creating an MPEG4 file from some JPEG files in the current directory:
|
|
<screen>
|
|
mencoder mf://<replaceable>frame001.jpg,frame002.jpg</replaceable> -mf type=jpg:w=800:h=600:fps=25 -ovc lavc -lavcopts vcodec=mpeg4 -oac copy -o <replaceable>output.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</informalexample>
|
|
|
|
<informalexample>
|
|
<para>
|
|
Creating a Motion JPEG (MJPEG) file from all the JPEG files in the current
|
|
directory:
|
|
<screen>
|
|
mencoder mf://*.jpg -mf type=jpg:w=800:h=600:fps=25 -ovc copy -oac copy -o <replaceable>output.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</informalexample>
|
|
|
|
<informalexample>
|
|
<para>
|
|
Creating an uncompressed file from all the PNG files in the current directory:
|
|
<screen>
|
|
mencoder mf:// -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -o <replaceable>output.avi</replaceable>
|
|
</screen>
|
|
</para>
|
|
</informalexample>
|
|
|
|
<note><para>
|
|
Width must be integer multiple of 4, it's a limitation of the RAW RGB AVI format.
|
|
</para></note>
|
|
|
|
<informalexample>
|
|
<para>
|
|
Creating a Motion PNG (MPNG) file from all the PNG files in the current
|
|
directory:
|
|
<screen>
|
|
mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=png -ovc copy -oac copy -o <replaceable>output.avi</replaceable> <!--
|
|
--></screen>
|
|
</para>
|
|
</informalexample>
|
|
|
|
<informalexample>
|
|
<para>
|
|
Creating a Motion TGA (MTGA) file from all the TGA files in the current
|
|
directory:
|
|
<screen>
|
|
mencoder mf://*.tga -mf w=800:h=600:fps=25:type=tga -ovc copy -oac copy -o <replaceable>output.avi</replaceable><!--
|
|
--></screen>
|
|
</para>
|
|
</informalexample>
|
|
|
|
</para>
|
|
</formalpara>
|
|
</sect1>
|
|
|
|
|
|
<sect1 id="menc-feat-extractsub">
|
|
<title>Extracting DVD subtitles to Vobsub file</title>
|
|
|
|
<para>
|
|
<application>MEncoder</application> is capable of extracting subtitles from
|
|
a DVD into Vobsub formatted files. They consist of a pair of files ending in
|
|
<filename>.idx</filename> and <filename>.sub</filename> and are usually
|
|
packaged in a single <filename>.rar</filename> archive.
|
|
<application>MPlayer</application> can play these with the
|
|
<option>-vobsub</option> and <option>-vobsubid</option> options.
|
|
</para>
|
|
|
|
<para>
|
|
You specify the basename (i.e without the <filename>.idx</filename> or
|
|
<filename>.sub</filename> extension) of the output files with
|
|
<option>-vobsubout</option> and the index for this subtitle in the
|
|
resulting files with <option>-vobsuboutindex</option>.
|
|
</para>
|
|
|
|
<para>
|
|
If the input is not from a DVD you should use <option>-ifo</option> to
|
|
indicate the <filename>.ifo</filename> file needed to construct the
|
|
resulting <filename>.idx</filename> file.
|
|
</para>
|
|
|
|
<para>
|
|
If the input is not from a DVD and you do not have the
|
|
<filename>.ifo</filename> file you will need to use the
|
|
<option>-vobsubid</option> option to let it know what language id to put in
|
|
the <filename>.idx</filename> file.
|
|
</para>
|
|
|
|
<para>
|
|
Each run will append the running subtitle if the <filename>.idx</filename>
|
|
and <filename>.sub</filename> files already exist. So you should remove any
|
|
before starting.
|
|
</para>
|
|
|
|
<example>
|
|
<title>Copying two subtitles from a DVD while doing 3-pass encoding</title>
|
|
<screen>
|
|
rm subtitles.idx subtitles.sub
|
|
mencoder dvd://1 -vobsubout subtitles -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno
|
|
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1
|
|
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -vobsubout subtitles -vobsuboutindex 1 -sid 5<!--
|
|
--></screen>
|
|
</example>
|
|
|
|
<example>
|
|
<title>Copying a french subtitle from an MPEG file</title>
|
|
<screen>
|
|
rm subtitles.idx subtitles.sub
|
|
mencoder <replaceable>movie.mpg</replaceable> -ifo <replaceable>movie.ifo</replaceable> -vobsubout subtitles -vobsuboutindex 0 -vobsuboutid fr -sid 1<!--
|
|
--></screen>
|
|
</example>
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="aspect">
|
|
<title>Preserving aspect ratio</title>
|
|
<para>
|
|
DVDs and SVCDs (i.e. MPEG1/2) files contain an aspect ratio value, which
|
|
describes how the player should scale the video stream, so humans won't
|
|
have egg heads (ex.: 480x480 + 4:3 = 640x480). However when encoding to AVI
|
|
(DivX) files, you have be aware that AVI headers don't store this value.
|
|
Rescaling the movie is disgusting and time consuming, there has to be a better
|
|
way!
|
|
</para>
|
|
|
|
<para>There is</para>
|
|
|
|
<para>
|
|
MPEG4 has an unique feature: the video stream can contain its needed aspect
|
|
ratio. Yes, just like MPEG1/2 (DVD, SVCD) and H263 files. Regretfully, there are
|
|
<emphasis role="bold">no</emphasis> video players outside which support this
|
|
attribute of MPEG4, except <application>MPlayer</application>.
|
|
</para>
|
|
|
|
<para>
|
|
This feature can be used only with
|
|
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>'s
|
|
<systemitem>mpeg4</systemitem> codec. Keep in mind: although
|
|
<application>MPlayer</application> will correctly play the created file,
|
|
other players will use the wrong aspect ratio.
|
|
</para>
|
|
|
|
<para>
|
|
You seriously should crop the black bands over and below the movie image.
|
|
See the man page for the usage of the <systemitem>cropdetect</systemitem> and
|
|
<systemitem>crop</systemitem> filters.
|
|
</para>
|
|
|
|
<para>
|
|
Usage
|
|
<screen>mencoder <replaceable>sample-svcd.mpg</replaceable> -ovc lavc -lavcopts vcodec=mpeg4:autoaspect -vf crop=714:548:0:14 -oac copy -o <replaceable>output.avi</replaceable></screen>
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="custommatrices"><title>Custom inter/intra matrices</title>
|
|
|
|
<para>
|
|
With this feature of
|
|
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>
|
|
you are able to set custom inter (I-frames/key frames) and intra
|
|
(P-frames/predicted frames) matrices. It is supported by many of the codecs:
|
|
<systemitem>mpeg1video</systemitem> and <systemitem>mpeg2video</systemitem>
|
|
are reported as working.
|
|
</para>
|
|
|
|
<para>
|
|
A typical usage of this feature is to set the matrices preferred by the
|
|
<ulink url="http://www.kvcd.net/">KVCD</ulink> specifications.
|
|
</para>
|
|
|
|
<para>
|
|
The <emphasis role="bold">KVCD "Notch" Quantization Matrix:</emphasis>
|
|
</para>
|
|
|
|
<para>
|
|
Intra:
|
|
<screen>
|
|
8 9 12 22 26 27 29 34
|
|
9 10 14 26 27 29 34 37
|
|
12 14 18 27 29 34 37 38
|
|
22 26 27 31 36 37 38 40
|
|
26 27 29 36 39 38 40 48
|
|
27 29 34 37 38 40 48 58
|
|
29 34 37 38 40 48 58 69
|
|
34 37 38 40 48 58 69 79
|
|
</screen>
|
|
|
|
Inter:
|
|
<screen>
|
|
16 18 20 22 24 26 28 30
|
|
18 20 22 24 26 28 30 32
|
|
20 22 24 26 28 30 32 34
|
|
22 24 26 30 32 32 34 36
|
|
24 26 28 32 34 34 36 38
|
|
26 28 30 32 34 36 38 40
|
|
28 30 32 34 36 38 42 42
|
|
30 32 34 36 38 40 42 44
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
Usage:
|
|
<screen>
|
|
$ mencoder <replaceable>input.avi</replaceable> -o <replaceable>output.avi</replaceable> -oac copy -ovc lavc -lavcopts inter_matrix=...:intra_matrix=...
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
<screen>
|
|
$ mencoder <replaceable>input.avi</replaceable> -ovc lavc -lavcopts
|
|
vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,
|
|
12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,
|
|
29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79
|
|
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,
|
|
28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,
|
|
36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg
|
|
</screen>
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="menc-feat-dvd-mpeg4">
|
|
<title>Making a high quality MPEG4 ("DivX") rip of a DVD movie</title>
|
|
|
|
<para>
|
|
Ripping a DVD title into a maximally high quality MPEG4 (DivX) file
|
|
involves many considerations. Below is an example of the process when
|
|
there is no file size goal (other than perhaps fitting the result into 2GB).
|
|
<systemitem class="library">libavcodec</systemitem>
|
|
will be used for the video,
|
|
and the audio will be copied as is without any changes.
|
|
</para>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-crop">
|
|
<title>Cropping</title>
|
|
<para>
|
|
Play the DVD and run the crop detection filter
|
|
(<option>-vf cropdetect</option>) on it. This gives you a crop rectangle
|
|
to use for encoding. The reason for cropping is that many movies are
|
|
not shot in a standard DVD aspect ratio (16/9 or 4/3), or, for whatever
|
|
reason, the picture does not properly fill the frame. So you want to crop
|
|
out the pointless black bars when you rip. It also improves the quality
|
|
of the rip since the sharp edge of the black bars wastes a lot of bits.
|
|
A common aspect is 2.35, which is cinescope. Most big blockbuster
|
|
movies have this aspect ratio.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-quality">
|
|
<title>Quality level</title>
|
|
<para>
|
|
Next you need to choose the desired quality level. When there is no
|
|
need to fit the resulting file on CDs or the like, using constant
|
|
quantizing AKA constant quality is a good choice. That way each frame
|
|
is given as much bits as its needs to keep the quality at the desired
|
|
level, but multiple encoding passes are not needed. With
|
|
<systemitem class="library">libavcodec</systemitem>,
|
|
you get constant quality by using
|
|
<option>-lavcopts vqscale=<replaceable>N</replaceable></option>.
|
|
<option>vqscale=3</option> should give you a file below 2GB in size,
|
|
depending mainly on the movie length and video noisiness (the more
|
|
noise, the harder it is to compress).
|
|
</para></sect2>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-2gb">
|
|
<title>Files over 2GB</title>
|
|
<para>
|
|
If the file resulting from constant quality encoding is over 2GB big,
|
|
you will have to create an index to be able to view it properly.
|
|
Either
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
play the file with <option>-forceidx</option> to create an index
|
|
on the fly or
|
|
</para></listitem>
|
|
<listitem><para>
|
|
use <option>-saveidx</option> to write an index to a file once and
|
|
<option>-loadidx</option> to use it when playing the file.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
|
|
If this bothers you, you may want to keep the file size below 2GB.
|
|
</para>
|
|
|
|
<para>
|
|
There are three ways to avoid this. You can try encoding again using
|
|
<option>vqscale=4</option> and see if both the resulting file size
|
|
and picture quality are acceptable. You can also use
|
|
<link linkend="menc-feat-mpeg4">2 pass encoding</link>.
|
|
As you will be copying the audio track as is and hence know its
|
|
bitrate, and you know the running time of the movie, you can
|
|
compute the required video bitrate to give to the
|
|
<option>-lavcopts vbitrate=<replaceable>bitrate</replaceable></option>
|
|
option without using
|
|
<link linkend="menc-feat-mpeg4">3 pass encoding</link>.
|
|
</para>
|
|
|
|
<para>
|
|
The third and possibly the best option may be to slightly scale down
|
|
the resolution. The uniform slight softening and loss of detail is
|
|
visually more appealing than the blockiness and other artifacts
|
|
caused by MPEG compression. Scaling down also effectively reduces the
|
|
noise of the picture, which is good, as noise is hard to compress.
|
|
</para></sect2>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-deinterlacing">
|
|
<title>Deinterlacing</title>
|
|
<para>
|
|
If the movie is interlaced, you may want to deinterlace it as part of
|
|
the ripping. It is debatable whether deinterlacing should be done at
|
|
this stage. The benefit is that deinterlacing when converting to
|
|
MPEG4 makes compression better, and viewing easier and less CPU
|
|
intensive on computer monitors as no deinterlacing is required at
|
|
that stage.
|
|
</para>
|
|
|
|
<para>
|
|
If deinterlacing at the ripping stage is a good idea depends on
|
|
the DVD. If the DVD is made from film, which was shot at 24 fps, you
|
|
can as well deinterlace while ripping. If, however, the original was
|
|
50/60 fps video, converting into deinterlaced 23.976/25 fps video
|
|
will lose information. If you do decide to deinterlace, you can further
|
|
experiment with different deinterlacing filters. See
|
|
<ulink url="http://www.wieser-web.de/MPlayer/">http://www.wieser-web.de/MPlayer/</ulink>
|
|
for examples. A good starting point is <option>-vf pp=fd</option>.
|
|
</para>
|
|
|
|
<para>
|
|
If you are both cropping and deinterlacing, deinterlace
|
|
<emphasis>before</emphasis> cropping. Actually, this is not necessary
|
|
if the crop offset is vertically a multiple of 2 pixels. However with
|
|
some other filters, like dering, you should always crop last, so it's a
|
|
good habit to put the crop filter last.
|
|
</para></sect2>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-telecine">
|
|
<title>Inverse telecine</title>
|
|
<para>
|
|
If you are ripping a PAL DVD, which is 25 fps, you do not need to
|
|
think about the fps. Just use 25 fps. NTSC DVDs on the other hand are
|
|
29.97 fps (often rounded to 30 fps, but that is not what they are).
|
|
If the movie was shot for TV, you again do not need to touch the fps.
|
|
But if the movie was shot on film, and hence at (exactly) 24 fps,
|
|
it has been converted to 29.97 fps when making the DVD. That
|
|
conversion where 12 fields are added to each 24 frames of film is
|
|
called telecine. For more info about telecine, see a
|
|
<ulink url="http://www.google.com/search?q=telecine+field+23.976">
|
|
Google search for "telecine field 23.976"</ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
In case you have such a telecined DVD, you will want to do inverse
|
|
telecine, that is convert the movie to 23.976 fps (29.97*4/5).
|
|
Otherwise camera panning will look jerky and awful. You can use
|
|
<option>-ofps 23.976</option> for this. Anything that is shown in
|
|
theatres is shot on film and needs inverse telecine, TV shows do not.
|
|
</para></sect2>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-scaling">
|
|
<title>Scaling and aspect ratio</title>
|
|
<para>
|
|
For best quality, do not scale the movie while ripping. Scaling down
|
|
obviously loses detail, and scaling up causes artifacts and obviously
|
|
makes the file larger. Pixels in DVD movies
|
|
are not square, so DVD movies include info about the correct aspect
|
|
ratio. It is possible to store the aspect ratio in the MPEG4 header
|
|
of the output file. Most video players ignore this info, but
|
|
<application>MPlayer</application> honors it. So if you are only
|
|
going to use <application>MPlayer</application> for viewing the
|
|
ripped file, you do not need to scale the movie, just pass
|
|
<option>-lavcopts autoaspect</option> to
|
|
<application>MEncoder</application> and things will
|
|
automagically work right. If you must scale the movie, be
|
|
careful about getting the size right especially if you do cropping.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="menc-feat-dvd-mpeg4-summary">
|
|
<title>Summing it up</title>
|
|
<para>
|
|
With all of the above mentioned in mind, a suitable encoding command
|
|
might be
|
|
|
|
<screen>
|
|
mencoder dvd://1 -aid 128 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vqscale=3:vhq:v4mv:trell:autoaspect \
|
|
-ofps 23.976 -vf crop=720:364:0:56 -o Harry_Potter_2.avi
|
|
</screen>
|
|
|
|
Here <option>dvd://1</option> gives the DVD title to rip. Option
|
|
<option>-aid 128</option> says to use audio track 128, and
|
|
<option>-oac copy</option> to copy it as is. You'll have to use
|
|
<application>MPlayer</application> to find out the right values for
|
|
these options.
|
|
</para>
|
|
|
|
<para>
|
|
Options <option>vhq:v4mv:trell</option> for
|
|
<option>-lavcopts</option> improve quality versus bitrate, but make
|
|
encoding take longer. Especially <option>trell</option> slows
|
|
encoding down but also increases quality visibly. If you want to
|
|
deinterlace, add a <option>pp</option> filter to
|
|
<option>-vf</option>, for example
|
|
<option>-vf pp=fd,crop=720:364:0:56</option> (in that order). If you don't need
|
|
inverse telecine, leave out the <option>-ofps 23.976</option>.
|
|
</para>
|
|
</sect2>
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="menc-feat-telecine">
|
|
<title>How to deal with telecine and interlacing within NTSC DVDs</title>
|
|
|
|
<formalpara>
|
|
<title>Introduction</title>
|
|
<para>
|
|
I suggest you visit this page if you don't understand much of what
|
|
is written in this document:
|
|
<ulink url="http://www.divx.com/support/guides/guide.php?gid=10">http://www.divx.com/support/guides/guide.php?gid=10</ulink>
|
|
This URL links to an understandable and reasonably comprehensive
|
|
description of what telecine is.
|
|
</para></formalpara>
|
|
|
|
<para>
|
|
For technical reasons pertaining to the limitations of early
|
|
television hardware, all video intended to be displayed on an NTSC
|
|
television set must be 59.94 fields per second. Made-for-TV movies
|
|
and shows are often filmed directly at 59.94 fields per second, but
|
|
the majority of cinema is filmed at 24 or 23.976 frames per
|
|
second. When cinematic movie DVDs are mastered, the video is then
|
|
converted for television using a process called telecine.
|
|
</para>
|
|
|
|
<para>
|
|
On a DVD, the video is never actually stored as 59.94 fields per
|
|
second. For video that was originally 59.94, each pair of fields is
|
|
combined to form a frame, resulting in 29.97 frames per
|
|
second. Hardware DVD players then read a flag embedded in the video
|
|
stream to determine whether the odd- or even-numbered lines should
|
|
form the first field.
|
|
</para>
|
|
|
|
<para>
|
|
Usually, 23.976 frames per second content stays as it is when
|
|
encoded for a DVD, and the DVD player must perform telecining
|
|
on-the-fly. Sometimes, however, the video is telecined
|
|
<emphasis>before</emphasis> being stored on the DVD; even though it
|
|
was originally 23.976 frames per second, it becomes 59.94 fields per
|
|
second, and is stored on the disk as 29.97 frames per second.
|
|
</para>
|
|
|
|
<para>
|
|
When looking at individual frames formed from 59.94 fields per
|
|
second video, telecined or otherwise, interlacing is clearly visible
|
|
wherever there is any motion, because one field (say, the
|
|
even-numbered lines) represents a moment in time 1/59.94th of a
|
|
second later than the other. Playing interlaced video on a computer
|
|
looks ugly both because the monitor is higher resolution and because
|
|
the video is shown frame-after-frame instead of field-after-field.
|
|
</para>
|
|
|
|
<para>
|
|
Notes:
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
This section only applies to NTSC DVDs, and not PAL.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
The example <application>MEncoder</application> lines throughout the
|
|
document are <emphasis role="bold">not</emphasis> intended for
|
|
actual use. They are simply the bare minimum required to encode the
|
|
pertaining video category. How to make good DVD rips or fine-tune
|
|
<systemitem class="library">libavcodec</systemitem> for maximum
|
|
quality is not within the scope of this document.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
There are a couple footnotes specific to this guide, linked like this:
|
|
<link linkend="menc-feat-telecine-footnotes">[1]</link>
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
|
|
<sect2 id="menc-feat-telecine-ident">
|
|
<title>How to tell what type of video you have</title>
|
|
|
|
<sect3 id="menc-feat-telecine-ident-progressive">
|
|
<title>Progressive</title>
|
|
<para>
|
|
Progressive video was originally filmed at 23.976 fps, and stored
|
|
on the DVD without alteration.
|
|
</para>
|
|
|
|
<para>
|
|
When you play a progressive DVD in <application>MPlayer</application>,
|
|
<application>MPlayer</application> will print the following line as
|
|
soon as the movie begins to play:
|
|
|
|
<screen> demux_mpg: 24fps progressive NTSC content detected, switching framerate.</screen>
|
|
|
|
From this point forward, demux_mpg should never say it finds
|
|
"30fps NTSC content."
|
|
</para>
|
|
|
|
<para>
|
|
When you watch progressive video, you should never see any
|
|
interlacing. Beware, however, because sometimes there is a tiny bit
|
|
of telecine mixed in, where you wouldn't expect. I've encountered TV
|
|
show DVDs that have one second of telecine at every scene change, or
|
|
at seemingly random places. I once watched a DVD that had a
|
|
progressive first half, and the second half was telecined. If you
|
|
want to be <emphasis>really</emphasis> thorough, you can scan the
|
|
entire movie:
|
|
|
|
<screen>mplayer dvd://1 -nosound -vo null -benchmark</screen>
|
|
|
|
Using <option>-benchmark</option> makes
|
|
<application>MPlayer</application> play the movie as quickly as it
|
|
possibly can; still, depending on your hardware, it can take a
|
|
while. Every time demux_mpg reports a framerate change, the line
|
|
immediately above will show you the time at which the change
|
|
occurred.
|
|
</para>
|
|
|
|
<para>
|
|
Sometimes progressive video is referred to as "soft-telecine"
|
|
because it is intended to be telecined by the DVD player.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-ident-telecined">
|
|
<title>Telecined</title>
|
|
<para>
|
|
Telecined video was originally filmed at 23.976, but was telecined
|
|
<emphasis>before</emphasis> it was written to the DVD.
|
|
</para>
|
|
|
|
<para>
|
|
<application>MPlayer</application> does not (ever) report any
|
|
framerate changes when it plays telecined video.
|
|
</para>
|
|
|
|
<para>
|
|
Watching a telecined video, you will see interlacing artifacts that
|
|
seem to "blink": they repeatedly appear and disappear.
|
|
You can look closely at this by
|
|
<orderedlist>
|
|
<listitem>
|
|
<screen>mplayer dvd://1 -speed 0.1</screen>
|
|
</listitem>
|
|
<listitem><para>
|
|
Seek to a part with motion.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
Look at the pattern of interlaced-looking and progressive-looking
|
|
frames. If the pattern you see is PPPII,PPPII,PPPII,... then the
|
|
video is telecined. If you see some other pattern, then the video
|
|
may have been telecined using some non-standard method and
|
|
<application>MEncoder</application> cannot losslessly convert it
|
|
to progressive. If you don't see any pattern at all, then it is
|
|
most likely interlaced.
|
|
</para></listitem>
|
|
</orderedlist>
|
|
</para>
|
|
|
|
<para>
|
|
Sometimes telecined video is referred to as "hard-telecine".
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-ident-interlaced">
|
|
<title>Interlaced</title>
|
|
<para>
|
|
|
|
Interlaced video was originally filmed at 59.94 fields per second,
|
|
and stored on the DVD as 29.97 frames per second. The interlacing is
|
|
a result of combining pairs of fields into frames, because within
|
|
each frame, each field is 1/59.94 seconds apart.
|
|
</para>
|
|
|
|
<para>
|
|
As with telecined video, <application>MPlayer</application> should
|
|
not ever report any framerate changes when playing interlaced content.
|
|
</para>
|
|
|
|
<para>
|
|
When you view an interlaced video closely with <option>-speed 0.1</option>,
|
|
you will see that every single frame is interlaced.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-ident-mixedpt">
|
|
<title>Mixed progressive and telecine</title>
|
|
<para>
|
|
All of a "mixed progressive and telecine" video was originally
|
|
23.976 frames per second, but some parts of it ended up being telecined.
|
|
</para>
|
|
|
|
<para>
|
|
When <application>MPlayer</application> plays this category, it will
|
|
(often repeatedly) switch back and forth between "30fps
|
|
NTSC" and "24fps progressive NTSC". Watch the bottom of
|
|
<application>MPlayer</application>'s output to see these messages.
|
|
</para>
|
|
|
|
<para>
|
|
You should check the "30fps NTSC" sections to make sure
|
|
they are actually telecine, and not just interlaced.
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-ident-mixedpi">
|
|
<title>Mixed progressive and interlaced</title>
|
|
<para>
|
|
In "mixed progressive and interlaced" content, progressive
|
|
and interlaced video have been spliced together.
|
|
</para>
|
|
|
|
<para>
|
|
This category looks just like "mixed progressive and telecine",
|
|
until you examine the 30fps sections and see that they don't have the
|
|
telecine pattern.
|
|
</para>
|
|
</sect3>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="menc-feat-telecine-encode">
|
|
<title>How to encode each category</title>
|
|
<para>
|
|
As I mentioned in the beginning, example <application>MEncoder</application>
|
|
lines below are <emphasis role="bold">not</emphasis> meant to actually be used;
|
|
they only demonstrate the minimum parameters to properly encode each category.
|
|
</para>
|
|
|
|
<sect3 id="menc-feat-telecine-encode-progressive">
|
|
<title>Progressive</title>
|
|
<para>
|
|
Progressive video requires no special filtering to encode. The only
|
|
parameter you need to be sure to use is
|
|
<option>-ofps 23.976</option>. Otherwise, <application>MEncoder</application>
|
|
will try to encode at 29.97 fps and duplicate frames.
|
|
</para>
|
|
|
|
<para>
|
|
<screen>mencoder dvd://1 -nosound -ovc lavc -ofps 23.976</screen>
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-encode-telecined">
|
|
<title>Telecined</title>
|
|
<para>
|
|
Telecine can be reversed to retrieve the original 23.976 content,
|
|
using a process called inverse-telecine.
|
|
<application>MPlayer</application> contains two filters to
|
|
accomplish this: <option>detc</option> and
|
|
<option>ivtc</option>. You can read the manual page to see their
|
|
differences, but for DVDs I've never had a problem with
|
|
<option>ivtc</option>. Note that you should
|
|
<emphasis role="bold">always</emphasis> inverse-telecine before any
|
|
rescaling; unless you really know what you're doing,
|
|
inverse-telecine before cropping, too
|
|
<link linkend="menc-feat-telecine-footnotes">[1]</link>. Again,
|
|
<option>-ofps 23.976</option> is needed, too.
|
|
</para>
|
|
|
|
<para>
|
|
<screen>mencoder dvd://1 -nosound -vf ivtc=1 -ovc lavc -ofps 23.976</screen>
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-encode-interlaced">
|
|
<title>Interlaced</title>
|
|
<para>
|
|
For most practical cases it is not possible to retrieve a complete
|
|
progressive video from interlaced content. The only way to do so
|
|
without losing half of the vertical resolution is to double the
|
|
framerate and try to "guess" what ought to make up the
|
|
corresponding lines for each field (this has drawbacks - see method
|
|
3).
|
|
</para>
|
|
|
|
<orderedlist>
|
|
<listitem><para>
|
|
|
|
Encode the video in interlaced form. Normally, interlacing wreaks
|
|
havoc with the encoder's ability to compress well, but
|
|
<systemitem class="library">libavcodec</systemitem> has two
|
|
parameters specifically for dealing with storing interlaced video a
|
|
bit better: <option> ildct</option> and <option>ilme</option>. Also,
|
|
using <option>mbd=2</option> is strongly recommended
|
|
<link linkend="menc-feat-telecine-footnotes">[2] </link> because it
|
|
will encode macroblocks as non-interlaced in places where there is
|
|
no motion. Note that <option>-ofps</option> is NOT needed here.
|
|
|
|
<screen>mencoder dvd://1 -nosound -ovc lavc -lavcopts ildct:ilme:mbd=2</screen>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
Use a deinterlacing filter before encoding. There are several of
|
|
these filters available to choose from, each with its own advantages
|
|
and disadvantages. Consult <option>mplayer -pphelp</option> to see
|
|
what's available (grep for "deint"), and search the
|
|
<ulink url="http://www.mplayerhq.hu/homepage/design6/info.html#mailing_lists">
|
|
MPlayer mailing lists</ulink> to find many discussions about the
|
|
various filters. Again, the framerate is not changing, so no
|
|
<option>-ofps</option>. Also, deinterlacing should be done after
|
|
cropping <link linkend="menc-feat-telecine-footnotes">[1]</link> and
|
|
before scaling.
|
|
|
|
<screen>mencoder dvd://1 -nosound -vf pp=lb -ovc lavc</screen>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
Unfortunately, this option is buggy with
|
|
<application>MEncoder</application>; it ought to work well with
|
|
<application>MEncoder G2</application>, but that isn't here yet. You
|
|
might experience crahes. Anyway, the purpose of <option> -vf
|
|
tfields</option> is to create a full frame out of each field, which
|
|
makes the framerate 59.94. The advantage of this approach is that no
|
|
data is ever lost; however, since each frame comes from only one
|
|
field, the missing lines have to be interpolated somehow. There are
|
|
no very good methods of generating the missing data, and so the
|
|
result will look a bit similar to when using some deinterlacing
|
|
filters. Generating the missing lines creates other issues, as well,
|
|
simply because the amount of data doubles. So, higher encoding
|
|
bitrates are required to maintain quality, and more CPU power is
|
|
used for both encoding and decoding. tfields has several different
|
|
options for how to create the missing lines of each frame. If you
|
|
use this method, then Reference the manual, and chose whichever
|
|
option looks best for your material. Note that when using
|
|
<option>tfields</option> you
|
|
<emphasis role="bold">have to</emphasis> specify both
|
|
<option>-fps</option> and <option>-ofps</option> to be twice the
|
|
framerate of your original source.
|
|
|
|
<screen>mencoder dvd://1 -nosound -vf tfields=2 -ovc lavc -fps 59.94 -ofps 59.94</screen>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
If you plan on downscaling dramatically, you can excise and encode
|
|
only one of the two fields. Of course, you'll lose half the vertical
|
|
resolution, but if you plan on downscaling to at most 1/2 of the
|
|
original, the loss won't matter much. The result will be a
|
|
progressive 29.97 frames per second file. The procedure is to use
|
|
<option>-vf field</option>, then crop
|
|
<link linkend="menc-feat-telecine-footnotes">[1]</link> and scale
|
|
appropriately. Remember that you'll have to adjust the scale to
|
|
compensate for the vertical resolution being halved.
|
|
<screen>mencoder dvd://1 -nosound -vf field=0 -ovc lavc</screen>
|
|
</para></listitem>
|
|
</orderedlist>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-encode-mixedpt">
|
|
<title>Mixed progressive and telecine</title>
|
|
<para>
|
|
In order to turn mixed progressive and telecine video into entirely
|
|
progressive video, the telecined parts have to be
|
|
inverse-telecined. There are two filters that accomplish this
|
|
natively, but a better solution most of the time is to use two
|
|
filters in conjunction (read onward for more detail).
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
Currently the most reliable method to deal with this type of video
|
|
is to, rather than inverse-telecine the telecined parts, telecine
|
|
the non-telecined parts and then inverse-telecine the whole
|
|
video. Sound confusing? softpulldown is a filter that goes through
|
|
a video and makes the entire file telecined. If we follow
|
|
softpulldown with either <option>detc</option> or
|
|
<option>ivtc</option>, the final result will be entirely
|
|
progressive. Cropping and scaling should be done after the
|
|
inverse-telecine operations, and <option> -ofps 23.976</option> is
|
|
needed.
|
|
|
|
<screen>mencoder dvd://1 -nosound -vf softpulldown,ivtc=1 -ovc lavc -ofps 23.976</screen>
|
|
</para>
|
|
</listitem>
|
|
<listitem><para>
|
|
<option>-vf pullup</option> is designed to inverse-telecine
|
|
telecined material while leaving progressive data alone. Pullup
|
|
doesn't really work well with the current
|
|
<application>MEncoder</application>, though, and is really intended
|
|
for use with <application>MEncoder G2</application> (whenever it's
|
|
ready). It works fine without <option>-ofps</option>, but
|
|
<option>-ofps</option> is needed to prevent choppy output. With
|
|
<option>-ofps</option>, it sometimes fails. The problems arise from
|
|
<application>MEncoder</application>'s behavior of dropping frames to
|
|
maintain synchronization between the audio and video: it drops
|
|
frames before sending them through the filter chain, rather than
|
|
after. As a result, <option>pullup</option> is sometimes deprived
|
|
of the data it needs.
|
|
</para>
|
|
|
|
<para>
|
|
If <application>MEncoder</application> drops too many frames in a
|
|
row, it starves <option>pullup</option>'s buffers and causes it to
|
|
crash.
|
|
</para>
|
|
|
|
<para>
|
|
Even if <application>MEncoder</application> only drops one frame,
|
|
<option> pullup</option> still doesn't get to see it, and will end
|
|
up operating on an incorrect sequence of frames. Even though this
|
|
doesn't cause a crash, <option> pullup</option> won't be able to
|
|
make correct decisions on how to reassemble progressive frames, and
|
|
will either match fields together incorrectly or drop several fields
|
|
to compensate.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem><para>
|
|
I haven't used <option>-vf filmdint</option> myself, but here's what
|
|
D Richard Felker III has to say:
|
|
|
|
<blockquote><para>It's OK, but IMO it tries to deinterlace rather
|
|
than doing inverse telecine too often (much like settop DVD
|
|
players & progressive TVs) which gives ugly flickering and
|
|
other artefacts. If you're going to use it, you at least need to
|
|
spend some time tuning the options and watching the output first
|
|
to make sure it's not messing up.</para></blockquote>
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3 id="menc-feat-telecine-encode-mixedpi">
|
|
<title>Mixed progressive and interlaced</title>
|
|
<para>
|
|
There are two options for dealing with this category, each of
|
|
which is a compromise. You should decide based on the
|
|
duration/location of each type.
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
Treat it as progressive. The interlaced parts will look interlaced,
|
|
and some of the interlaced fields will have to be dropped, resulting
|
|
in a bit of uneven jumpiness. You can use a postprocessing filter if
|
|
you want to, but it may slightly degrade the progressive parts.
|
|
</para>
|
|
|
|
<para>
|
|
This option should definitely not be used if you want to eventually
|
|
display the video on an interlaced device (with a TV card, for
|
|
example). If you have interlaced frames in a 23.976 frames per
|
|
second video, they will be telecined along with the progressive
|
|
frames. Half of the interlaced "frames" will be displayed for three
|
|
fields' duration (3/59.94 seconds), resulting in a flicking
|
|
"jump back in time" effect that looks quite bad. If you
|
|
even attempt this, you <emphasis role="bold">must</emphasis> use a
|
|
deinterlacing filter like <option>lb</option> or
|
|
<option>l5</option>.
|
|
</para>
|
|
|
|
<para>
|
|
It may also be a bad idea for progressive display, too. It will drop
|
|
pairs of consecutive interlaced fields, resulting in a discontinuity
|
|
that can be more visible than with the second method, which shows
|
|
some progressive frames twice. 29.97 frames per second interlaced
|
|
video is already a bit choppy because it really should be shown at
|
|
59.94 fields per second, so the duplicate frames don't stand out as
|
|
much.
|
|
</para>
|
|
|
|
<para>
|
|
Either way, it's best to consider your content and how you intend to
|
|
display it. If your video is 90% progressive and you never intend to
|
|
show it on a TV, you should favor a progressive approach. If it's
|
|
only half progressive, you probably want to encode it as if it's all
|
|
interlaced.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem><para>
|
|
Treat it as interlaced. Some frames of the progressive parts will
|
|
need to be duplicated, resulting in uneven jumpiness. Again,
|
|
deinterlacing filters may slightly degrade the progressive parts.
|
|
</para></listitem>
|
|
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="menc-feat-telecine-footnotes">
|
|
<title>Footnotes</title>
|
|
<orderedlist>
|
|
<listitem><formalpara>
|
|
<title>About cropping:</title>
|
|
<para>
|
|
Video data on DVDs are stored in a format called YUV 4:2:0. In YUV
|
|
video, luma ("brightness") and chroma ("color")
|
|
are stored separately. Because the human eye is somewhat less
|
|
sensitive to color than it is to brightness, in a YUV 4:2:0 picture
|
|
there is only one chroma pixel for every four luma pixels. In a
|
|
progressive picture, each square of four luma pixels (two on each
|
|
side) has one common chroma pixel. You must crop progressive YUV
|
|
4:2:0 to even resolutions, and use even offsets. For example,
|
|
<option>crop=716:380:2:26</option> is OK but
|
|
<option>crop=716:380:3:26 </option> is not.
|
|
</para>
|
|
</formalpara>
|
|
|
|
<para>
|
|
When you are dealing with interlaced YUV 4:2:0, the situation is a
|
|
bit more complicated. Instead of every four luma pixels in the
|
|
<emphasis>frame</emphasis> sharing a chroma pixel, every four luma
|
|
pixels in each <emphasis> field</emphasis> share a chroma
|
|
pixel. When fields are interlaced to form a frame, each scanline is
|
|
one pixel high. Now, instead of all four luma pixels being in a
|
|
square, there are two pixels side-by-side, and the other two pixels
|
|
are side-by-side two scanlines down. The two luma pixels in the
|
|
intermediate scanline are from the other field, and so share a
|
|
different chroma pixel with two luma pixels two scanlines away. All
|
|
this confusion makes it necessary to have vertical crop dimensions
|
|
and offsets be multiples of four. Horizontal can stay even.
|
|
</para>
|
|
|
|
<para>
|
|
For telecined video, I recommend that cropping take place after
|
|
inverse telecining. Once the video is progressive you only need to
|
|
crop by even numbers. If you really want to gain the slight speedup
|
|
that cropping first may offer, you must crop vertically by multiples
|
|
of four or else the inverse-telecine filter won't have proper data.
|
|
</para>
|
|
|
|
<para>
|
|
For interlaced (not telecined) video, you must always crop
|
|
vertically by multiples of four unless you use <option>-vf
|
|
field</option> before cropping.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem><formalpara>
|
|
<title>About encoding parameters and quality:</title>
|
|
<para>
|
|
Just because I recommend <option>mbd=2</option> here doesn't mean it
|
|
shouldn't be used elsewhere. Along with <option>trell</option>,
|
|
<option>mbd=2</option> is one of the two
|
|
<systemitem class="library">libavcodec</systemitem> options that
|
|
increases quality the most, and you should always use at least those
|
|
two unless the drop in encoding speed is prohibitive (e.g. realtime
|
|
encoding). There are many other options to
|
|
<systemitem class="library">libavcodec</systemitem> that increase
|
|
encoding quality (and decrease encoding speed) but that is beyond
|
|
the scope of this document.
|
|
</para>
|
|
</formalpara>
|
|
</listitem>
|
|
|
|
</orderedlist>
|
|
|
|
</sect2>
|
|
|
|
</sect1>
|
|
|
|
</chapter>
|