diff options
Diffstat (limited to 'DOCS/xml/en/encoding-guide.xml')
-rw-r--r-- | DOCS/xml/en/encoding-guide.xml | 5545 |
1 files changed, 1 insertions, 5544 deletions
diff --git a/DOCS/xml/en/encoding-guide.xml b/DOCS/xml/en/encoding-guide.xml index 9309df9df7..d458f31b1c 100644 --- a/DOCS/xml/en/encoding-guide.xml +++ b/DOCS/xml/en/encoding-guide.xml @@ -3,5550 +3,7 @@ <chapter id="encoding-guide"> <title>Encoding with <application>MEncoder</application></title> -<sect1 id="menc-feat-dvd-mpeg4"> -<title>Making a high quality MPEG-4 ("DivX") - rip of a DVD movie</title> - -<para> -One frequently asked question is "How do I make the highest quality rip -for a given size?". Another question is "How do I make the highest -quality DVD rip possible? I do not care about file size, I just want the best -quality." -</para> - -<para> -The latter question is perhaps at least somewhat wrongly posed. After all, if -you do not care about file size, why not simply copy the entire MPEG-2 video -stream from the the DVD? Sure, your AVI will end up being 5GB, give -or take, but if you want the best quality and do not care about size, -this is certainly your best option. -</para> - -<para> -In fact, the reason you want to transcode a DVD into MPEG-4 is -specifically because you <emphasis role="bold">do</emphasis> care about -file size. -</para> - -<para> -It is difficult to offer a cookbook recipe on how to create a very high -quality DVD rip. There are several factors to consider, and you should -understand these details or else you are likely to end up disappointed -with your results. Below we will investigate some of these issues, and -then have a look at an example. We assume you are using -<systemitem class="library">libavcodec</systemitem> to encode the video, -although the theory applies to other codecs as well. -</para> - -<para> -If this seems to be too much for you, you should probably use one of the -many fine frontends that are listed in the -<ulink url="http://www.mplayerhq.hu/design7/projects.html#mencoder_frontends">MEncoder section</ulink> -of our related projects page. -That way, you should be able to achieve high quality rips without too much -thinking, because most of those tools are designed to take clever decisions -for you. -</para> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-preparing-encode"> -<title>Preparing to encode: Identifying source material and framerate</title> - -<para> -Before you even think about encoding a movie, you need to take -several preliminary steps. -</para> - -<para> -The first and most important step before you encode should be -determining what type of content you are dealing with. -If your source material comes from DVD or broadcast/cable/satellite -TV, it will be stored in one of two formats: NTSC for North -America and Japan, PAL for Europe, etc. -It is important to realize, however, that this is just the formatting for -presentation on a television, and often does -<emphasis role="bold">not</emphasis> correspond to the -original format of the movie. -Experience shows that NTSC material is a lot more difficult to encode, -because there more elements to identify in the source. -In order to produce a suitable encode, you need to know the original -format. -Failure to take this into account will result in various flaws in your -encode, including ugly combing (interlacing) artifacts and duplicated -or even lost frames. -Besides being ugly, the artifacts also harm coding efficiency: -You will get worse quality per unit bitrate. -</para> - - -<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-fps"> -<title>Identifying source framerate</title> - -<para> -Here is a list of common types of source material, where you are -likely to find them, and their properties: -</para> - -<itemizedlist> -<listitem><para> - <emphasis role="bold">Standard Film</emphasis>: Produced for - theatrical display at 24fps. -</para></listitem> -<listitem><para> - <emphasis role="bold">PAL video</emphasis>: Recorded with a PAL - video camera at 50 fields per second. - A field consists of just the odd- or even-numbered lines of a - frame. - Television was designed to refresh these in alternation as a - cheap form of analog compression. - The human eye supposedly compensates for this, but once you - understand interlacing you will learn to see it on TV too and - never enjoy TV again. - Two fields do <emphasis role="bold">not</emphasis> make a - complete frame, because they are captured 1/50 of a second apart - in time, and thus they do not line up unless there is no motion. -</para></listitem> -<listitem><para> - <emphasis role="bold">NTSC Video</emphasis>: Recorded with an - NTSC video camera at 60000/1001 fields per second, or 60 fields per - second in the pre-color era. - Otherwise similar to PAL. -</para></listitem> -<listitem><para> - <emphasis role="bold">Animation</emphasis>: Usually drawn at - 24fps, but also comes in mixed-framerate varieties. -</para></listitem> -<listitem><para> - <emphasis role="bold">Computer Graphics (CG)</emphasis>: Can be - any framerate, but some are more common than others; 24 and - 30 frames per second are typical for NTSC, and 25fps is typical - for PAL. -</para></listitem> -<listitem><para> - <emphasis role="bold">Old Film</emphasis>: Various lower - framerates. -</para></listitem> -</itemizedlist> -</sect3> - - -<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-material"> -<title>Identifying source material</title> - -<para> -Movies consisting of frames are referred to as progressive, -while those consisting of independent fields are called -either interlaced or video - though this latter term is -ambiguous. -</para> - -<para> -To further complicate matters, some movies will be a mix of -several of the above. -</para> - -<para> -The most important distinction to make between all of these -formats is that some are frame-based, while others are -field-based. -<emphasis role="bold">Whenever</emphasis> a movie is prepared -for display on television (including DVD), it is converted to a -field-based format. -The various methods by which this can be done are collectively -referred to as "telecine", of which the infamous NTSC -"3:2 pulldown" is one variety. -Unless the original material was also field-based (and the same -fieldrate), you are getting the movie in a format other than the -original. -</para> - -<itemizedlist> -<title>There are several common types of pulldown:</title> -<listitem><para> - <emphasis role="bold">PAL 2:2 pulldown</emphasis>: The nicest of - them all. - Each frame is shown for the duration of two fields, by extracting the - even and odd lines and showing them in alternation. - If the original material is 24fps, this process speeds up the - movie by 4%. -</para></listitem> -<listitem><para> - <emphasis role="bold">PAL 2:2:2:2:2:2:2:2:2:2:2:3 pulldown</emphasis>: - Every 12th frame is shown for the duration of three fields, instead of - just two. - This avoids the 4% speedup issue, but makes the process much - more difficult to reverse. - It is usually seen in musical productions where adjusting the - speed by 4% would seriously damage the musical score. -</para></listitem> -<listitem><para> - <emphasis role="bold">NTSC 3:2 telecine</emphasis>: Frames are - shown alternately for the duration of 3 fields or 2 fields. - This gives a fieldrate 2.5 times the original framerate. - The result is also slowed down very slightly from 60 fields per - second to 60000/1001 fields per second to maintain NTSC fieldrate. -</para></listitem> -<listitem><para> - <emphasis role="bold">NTSC 2:2 pulldown</emphasis>: Used for - showing 30fps material on NTSC. - Nice, just like 2:2 PAL pulldown. -</para></listitem> -</itemizedlist> - -<para> -There are also methods for converting between NTSC and PAL video, -but such topics are beyond the scope of this guide. -If you encounter such a movie and want to encode it, your best -bet is to find a copy in the original format. -Conversion between these two formats is highly destructive and -cannot be reversed cleanly, so your encode will greatly suffer -if it is made from a converted source. -</para> - -<para> -When video is stored on DVD, consecutive pairs of fields are -grouped as a frame, even though they are not intended to be shown -at the same moment in time. -The MPEG-2 standard used on DVD and digital TV provides a -way both to encode the original progressive frames and to store -the number of fields for which a frame should be shown in the -header of that frame. -If this method has been used, the movie will often be described -as "soft-telecined", since the process only directs the -DVD player to apply pulldown to the movie rather than altering -the movie itself. -This case is highly preferable since it can easily be reversed -(actually ignored) by the encoder, and since it preserves maximal -quality. -However, many DVD and broadcast production studios do not use -proper encoding techniques but instead produce movies with -"hard telecine", where fields are actually duplicated in the -encoded MPEG-2. -</para> - -<para> -The procedures for dealing with these cases will be covered -<link linkend="menc-feat-telecine">later in this guide</link>. -For now, we leave you with some guides to identifying which type -of material you are dealing with: -</para> - -<itemizedlist> -<title>NTSC regions:</title> -<listitem><para> - If <application>MPlayer</application> prints that the framerate - has changed to 24000/1001 when watching your movie, and never changes - back, it is almost certainly progressive content that has been - "soft telecined". -</para></listitem> -<listitem><para> - If <application>MPlayer</application> shows the framerate - switching back and forth between 24000/1001 and 30000/1001, and you see - "combing" at times, then there are several possibilities. - The 24000/1001 fps segments are almost certainly progressive - content, "soft telecined", but the 30000/1001 fps parts could be - either hard-telecined 24000/1001 fps content or 60000/1001 fields per second - NTSC video. - Use the same guidelines as the following two cases to determine which. -</para></listitem> -<listitem><para> - If <application>MPlayer</application> never shows the framerate - changing, and every single frame with motion appears combed, your - movie is NTSC video at 60000/1001 fields per second. -</para></listitem> -<listitem><para> - If <application>MPlayer</application> never shows the framerate - changing, and two frames out of every five appear combed, your - movie is "hard telecined" 24000/1001fps content. -</para></listitem> -</itemizedlist> - -<itemizedlist> -<title>PAL regions:</title> -<listitem><para> - If you never see any combing, your movie is 2:2 pulldown. -</para></listitem> -<listitem><para> - If you see combing alternating in and out every half second, - then your movie is 2:2:2:2:2:2:2:2:2:2:2:3 pulldown. -</para></listitem> -<listitem><para> - If you always see combing during motion, then your movie is PAL - video at 50 fields per second. -</para></listitem> -</itemizedlist> - -<note><title>Hint:</title> -<para> - <application>MPlayer</application> can slow down movie playback - with the -speed option or play it frame-by-frame. - Try using <option>-speed</option> 0.2 to watch the movie very - slowly or press the "<keycap>.</keycap>" key repeatedly to play one frame at - a time and identify the pattern, if you cannot see it at full speed. -</para> -</note> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-2pass"> -<title>Constant quantizer vs. multipass</title> - -<para> -It is possible to encode your movie at a wide range of qualities. -With modern video encoders and a bit of pre-codec compression -(downscaling and denoising), it is possible to achieve very good -quality at 700 MB, for a 90-110 minute widescreen movie. -Furthermore, all but the longest movies can be encoded with near-perfect -quality at 1400 MB. -</para> - -<para> -There are three approaches to encoding the video: constant bitrate -(CBR), constant quantizer, and multipass (ABR, or average bitrate). -</para> - -<para> -The complexity of the frames of a movie, and thus the number of bits -required to compress them, can vary greatly from one scene to another. -Modern video encoders can adjust to these needs as they go and vary -the bitrate. -In simple modes such as CBR, however, the encoders do not know the -bitrate needs of future scenes and so cannot exceed the requested -average bitrate for long stretches of time. -More advanced modes, such as multipass encode, can take into account -the statistics from previous passes; this fixes the problem mentioned -above. -</para> - -<note><title>Note:</title> -<para> -Most codecs which support ABR encode only support two pass encode -while some others such as <systemitem class="library">x264</systemitem>, -<systemitem class="library">Xvid</systemitem> -and <systemitem class="library">libavcodec</systemitem> support -multipass, which slightly improves quality at each pass, -yet this improvement is no longer measurable nor noticeable after the -4th or so pass. -Therefore, in this section, two pass and multipass will be used -interchangeably. -</para> -</note> - -<para> -In each of these modes, the video codec (such as -<systemitem class="library">libavcodec</systemitem>) -breaks the video frame into 16x16 pixel macroblocks and then applies a -quantizer to each macroblock. The lower the quantizer, the better the -quality and higher the bitrate. -The method the movie encoder uses to determine -which quantizer to use for a given macroblock varies and is highly -tunable. (This is an extreme over-simplification of the actual -process, but the basic concept is useful to understand.) -</para> - -<para> -When you specify a constant bitrate, the video codec will encode the video, -discarding -detail as much as necessary and as little as possible in order to remain -lower than the given bitrate. If you truly do not care about file size, -you could as well use CBR and specify a bitrate of infinity. (In -practice, this means a value high enough so that it poses no limit, like -10000Kbit.) With no real restriction on bitrate, the result is that -the codec will use the lowest -possible quantizer for each macroblock (as specified by -<option>vqmin</option> for -<systemitem class="library">libavcodec</systemitem>, which is 2 by default). -As soon as you specify a -low enough bitrate that the codec -is forced to use a higher quantizer, then you are almost certainly ruining -the quality of your video. -In order to avoid that, you should probably downscale your video, according -to the method described later on in this guide. -In general, you should avoid CBR altogether if you care about quality. -</para> - -<para> -With constant quantizer, the codec uses the same quantizer, as -specified by the <option>vqscale</option> option (for -<systemitem class="library">libavcodec</systemitem>), on every macroblock. -If you want the highest quality rip possible, again ignoring bitrate, -you can use <option>vqscale=2</option>. -This will yield the same bitrate and PSNR (peak signal-to-noise ratio) -as CBR with -<option>vbitrate</option>=infinity and the default <option>vqmin</option> -of 2. -</para> - -<para> -The problem with constant quantizing is that it uses the given quantizer -whether the macroblock needs it or not. That is, it might be possible -to use a higher quantizer on a macroblock without sacrificing visual -quality. Why waste the bits on an unnecessarily low quantizer? Your -CPU has as many cycles as there is time, but there is only so many bits -on your hard disk. -</para> - -<para> -With a two pass encode, the first pass will rip the movie as though it -were CBR, but it will keep a log of properties for each frame. This -data is then used during the second pass in order to make intelligent -decisions about which quantizers to use. During fast action or high -detail scenes, higher quantizers will likely be used, and during -slow moving or low detail scenes, lower quantizers will be used. -Normally, the amount of motion is much more important than the -amount of detail. -</para> - -<para> -If you use <option>vqscale=2</option>, then you are wasting bits. If you -use <option>vqscale=3</option>, then you are not getting the highest -quality rip. Suppose you rip a DVD at <option>vqscale=3</option>, and -the result is 1800Kbit. If you do a two pass encode with -<option>vbitrate=1800</option>, the resulting video will have -<emphasis role="bold">higher quality</emphasis> for the -<emphasis role="bold">same bitrate</emphasis>. -</para> - -<para> -Since you are now convinced that two pass is the way to go, the real -question now is what bitrate to use? The answer is that there is no -single answer. Ideally you want to choose a bitrate that yields the -best balance between quality and file size. This is going to vary -depending on the source video. -</para> - -<para> -If size does not matter, a good starting point for a very high quality -rip is about 2000Kbit plus or minus 200Kbit. -For fast action or high detail source video, or if you just have a very -critical eye, you might decide on 2400 or 2600. -For some DVDs, you might not notice a difference at 1400Kbit. It is a -good idea to experiment with scenes at different bitrates to get a feel. -</para> - -<para> -If you aim at a certain size, you will have to somehow calculate the bitrate. -But before that, you need to know how much space you should reserve for the -audio track(s), so you should -<link linkend="menc-feat-dvd-mpeg4-audio">rip those</link> first. -You can compute the bitrate with the following equation: -<systemitem>bitrate = (target_size_in_Mbytes - sound_size_in_Mbytes) * -1024 * 1024 / length_in_secs * 8 / 1000</systemitem> -For instance, to squeeze a two-hour movie onto a 702MB CD, with 60MB -of audio track, the video bitrate will have to be: -<systemitem>(702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 -= 740kbps</systemitem> -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-constraints"> -<title>Constraints for efficient encoding</title> - -<para> -Due to the nature of MPEG-type compression, there are various -constraints you should follow for maximal quality. -MPEG splits the video up into 16x16 squares called macroblocks, -each composed of 4 8x8 blocks of luma (intensity) information and two -half-resolution 8x8 chroma (color) blocks (one for red-cyan axis and -the other for the blue-yellow axis). -Even if your movie width and height are not multiples of 16, the -encoder will use enough 16x16 macroblocks to cover the whole picture -area, and the extra space will go to waste. -So in the interests of maximizing quality at a fixed file size, it is -a bad idea to use dimensions that are not multiples of 16. -</para> - -<para> -Most DVDs also have some degree of black borders at the edges. Leaving -these in place will hurt quality <emphasis role="bold">a lot</emphasis> -in several ways. -</para> - -<orderedlist> -<listitem> - <para> - MPEG-type compression is highly dependent on frequency domain - transformations, in particular the Discrete Cosine Transform (DCT), - which is similar to the Fourier transform. This sort of encoding is - efficient for representing patterns and smooth transitions, but it - has a hard time with sharp edges. In order to encode them it must - use many more bits, or else an artifact known as ringing will - appear. - </para> - - <para> - The frequency transform (DCT) takes place separately on each - macroblock (actually each block), so this problem only applies when - the sharp edge is inside a block. If your black borders begin - exactly at multiple-of-16 pixel boundaries, this is not a problem. - However, the black borders on DVDs rarely come nicely aligned, so - in practice you will always need to crop to avoid this penalty. - </para> -</listitem> -</orderedlist> - -<para> -In addition to frequency domain transforms, MPEG-type compression uses -motion vectors to represent the change from one frame to the next. -Motion vectors naturally work much less efficiently for new content -coming in from the edges of the picture, because it is not present in -the previous frame. As long as the picture extends all the way to the -edge of the encoded region, motion vectors have no problem with -content moving out the edges of the picture. However, in the presence -of black borders, there can be trouble: -</para> - -<orderedlist continuation="continues"> -<listitem> - <para> - For each macroblock, MPEG-type compression stores a vector - identifying which part of the previous frame should be copied into - this macroblock as a base for predicting the next frame. Only the - remaining differences need to be encoded. If a macroblock spans the - edge of the picture and contains part of the black border, then - motion vectors from other parts of the picture will overwrite the - black border. This means that lots of bits must be spent either - re-blackening the border that was overwritten, or (more likely) a - motion vector will not be used at all and all the changes in this - macroblock will have to be coded explicitly. Either way, encoding - efficiency is greatly reduced. - </para> - - <para> - Again, this problem only applies if black borders do not line up on - multiple-of-16 boundaries. - </para> -</listitem> - -<listitem> - <para> - Finally, suppose we have a macroblock in the interior of the - picture, and an object is moving into this block from near the edge - of the image. MPEG-type coding cannot say "copy the part that is - inside the picture but not the black border." So the black border - will get copied inside too, and lots of bits will have to be spent - encoding the part of the picture that is supposed to be there. - </para> - - <para> - If the picture runs all the way to the edge of the encoded area, - MPEG has special optimizations to repeatedly copy the pixels at the - edge of the picture when a motion vector comes from outside the - encoded area. This feature becomes useless when the movie has black - borders. Unlike problems 1 and 2, aligning the borders at multiples - of 16 does not help here. - </para> -</listitem> - -<listitem><para> - Despite the borders being entirely black and never changing, there - is at least a minimal amount of overhead involved in having more - macroblocks. -</para></listitem> -</orderedlist> - -<para> -For all of these reasons, it is recommended to fully crop black -borders. Further, if there is an area of noise/distortion at the edge -of the picture, cropping this will improve encoding efficiency as -well. Videophile purists who want to preserve the original as close as -possible may object to this cropping, but unless you plan to encode at -constant quantizer, the quality you gain from cropping will -considerably exceed the amount of information lost at the edges. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-crop"> -<title>Cropping and Scaling</title> - -<para> -Recall from the previous section that the final picture size you -encode should be a multiple of 16 (in both width and height). -This can be achieved by cropping, scaling, or a combination of both. -</para> - -<para> -When cropping, there are a few guidelines that must be followed to -avoid damaging your movie. -The normal YUV format, 4:2:0, stores chroma (color) information -subsampled, i.e. chroma is only sampled half as often in each -direction as luma (intensity) information. -Observe this diagram, where L indicates luma sampling points and C -chroma. -</para> - -<informaltable> -<?dbhtml table-width="40%" ?> -<?dbfo table-width="40%" ?> -<tgroup cols="8" align="center"> -<colspec colnum="1" colname="col1"/> -<colspec colnum="2" colname="col2"/> -<colspec colnum="3" colname="col3"/> -<colspec colnum="4" colname="col4"/> -<colspec colnum="5" colname="col5"/> -<colspec colnum="6" colname="col6"/> -<colspec colnum="7" colname="col7"/> -<colspec colnum="8" colname="col8"/> -<spanspec spanname="spa1-2" namest="col1" nameend="col2"/> -<spanspec spanname="spa3-4" namest="col3" nameend="col4"/> -<spanspec spanname="spa5-6" namest="col5" nameend="col6"/> -<spanspec spanname="spa7-8" namest="col7" nameend="col8"/> - <tbody> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - <row> - <entry spanname="spa1-2">C</entry> - <entry spanname="spa3-4">C</entry> - <entry spanname="spa5-6">C</entry> - <entry spanname="spa7-8">C</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - <row> - <entry spanname="spa1-2">C</entry> - <entry spanname="spa3-4">C</entry> - <entry spanname="spa5-6">C</entry> - <entry spanname="spa7-8">C</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - </tbody> -</tgroup> -</informaltable> - -<para> -As you can see, rows and columns of the image naturally come in pairs. -Thus your crop offsets and dimensions <emphasis>must</emphasis> be -even numbers. -If they are not, the chroma will no longer line up correctly with the -luma. -In theory, it is possible to crop with odd offsets, but it requires -resampling the chroma which is potentially a lossy operation and not -supported by the crop filter. -</para> - -<para> -Further, interlaced video is sampled as follows: -</para> - -<informaltable> -<?dbhtml table-width="80%" ?> -<?dbfo table-width="80%" ?> -<tgroup cols="16" align="center"> -<colspec colnum="1" colname="col1"/> -<colspec colnum="2" colname="col2"/> -<colspec colnum="3" colname="col3"/> -<colspec colnum="4" colname="col4"/> -<colspec colnum="5" colname="col5"/> -<colspec colnum="6" colname="col6"/> -<colspec colnum="7" colname="col7"/> -<colspec colnum="8" colname="col8"/> -<colspec colnum="9" colname="col9"/> -<colspec colnum="10" colname="col10"/> -<colspec colnum="11" colname="col11"/> -<colspec colnum="12" colname="col12"/> -<colspec colnum="13" colname="col13"/> -<colspec colnum="14" colname="col14"/> -<colspec colnum="15" colname="col15"/> -<colspec colnum="16" colname="col16"/> -<spanspec spanname="spa1-2" namest="col1" nameend="col2"/> -<spanspec spanname="spa3-4" namest="col3" nameend="col4"/> -<spanspec spanname="spa5-6" namest="col5" nameend="col6"/> -<spanspec spanname="spa7-8" namest="col7" nameend="col8"/> -<spanspec spanname="spa9-10" namest="col9" nameend="col10"/> -<spanspec spanname="spa11-12" namest="col11" nameend="col12"/> -<spanspec spanname="spa13-14" namest="col13" nameend="col14"/> -<spanspec spanname="spa15-16" namest="col15" nameend="col16"/> - <tbody> - <row> - <entry namest="col1" nameend="col8">Top field</entry> - <entry namest="col9" nameend="col16">Bottom field</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry spanname="spa1-2">C</entry> - <entry spanname="spa3-4">C</entry> - <entry spanname="spa5-6">C</entry> - <entry spanname="spa7-8">C</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry spanname="spa9-10">C</entry> - <entry spanname="spa11-12">C</entry> - <entry spanname="spa13-14">C</entry> - <entry spanname="spa15-16">C</entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry spanname="spa1-2">C</entry> - <entry spanname="spa3-4">C</entry> - <entry spanname="spa5-6">C</entry> - <entry spanname="spa7-8">C</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - <row> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry spanname="spa9-10">C</entry> - <entry spanname="spa11-12">C</entry> - <entry spanname="spa13-14">C</entry> - <entry spanname="spa15-16">C</entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - <entry>L</entry> - </row> - </tbody> -</tgroup> -</informaltable> - -<para> -As you can see, the pattern does not repeat until after 4 lines. -So for interlaced video, your y-offset and height for cropping must -be multiples of 4. -</para> - -<para> -Native DVD resolution is 720x480 for NTSC, and 720x576 for PAL, but -there is an aspect flag that specifies whether it is full-screen (4:3) or -wide-screen (16:9). Many (if not most) widescreen DVDs are not strictly -16:9, and will be either 1.85:1 or 2.35:1 (cinescope). This means that -there will be black bands in the video that will need to be cropped out. -</para> - -<para> -<application>MPlayer</application> provides a crop detection filter that -will determine the crop rectangle (<option>-vf cropdetect</option>). -Run <application>MPlayer</application> with -<option>-vf cropdetect</option> and it will print out the crop -settings to remove the borders. -You should let the movie run long enough that the whole picture -area is used, in order to get accurate crop values. -</para> - -<para> -Then, test the values you get with <application>MPlayer</application>, -using the command line which was printed by -<option>cropdetect</option>, and adjust the rectangle as needed. -The <option>rectangle</option> filter can help by allowing you to -interactively position the crop rectangle over your movie. -Remember to follow the above divisibility guidelines so that you -do not misalign the chroma planes. -</para> - -<para> -In certain cases, scaling may be undesirable. -Scaling in the vertical direction is difficult with interlaced -video, and if you wish to preserve the interlacing, you should -usually refrain from scaling. -If you will not be scaling but you still want to use multiple-of-16 -dimensions, you will have to overcrop. -Do not undercrop, since black borders are very bad for encoding! -</para> - -<para> -Because MPEG-4 uses 16x16 macroblocks, you will want to make sure that each -dimension of the video you are encoding is a multiple of 16 or else you -will be degrading quality, especially at lower bitrates. You can do this -by rounding the width and height of the crop rectangle down to the nearest -multiple of 16. -As stated earlier, when cropping, you will want to increase the Y offset by -half the difference of the old and the new height so that the resulting -video is taken from the center of the frame. And because of the way DVD -video is sampled, make sure the offset is an even number. (In fact, as a -rule, never use odd values for any parameter when you are cropping and -scaling video.) If you are not comfortable throwing a few extra pixels -away, you might prefer to scale the video instead. We will look -at this in our example below. -You can actually let the <option>cropdetect</option> filter do all of the -above for you, as it has an optional <option>round</option> parameter that -is equal to 16 by default. -</para> - -<para> -Also, be careful about "half black" pixels at the edges. Make sure you -crop these out too, or else you will be wasting bits there that -are better spent elsewhere. -</para> - -<para> -After all is said and done, you will probably end up with video whose pixels -are not quite 1.85:1 or 2.35:1, but rather something close to that. You -could calculate the new aspect ratio manually, but -<application>MEncoder</application> offers an option for <systemitem -class="library">libavcodec</systemitem> called <option>autoaspect</option> -that will do this for you. Absolutely do not scale this video up in order to -square the pixels unless you like to waste your hard disk space. Scaling -should be done on playback, and the player will use the aspect stored in -the AVI to determine the correct resolution. -Unfortunately, not all players enforce this auto-scaling information, -therefore you may still want to rescale. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-resolution-bitrate"> -<title>Choosing resolution and bitrate</title> - -<para> -If you will not be encoding in constant quantizer mode, you need to -select a bitrate. -The concept of bitrate is quite simple. -It is the (average) number of bits that will be consumed to store your -movie, per second. -Normally bitrate is measured in kilobits (1000 bits) per second. -The size of your movie on disk is the bitrate times the length of the -movie in time, plus a small amount of "overhead" (see the section on -<link linkend="menc-feat-dvd-mpeg4-muxing-avi-limitations">the AVI container</link> -for instance). -Other parameters such as scaling, cropping, etc. will -<emphasis role="bold">not</emphasis> alter the file size unless you -change the bitrate as well! -</para> - -<para> -Bitrate does <emphasis role="bold">not</emphasis> scale proportionally -to resolution. -That is to say, a 320x240 file at 200 kbit/sec will not be the same -quality as the same movie at 640x480 and 800 kbit/sec! -There are two reasons for this: -<orderedlist> -<listitem><para> - <emphasis role="bold">Perceptual</emphasis>: You notice MPEG - artifacts more if they are scaled up bigger! - Artifacts appear on the scale of blocks (8x8). - Your eye will not see errors in 4800 small blocks as easily as it - sees errors in 1200 large blocks (assuming you will be scaling both - to fullscreen). -</para></listitem> -<listitem><para> - <emphasis role="bold">Theoretical</emphasis>: When you scale down - an image but still use the same size (8x8) blocks for the frequency - space transform, you move more data to the high frequency bands. - Roughly speaking, each pixel contains more of the detail than it - did before. - So even though your scaled-down picture contains 1/4 the information - in the spacial directions, it could still contain a large portion - of the information in the frequency domain (assuming that the high - frequencies were underutilized in the original 640x480 image). -</para></listitem> -</orderedlist> -</para> - -<para> -Past guides have recommended choosing a bitrate and resolution based -on a "bits per pixel" approach, but this is usually not valid due to -the above reasons. -A better estimate seems to be that bitrates scale proportional to the -square root of resolution, so that 320x240 and 400 kbit/sec would be -comparable to 640x480 at 800 kbit/sec. -However this has not been verified with theoretical or empirical -rigor. -Further, given that movies vary greatly with regard to noise, detail, -degree of motion, etc., it is futile to make general recommendations -for bits per length-of-diagonal (the analog of bits per pixel, -using the square root). -</para> -<para> -So far we have discussed the difficulty of choosing a bitrate and -resolution. -</para> - - -<sect3 id="menc-feat-dvd-mpeg4-resolution-bitrate-compute"> -<title>Computing the resolution</title> - -<para> -The following steps will guide you in computing the resolution of your -encode without distorting the video too much, by taking into account several -types of information about the source video. -First, you should compute the encoded aspect ratio: -<systemitem>ARc = (Wc x (ARa / PRdvd )) / Hc</systemitem> - -<itemizedlist> -<title>where:</title> -<listitem><para> - Wc and Hc are the width and height of the cropped video, -</para></listitem> -<listitem><para> - ARa is the displayed aspect ratio, which usually is 4/3 or 16/9, -</para></listitem> -<listitem><para> - PRdvd is the pixel ratio of the DVD which is equal to 1.25=(720/576) for PAL - DVDs and 1.5=(720/480) for NTSC DVDs. -</para></listitem> -</itemizedlist> -</para> - -<para> -Then, you can compute the X and Y resolution, according to a certain -Compression Quality (CQ) factor: -<systemitem>ResY = INT(SQRT( 1000*Bitrate/25/ARc/CQ )/16) * 16</systemitem> -and -<systemitem>ResX = INT( ResY * ARc / 16) * 16</systemitem> -</para> - -<para> -Okay, but what is the CQ? -The CQ represents the number of bits per pixel and per frame of the encode. -Roughly speaking, the greater the CQ, the less the likelihood to see -encoding artifacts. -However, if you have a target size for your movie (1 or 2 CDs for instance), -there is a limited total number of bits that you can spend; therefore it is -necessary to find a good tradeoff between compressibility and quality. -</para> - -<para> -The CQ depends on the bitrate, the video codec efficiency and the -movie resolution. -In order to raise the CQ, typically you would downscale the movie given that the -bitrate is computed in function of the target size and the length of the -movie, which are constant. -With MPEG-4 ASP codecs such as <systemitem class="library">Xvid</systemitem> -and <systemitem class="library">libavcodec</systemitem>, a CQ below 0.18 -usually results in a pretty blocky picture, because there -are not enough bits to code the information of each macroblock. (MPEG4, like -many other codecs, groups pixels by blocks of several pixels to compress the -image; if there are not enough bits, the edges of those blocks are -visible.) -It is therefore wise to take a CQ ranging from 0.20 to 0.22 for a 1 CD rip, -and 0.26-0.28 for 2 CDs rip with standard encoding options. -More advanced encoding options such as those listed here for -<link linkend="menc-feat-mpeg4-lavc-example-settings"><systemitem class="library">libavcodec</systemitem></link> -and -<link linkend="menc-feat-xvid-example-settings"><systemitem class="library">Xvid</systemitem></link> -should make it possible to get the same quality with CQ ranging from -0.18 to 0.20 for a 1 CD rip, and 0.24 to 0.26 for a 2 CD rip. -With MPEG-4 AVC codecs such as <systemitem class="library">x264</systemitem>, -you can use a CQ ranging from 0.14 to 0.16 with standard encoding options, -and should be able to go as low as 0.10 to 0.12 with -<link linkend="menc-feat-x264-example-settings"><systemitem class="library">x264</systemitem>'s advanced encoding settings</link>. -</para> - -<para> -Please take note that the CQ is just an indicative figure, as depending on -the encoded content, a CQ of 0.18 may look just fine for a Bergman, contrary -to a movie such as The Matrix, which contains many high-motion scenes. -On the other hand, it is worthless to raise CQ higher than 0.30 as you would -be wasting bits without any noticeable quality gain. -Also note that as mentioned earlier in this guide, low resolution videos -need a bigger CQ (compared to, for instance, DVD resolution) to look good. -</para> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-filtering"> -<title>Filtering</title> - -<para> -Learning how to use <application>MEncoder</application>'s video filters -is essential to producing good encodes. -All video processing is performed through the filters -- cropping, -scaling, color adjustment, noise removal, sharpening, deinterlacing, -telecine, inverse telecine, and deblocking, just to name a few. -Along with the vast number of supported input formats, the variety of -filters available in <application>MEncoder</application> is one of its -main advantages over other similar programs. -</para> - -<para> -Filters are loaded in a chain using the -vf option: - -<screen>-vf filter1=options,filter2=options,...</screen> - -Most filters take several numeric options separated by colons, but -the syntax for options varies from filter to filter, so read the man -page for details on the filters you wish to use. -</para> - -<para> -Filters operate on the video in the order they are loaded. -For example, the following chain: - -<screen>-vf crop=688:464:12:4,scale=640:464</screen> - -will first crop the 688x464 region of the picture with upper-left -corner at (12,4), and then scale the result down to 640x464. -</para> - -<para> -Certain filters need to be loaded at or near the beginning of the -filter chain, in order to take advantage of information from the -video decoder that will be lost or invalidated by other filters. -The principal examples are <option>pp</option> (postprocessing, only -when it is performing deblock or dering operations), -<option>spp</option> (another postprocessor to remove MPEG artifacts), -<option>pullup</option> (inverse telecine), and -<option>softpulldown</option> (for converting soft telecine to hard telecine). -</para> - -<para> -In general, you want to do as little filtering as possible to the movie -in order to remain close to the original DVD source. Cropping is often -necessary (as described above), but avoid to scale the video. Although -scaling down is sometimes preferred to using higher quantizers, we want -to avoid both these things: remember that we decided from the start to -trade bits for quality. -</para> - -<para> -Also, do not adjust gamma, contrast, brightness, etc. What looks good -on your display may not look good on others. These adjustments should -be done on playback only. -</para> - -<para> -One thing you might want to do, however, is pass the video through a -very light denoise filter, such as <option>-vf hqdn3d=2:1:2</option>. -Again, it is a matter of putting those bits to better use: why waste them -encoding noise when you can just add that noise back in during playback? -Increasing the parameters for <option>hqdn3d</option> will further -improve compressibility, but if you increase the values too much, you -risk degrading the image visibly. The suggested values above -(<option>2:1:2</option>) are quite conservative; you should feel free to -experiment with higher values and observe the results for yourself. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-interlacing"> -<title>Interlacing and Telecine</title> - -<para> -Almost all movies are shot at 24 fps. Because NTSC is 30000/1001 fps, some -processing must be done to this 24 fps video to make it run at the correct -NTSC framerate. The process is called 3:2 pulldown, commonly referred to -as telecine (because pulldown is often applied during the telecine -process), and, naively described, it works by slowing the film down to -24000/1001 fps, and repeating every fourth frame. -</para> - -<para> -No special processing, however, is done to the video for PAL DVDs, which -run at 25 fps. (Technically, PAL can be telecined, called 2:2 pulldown, -but this does not become an issue in practice.) The 24 fps film is simply -played back at 25 fps. The result is that the movie runs slightly faster, -but unless you are an alien, you probably will not notice the difference. -Most PAL DVDs have pitch-corrected audio, so when they are played back at -25 fps things will sound right, even though the audio track (and hence the -whole movie) has a running time that is 4% less than NTSC DVDs. -</para> - -<para> -Because the video in a PAL DVD has not been altered, you need not worry -much about framerate. The source is 25 fps, and your rip will be 25 -fps. However, if you are ripping an NTSC DVD movie, you may need to -apply inverse telecine. -</para> - -<para> -For movies shot at 24 fps, the video on the NTSC DVD is either telecined -30000/1001, or else it is progressive 24000/1001 fps and intended to be -telecined on-the-fly by a DVD player. On the other hand, TV series are usually -only interlaced, not telecined. This is not a hard rule: some TV series -are interlaced (such as Buffy the Vampire Slayer) whereas some are a -mixture of progressive and interlaced (such as Angel, or 24). -</para> - -<para> -It is highly recommended that you read the section on -<link linkend="menc-feat-telecine">How to deal with telecine and interlacing in NTSC DVDs</link> -to learn how to handle the different possibilities. -</para> - -<para> -However, if you are mostly just ripping movies, likely you are either -dealing with 24 fps progressive or telecined video, in which case you can -use the <option>pullup</option> filter <option>-vf -pullup,softskip</option>. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-encoding-interlaced"> -<title>Encoding interlaced video</title> - -<para> -If the movie you want to encode is interlaced (NTSC video or -PAL video), you will need to choose whether you want to -deinterlace or not. -While deinterlacing will make your movie usable on progressive -scan displays such a computer monitors and projectors, it comes -at a cost: The fieldrate of 50 or 60000/1001 fields per second -is halved to 25 or 30000/1001 frames per second, and roughly half of -the information in your movie will be lost during scenes with -significant motion. -</para> - -<para> -Therefore, if you are encoding for high quality archival purposes, -it is recommended not to deinterlace. -You can always deinterlace the movie at playback time when -displaying it on progressive scan devices. -The power of currently available computers forces players to use a -deinterlacing filter, which results in a slight degradation in -image quality. -But future players will be able to mimic the interlaced display of -a TV, deinterlacing to full fieldrate and interpolating 50 or -60000/1001 entire frames per second from the interlaced video. -</para> - -<para> -Special care must be taken when working with interlaced video: -</para> - -<orderedlist> -<listitem><para> - Crop height and y-offset must be multiples of 4. -</para></listitem> -<listitem><para> - Any vertical scaling must be performed in interlaced mode. -</para></listitem> -<listitem><para> - Postprocessing and denoising filters may not work as expected - unless you take special care to operate them a field at a time, - and they may damage the video if used incorrectly. -</para></listitem> -</orderedlist> - -<para> -With these things in mind, here is our first example: -<screen> -mencoder <replaceable>capture.avi</replaceable> -mc 0 -oac lavc -ovc lavc -lavcopts \ - vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224 -</screen> -Note the <option>ilme</option> and <option>ildct</option> options. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-av-sync"> -<title>Notes on Audio/Video synchronization</title> - -<para> -<application>MEncoder</application>'s audio/video synchronization -algorithms were designed with the intention of recovering files with -broken sync. -However, in some cases they can cause unnecessary skipping and duplication of -frames, and possibly slight A/V desync, when used with proper input -(of course, A/V sync issues apply only if you process or copy the -audio track while transcoding the video, which is strongly encouraged). -Therefore, you may have to switch to basic A/V sync with -the <option>-mc 0</option> option, or put this in your -<systemitem>~/.mplayer/mencoder</systemitem> config file, as long as -you are only working with good sources (DVD, TV capture, high quality -MPEG-4 rips, etc) and not broken ASF/RM/MOV files. -</para> - -<para> -If you want to further guard against strange frame skips and -duplication, you can use both <option>-mc 0</option> and -<option>-noskip</option>. -This will prevent <emphasis>all</emphasis> A/V sync, and copy frames -one-to-one, so you cannot use it if you will be using any filters that -unpredictably add or drop frames, or if your input file has variable -framerate! -Therefore, using <option>-noskip</option> is not in general recommended. -</para> - -<para> -The so-called "three-pass" audio encoding which -<application>MEncoder</application> supports has been reported to cause A/V -desync. -This will definitely happen if it is used in conjunction with certain -filters, therefore, it is now recommended <emphasis>not</emphasis> to -use three-pass audio mode. -This feature is only left for compatibility purposes and for expert -users who understand when it is safe to use and when it is not. -If you have never heard of three-pass mode before, forget that we -even mentioned it! -</para> - -<para> -There have also been reports of A/V desync when encoding from stdin -with <application>MEncoder</application>. -Do not do this! Always use a file or CD/DVD/etc device as input. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-codec"> -<title>Choosing the video codec</title> - -<para> -Which video codec is best to choose depends on several factors, -like size, quality, streamability, usability and popularity, some of -which widely depend on personal taste and technical constraints. -</para> -<itemizedlist> -<listitem> - <para> - <emphasis role="bold">Compression efficiency</emphasis>: - It is quite easy to understand that most newer-generation codecs are - made to increase quality and compression. - Therefore, the authors of this guide and many other people suggest that - you cannot go wrong - <footnote id='fn-menc-feat-dvd-mpeg4-codec-cpu'><para> - Be careful, however: Decoding DVD-resolution MPEG-4 AVC videos - requires a fast machine (i.e. a Pentium 4 over 1.5GHz or a Pentium M - over 1GHz). - </para></footnote> - when choosing MPEG-4 AVC codecs like - <systemitem class="library">x264</systemitem> instead of MPEG-4 ASP codecs - such as <systemitem class="library">libavcodec</systemitem> MPEG-4 or - <systemitem class="library">Xvid</systemitem>. - (Advanced codec developers may be interested in reading Michael - Niedermayer's opinion on - "<ulink url="http://guru.multimedia.cx/?p=10">why MPEG4-ASP sucks</ulink>".) - Likewise, you should get better quality using MPEG-4 ASP than you - would with MPEG-2 codecs. - </para> - - <para> - However, newer codecs which are in heavy development can suffer from - bugs which have not yet been noticed and which can ruin an encode. - This is simply the tradeoff for using bleeding-edge technology. - </para> - - <para> - What is more, beginning to use a new codec requires that you spend some - time becoming familiar with its options, so that you know what - to adjust to achieve a desired picture quality. - </para> -</listitem> - -<listitem><para> - <emphasis role="bold">Hardware compatibility</emphasis>: - It usually takes a long time for standalone video players to begin to - include support for the latest video codecs. - As a result, most only support MPEG-1 (like VCD, XVCD and KVCD), MPEG-2 - (like DVD, SVCD and KVCD) and MPEG-4 ASP (like DivX, - <systemitem class="library">libavcodec</systemitem>'s LMP4 and - <systemitem class="library">Xvid</systemitem>) - (Beware: Usually, not all MPEG-4 ASP features are supported). - Please refer to the technical specs of your player (if they are available), - or google around for more information. -</para></listitem> - -<listitem> - <para> - <emphasis role="bold">Best quality per encoding time</emphasis>: - Codecs that have been around for some time (such as - <systemitem class="library">libavcodec</systemitem> MPEG-4 and - <systemitem class="library">Xvid</systemitem>) are usually heavily - optimized with all kinds of smart algorithms and SIMD assembly code. - That is why they tend to yield the best quality per encoding time ratio. - However, they may have some very advanced options that, if enabled, - will make the encode really slow for marginal gains. - </para> - - <para> - If you are after blazing speed you should stick around the default - settings of the video codec (although you should still try the other - options which are mentioned in other sections of this guide). - </para> - - <para> - You may also consider choosing a codec which can do multi-threaded - processing, though this is only useful for users of machines with - several CPUs. - <systemitem class="library">libavcodec</systemitem> MPEG-4 does - allow that, but speed gains are limited, and there is a slight - negative effect on picture quality. - <systemitem class="library">Xvid</systemitem>'s multi-threaded encoding, - activated by the <option>threads</option> option, can be used to - boost encoding speed — by about 40-60% in typical cases — - with little if any picture degradation. - <systemitem class="library">x264</systemitem> also allows multi-threaded - encoding, which currently speeds up encoding by 94% per CPU core while - lowering PSNR between 0.005dB and 0.01dB on a typical setup. - </para> -</listitem> - -<listitem> - <para> - <emphasis role="bold">Personal taste</emphasis>: - This is where it gets almost irrational: For the same reason that some - hung on to DivX 3 for years when newer codecs were already doing wonders, - some folks will prefer <systemitem class="library">Xvid</systemitem> - or <systemitem class="library">libavcodec</systemitem> MPEG-4 over - <systemitem class="library">x264</systemitem>. - </para> - <para> - You should make your own judgement; do not take advice from people who - swear by one codec. - Take a few sample clips from raw sources and compare different - encoding options and codecs to find one that suits you best. - The best codec is the one you master, and the one that looks - best to your eyes on your display - <footnote id='fn-menc-feat-dvd-mpeg4-codec-playback'><para> - The same encode may not look the same on someone else's monitor or - when played back by a different decoder, so future-proof your encodes by - playing them back on different setups. - </para></footnote>! - </para> -</listitem> -</itemizedlist> - -<para> -Please refer to the section -<link linkend="menc-feat-selecting-codec">selecting codecs and container formats</link> -to get a list of supported codecs. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-audio"> -<title>Audio</title> - -<para> -Audio is a much simpler problem to solve: if you care about quality, just -leave it as is. -Even AC-3 5.1 streams are at most 448Kbit/s, and they are worth every bit. -You might be tempted to transcode the audio to high quality Vorbis, but -just because you do not have an A/V receiver for AC-3 pass-through today -does not mean you will not have one tomorrow. Future-proof your DVD rips by -preserving the AC-3 stream. -You can keep the AC-3 stream either by copying it directly into the video -stream <link linkend="menc-feat-mpeg4">during the encoding</link>. -You can also extract the AC-3 stream in order to mux it into containers such -as NUT or Matroska. -<screen> -mplayer <replaceable>source_file.vob</replaceable> -aid 129 -dumpaudio -dumpfile <replaceable>sound.ac3</replaceable> -</screen> -will dump into the file <replaceable>sound.ac3</replaceable> the -audio track number 129 from the file -<replaceable>source_file.vob</replaceable> (NB: DVD VOB files -usually use a different audio numbering, -which means that the VOB audio track 129 is the 2nd audio track of the file). -</para> - -<para> -But sometimes you truly have no choice but to further compress the -sound so that more bits can be spent on the video. -Most people choose to compress audio with either MP3 or Vorbis audio codecs. -While the latter is a very space-efficient codec, MP3 is better supported -by hardware players, although this trend is changing. -</para> - -<para> -Do <emphasis>not</emphasis> use <option>-nosound</option> when encoding -a file with audio, even if you will be encoding and muxing audio -separately later. -Though it may work in ideal cases, using <option>-nosound</option> is -likely to hide some problems in your encoding command line setting. -In other words, having a soundtrack during your encode assures you that, -provided you do not see messages such as -<quote>Too many audio packets in the buffer</quote>, you will be able -to get proper sync. -</para> - -<para> -You need to have <application>MEncoder</application> process the sound. -You can for example copy the original soundtrack during the encode with -<option>-oac copy</option> or convert it to a "light" 4 kHz mono WAV -PCM with <option>-oac pcm -channels 1 -srate 4000</option>. -Otherwise, in some cases, it will generate a video file that will not sync -with the audio. -Such cases are when the number of video frames in the source file does -not match up to the total length of audio frames or whenever there -are discontinuities/splices where there are missing or extra audio frames. -The correct way to handle this kind of problem is to insert silence or -cut audio at these points. -However <application>MPlayer</application> cannot do that, so if you -demux the AC-3 audio and encode it with a separate app (or dump it to PCM with -<application>MPlayer</application>), the splices will be left incorrect -and the only way to correct them is to drop/duplicate video frames at the -splice. -As long as <application>MEncoder</application> sees the audio when it is -encoding the video, it can do this dropping/duping (which is usually OK -since it takes place at full black/scene change), but if -<application>MEncoder</application> cannot see the audio, it will just -process all frames as-is and they will not fit the final audio stream when -you for example merge your audio and video track into a Matroska file. -</para> - -<para> -First of all, you will have to convert the DVD sound into a WAV file that the -audio codec can use as input. -For example: -<screen> -mplayer <replaceable>source_file.vob</replaceable> -ao pcm:file=<replaceable>destination_sound.wav</replaceable> \ - -vc dummy -aid 1 -vo null -</screen> -will dump the second audio track from the file -<replaceable>source_file.vob</replaceable> into the file -<replaceable>destination_sound.wav</replaceable>. -You may want to normalize the sound before encoding, as DVD audio tracks -are commonly recorded at low volumes. -You can use the tool <application>normalize</application> for instance, -which is available in most distributions. -If you are using Windows, a tool such as <application>BeSweet</application> -can do the same job. -You will compress in either Vorbis or MP3. -For example: -<screen>oggenc -q1 <replaceable>destination_sound.wav</replaceable></screen> -will encode <replaceable>destination_sound.wav</replaceable> with -the encoding quality 1, which is roughly equivalent to 80Kb/s, and -is the minimum quality at which you should encode if you care about -quality. -Please note that <application>MEncoder</application> currently cannot -mux Vorbis audio tracks -into the output file because it only supports AVI and MPEG -containers as an output, each of which may lead to audio/video -playback synchronization problems with some players when the AVI file -contain VBR audio streams such as Vorbis. -Do not worry, this document will show you how you can do that with third -party programs. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-muxing"> -<title>Muxing</title> - -<para> -Now that you have encoded your video, you will most likely want -to mux it with one or more audio tracks into a movie container, such -as AVI, MPEG, Matroska or NUT. -<application>MEncoder</application> is currently only able to natively output -audio and video into MPEG and AVI container formats. -for example: -<screen> -mencoder -oac copy -ovc copy -o <replaceable>output_movie.avi</replaceable> \ - -audiofile <replaceable>input_audio.mp2</replaceable> <replaceable>input_video.avi</replaceable> -</screen> -This would merge the video file <replaceable>input_video.avi</replaceable> -and the audio file <replaceable>input_audio.mp2</replaceable> -into the AVI file <replaceable>output_movie.avi</replaceable>. -This command works with MPEG-1 layer I, II and III (more commonly known -as MP3) audio, WAV and a few other audio formats too. -</para> - -<para> -<application>MEncoder</application> features experimental support for -<systemitem class="library">libavformat</systemitem>, which is a -library from the FFmpeg project that supports muxing and demuxing -a variety of containers. -For example: -<screen> -mencoder -oac copy -ovc copy -o <replaceable>output_movie.asf</replaceable> -audiofile <replaceable>input_audio.mp2</replaceable> \ - <replaceable>input_video.avi</replaceable> -of lavf -lavfopts format=asf -</screen> -This will do the same thing as the previous example, except that -the output container will be ASF. -Please note that this support is highly experimental (but getting -better every day), and will only work if you compiled -<application>MPlayer</application> with the support for -<systemitem class="library">libavformat</systemitem> enabled (which -means that a pre-packaged binary version will not work in most cases). -</para> - - -<sect3 id="menc-feat-dvd-mpeg4-muxing-filter-issues"> -<title>Improving muxing and A/V sync reliability</title> - -<para> -You may experience some serious A/V sync problems while trying to mux -your video and some audio tracks, where no matter how you adjust the -audio delay, you will never get proper sync. -That may happen when you use some video filters that will drop or -duplicate some frames, like the inverse telecine filters. -It is strongly encouraged to append the <option>harddup</option> video -filter at the end of the filter chain to avoid this kind of problem. -</para> - -<para> -Without <option>harddup</option>, if <application>MEncoder</application> -wants to duplicate a frame, it relies on the muxer to put a mark on the -container so that the last frame will be displayed again to maintain -sync while writing no actual frame. -With <option>harddup</option>, <application>MEncoder</application> -will instead just push the last frame displayed again into the filter -chain. -This means that the encoder receives the <emphasis>exact</emphasis> -same frame twice, and compresses it. -This will result in a slightly bigger file, but will not cause problems -when demuxing or remuxing into other container formats. -</para> - -<para> -You may also have no choice but to use <option>harddup</option> with -container formats that are not too tightly linked with -<application>MEncoder</application> such as the ones supported through -<systemitem class="library">libavformat</systemitem>, which may not -support frame duplication at the container level. -</para> -</sect3> - - -<sect3 id="menc-feat-dvd-mpeg4-muxing-avi-limitations"> -<title>Limitations of the AVI container</title> - -<para> -Although it is the most widely-supported container format after MPEG-1, -AVI also has some major drawbacks. -Perhaps the most obvious is the overhead. -For each chunk of the AVI file, 24 bytes are wasted on headers and index. -This translates into a little over 5 MB per hour, or 1-2.5% -overhead for a 700 MB movie. This may not seem like much, but it could -mean the difference between being able to use 700 kbit/sec video or -714 kbit/sec, and every bit of quality counts. -</para> - -<para> -In addition this gross inefficiency, AVI also has the following major -limitations: -</para> - -<orderedlist> -<listitem><para> - Only fixed-fps content can be stored. This is particularly limiting - if the original material you want to encode is mixed content, for - example a mix of NTSC video and film material. - Actually there are hacks that can be used to store mixed-framerate - content in AVI, but they increase the (already huge) overhead - fivefold or more and so are not practical. -</para></listitem> -<listitem><para> - Audio in AVI files must be either constant-bitrate (CBR) or - constant-framesize (i.e. all frames decode to the same number of - samples). - Unfortunately, the most efficient codec, Vorbis, does not meet - either of these requirements. - Therefore, if you plan to store your movie in AVI, you will have to - use a less efficient codec such as MP3 or AC-3. -</para></listitem> -</orderedlist> - -<para> -Having said all that, <application>MEncoder</application> does not -currently support variable-fps output or Vorbis encoding. -Therefore, you may not see these as limitations if -<application>MEncoder</application> is the -only tool you will be using to produce your encodes. -However, it is possible to use <application>MEncoder</application> -only for video encoding, and then use external tools to encode -audio and mux it into another container format. -</para> -</sect3> - - -<sect3 id="menc-feat-dvd-mpeg4-muxing-matroska"> -<title>Muxing into the Matroska container</title> - -<para> -Matroska is a free, open standard container format, aiming -to offer a lot of advanced features, which older containers -like AVI cannot handle. -For example, Matroska supports variable bitrate audio content -(VBR), variable framerates (VFR), chapters, file attachments, -error detection code (EDC) and modern A/V Codecs like "Advanced Audio -Coding" (AAC), "Vorbis" or "MPEG-4 AVC" (H.264), next to nothing -handled by AVI. -</para> - -<para> -The tools required to create Matroska files are collectively called -<application>mkvtoolnix</application>, and are available for most -Unix platforms as well as <application>Windows</application>. -Because Matroska is an open standard you may find other -tools that suit you better, but since mkvtoolnix is the most -common, and is supported by the Matroska team itself, we will -only cover its usage. -</para> - -<para> -Probably the easiest way to get started with Matroska is to use -<application>MMG</application>, the graphical frontend shipped with -<application>mkvtoolnix</application>, and follow the -<ulink url="http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html">guide to mkvmerge GUI (mmg)</ulink> -</para> - -<para> -You may also mux audio and video files using the command line: -<screen> -mkvmerge -o <replaceable>output.mkv</replaceable> <replaceable>input_video.avi</replaceable> <replaceable>input_audio1.mp3</replaceable> <replaceable>input_audio2.ac3</replaceable> -</screen> -This would merge the video file <replaceable>input_video.avi</replaceable> -and the two audio files <replaceable>input_audio1.mp3</replaceable> -and <replaceable>input_audio2.ac3</replaceable> into the Matroska -file <replaceable>output.mkv</replaceable>. -Matroska, as mentioned earlier, is able to do much more than that, like -multiple audio tracks (including fine-tuning of audio/video -synchronization), chapters, subtitles, splitting, etc... -Please refer to the documentation of those applications for -more details. -</para> -</sect3> -</sect2> -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-telecine"> -<title>How to deal with telecine and interlacing within NTSC DVDs</title> - -<sect2 id="menc-feat-telecine-intro"> -<title>Introduction</title> - -<formalpara> -<title>What is telecine?</title> -<para> -If you do not understand much of what is written in this document, read the -<ulink url="http://en.wikipedia.org/wiki/Telecine">Wikipedia entry on telecine</ulink>. -It is an understandable and reasonably comprehensive -description of what telecine is. -</para></formalpara> - -<formalpara> -<title>A note about the numbers.</title> -<para> -Many documents, including the article linked above, refer to the fields -per second value of NTSC video as 59.94 and the corresponding frames -per second values as 29.97 (for telecined and interlaced) and 23.976 -(for progressive). For simplicity, some documents even round these -numbers to 60, 30, and 24. -</para></formalpara> - -<para> -Strictly speaking, all those numbers are approximations. Black and -white NTSC video was exactly 60 fields per second, but 60000/1001 -was later chosen to accommodate color data while remaining compatible -with contemporary black and white televisions. Digital NTSC video -(such as on a DVD) is also 60000/1001 fields per second. From this, -interlaced and telecined video are derived to be 30000/1001 frames -per second; progressive video is 24000/1001 frames per second. -</para> - -<para> -Older versions of the <application>MEncoder</application> documentation -and many archived mailing list posts refer to 59.94, 29.97, and 23.976. -All <application>MEncoder</application> documentation has been updated -to use the fractional values, and you should use them too. -</para> - -<para> -<option>-ofps 23.976</option> is incorrect. -<option>-ofps 24000/1001</option> should be used instead. -</para> - -<formalpara> -<title>How telecine is used.</title> -<para> -All video intended to be displayed on an NTSC -television set must be 60000/1001 fields per second. Made-for-TV movies -and shows are often filmed directly at 60000/1001 fields per second, but -the majority of cinema is filmed at 24 or 24000/1001 frames per -second. When cinematic movie DVDs are mastered, the video is then -converted for television using a process called telecine. -</para></formalpara> - -<para> -On a DVD, the video is never actually stored as 60000/1001 fields per -second. For video that was originally 60000/1001, each pair of fields is -combined to form a frame, resulting in 30000/1001 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, 24000/1001 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 24000/1001 frames per second, it becomes 60000/1001 fields per -second. When it is stored on the DVD, pairs of fields are combined to form -30000/1001 frames per second. -</para> - -<para> -When looking at individual frames formed from 60000/1001 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/(60000/1001) -seconds 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> - -<itemizedlist> -<title>Notes:</title> -<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 maximal - quality is not within the scope of this section; refer to other - sections within the <link linkend="encoding-guide">MEncoder encoding - guide</link>. -</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> - -<!-- ********** --> - -<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 24000/1001 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: 24000/1001 fps progressive NTSC content detected, switching framerate. -</screen> -From this point forward, demux_mpg should never say it finds -"30000/1001 fps 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 would not expect. I have 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 on DVDs 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 24000/1001, 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</screen></listitem> -<listitem><para> - Seek to a part with motion. -</para></listitem> -<listitem><para> - Use the <keycap>.</keycap> key to step forward one frame at a time. -</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; - <application>MEncoder</application> cannot losslessly convert - non-standard telecine to progressive. If you do not see any - pattern at all, then it is most likely interlaced. -</para></listitem> -</orderedlist> -</para> - -<para> -Sometimes telecined video on DVDs is referred to as -"hard-telecine". Since hard-telecine is already 60000/1001 fields -per second, the DVD player plays the video without any manipulation. -</para> - -<para> -Another way to tell if your source is telecined or not is to play -the source with the <option>-vf pullup</option> and <option>-v</option> -command line options to see how <option>pullup</option> matches frames. -If the source is telecined, you should see on the console a 3:2 pattern -with <systemitem>0+.1.+2</systemitem> and <systemitem>0++1</systemitem> -alternating. -This technique has the advantage that you do not need to watch the -source to identify it, which could be useful if you wish to automate -the encoding procedure, or to carry out said procedure remotely via -a slow connection. -</para> -</sect3> - - -<sect3 id="menc-feat-telecine-ident-interlaced"> -<title>Interlaced</title> - -<para> -Interlaced video was originally filmed at 60000/1001 fields per second, -and stored on the DVD as 30000/1001 frames per second. The interlacing effect -(often called "combing") is a result of combining pairs of -fields into frames. Each field is supposed to be 1/(60000/1001) seconds apart, -and when they are displayed simultaneously the difference is apparent. -</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 by frame-stepping with the -<keycap>.</keycap> key, 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 -24000/1001 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 "30000/1001 fps NTSC" -and "24000/1001 fps progressive NTSC". Watch the bottom of -<application>MPlayer</application>'s output to see these messages. -</para> - -<para> -You should check the "30000/1001 fps 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 30000/1001 fps sections and see that they do not 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 24000/1001</option>. -Otherwise, <application>MEncoder</application> -will try to encode at 30000/1001 fps and will duplicate frames. -</para> - -<para> -<screen>mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001</screen> -</para> - -<para> -It is often the case, however, that a video that looks progressive -actually has very short parts of telecine mixed in. Unless you are -sure, it is safest to treat the video as -<link linkend="menc-feat-telecine-encode-mixedpt">mixed progressive and telecine</link>. -The performance loss is small -<link linkend="menc-feat-telecine-footnotes">[3]</link>. -</para> -</sect3> - - -<sect3 id="menc-feat-telecine-encode-telecined"> -<title>Telecined</title> - -<para> -Telecine can be reversed to retrieve the original 24000/1001 content, -using a process called inverse-telecine. -<application>MPlayer</application> contains several filters to -accomplish this; the best filter, <option>pullup</option>, is described -in the <link linkend="menc-feat-telecine-encode-mixedpt">mixed -progressive and telecine</link> section. -</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 -oac copy -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> and - <option>mplayer -vf help</option> to see what is available - (grep for "deint"), read Michael Niedermayer's - <ulink url="http://guru.multimedia.cx/deinterlacing-filters/">Deinterlacing filters comparison</ulink>, - and search the - <ulink url="http://www.mplayerhq.hu/design7/mailing_lists.html"> - 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 -oac copy -vf yadif -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 is not here yet. You - might experience crashes. Anyway, the purpose of <option> -vf - tfields</option> is to create a full frame out of each field, which - makes the framerate 60000/1001. 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 -oac copy -vf tfields=2 -ovc lavc \ - -fps 60000/1001 -ofps 60000/1001<!-- - --></screen> -</para></listitem> -<listitem><para> - If you plan on downscaling dramatically, you can extract and encode - only one of the two fields. Of course, you will lose half the vertical - resolution, but if you plan on downscaling to at most 1/2 of the - original, the loss will not matter much. The result will be a - progressive 30000/1001 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 will have to adjust the scale to - compensate for the vertical resolution being halved. - <screen>mencoder dvd://1 -oac copy -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 three ways to accomplish this, -described below. Note that you should -<emphasis role="bold">always</emphasis> inverse-telecine before any -rescaling; unless you really know what you are doing, -inverse-telecine before cropping, too -<link linkend="menc-feat-telecine-footnotes">[1]</link>. -<option>-ofps 24000/1001</option> is needed here because the output video -will be 24000/1001 frames per second. -</para> - -<itemizedlist> -<listitem><para> - <option>-vf pullup</option> is designed to inverse-telecine - telecined material while leaving progressive data alone. In order to - work properly, <option>pullup</option> <emphasis role="bold">must</emphasis> - be followed by the <option>softskip</option> filter or - else <application>MEncoder</application> will crash. - <option>pullup</option> is, however, the cleanest and most - accurate method available for encoding both telecine and - "mixed progressive and telecine". - <screen> -mencoder dvd://1 -oac copy -vf pullup,softskip - -ovc lavc -ofps 24000/1001<!-- - --></screen> -</para></listitem> -<listitem><para> - <option>-vf filmdint</option> is similar to - <option>-vf pullup</option>: both filters attempt to match a pair of - fields to form a complete frame. <option>filmdint</option> will - deinterlace individual fields that it cannot match, however, whereas - <option>pullup</option> will simply drop them. Also, the two filters - have separate detection code, and <option>filmdint</option> may tend to match fields a - bit less often. Which filter works better may depend on the input - video and personal taste; feel free to experiment with fine-tuning - the filters' options if you encounter problems with either one (see - the man page for details). For most well-mastered input video, - however, both filters work quite well, so either one is a safe choice - to start with. - <screen> -mencoder dvd://1 -oac copy -vf filmdint -ovc lavc -ofps 24000/1001<!-- - --></screen> -</para></listitem> -<listitem><para> - An older method - 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. <option>-ofps 24000/1001</option> is needed. - <screen> -mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001 - </screen> -</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 24000/1001 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/(60000/1001) 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. 30000/1001 frames per second interlaced - video is already a bit choppy because it really should be shown at - 60000/1001 fields per second, so the duplicate frames do not stand out as - much. - </para> - - <para> - Either way, it is 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 is - only half progressive, you probably want to encode it as if it is 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 will not 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 does not mean it - should not 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> - -<listitem><formalpara> - <title>About the performance of pullup:</title> - <para> - It is safe to use <option>pullup</option> (along with <option>softskip - </option>) on progressive video, and is usually a good idea unless - the source has been definitively verified to be entirely progressive. - The performance loss is small for most cases. On a bare-minimum encode, - <option>pullup</option> causes <application>MEncoder</application> to - be 50% slower. Adding sound processing and advanced <option>lavcopts - </option> overshadows that difference, bringing the performance - decrease of using <option>pullup</option> down to 2%. - </para> -</formalpara></listitem> -</orderedlist> -</sect2> -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-enc-libavcodec"> -<title>Encoding with the <systemitem class="library">libavcodec</systemitem> - codec family</title> - -<para> -<systemitem class="library">libavcodec</systemitem> -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): -</para> - -<!-- ********** --> - -<sect2 id="menc-feat-enc-libavcodec-video-codecs"> -<title><systemitem class="library">libavcodec</systemitem>'s - video codecs</title> - -<para> -<informaltable frame="all"> -<tgroup cols="2"> -<thead> - <row><entry>Video 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>jpegls</entry> - <entry>JPEG LS</entry> -</row> -<row> - <entry>targa</entry> - <entry>Targa image</entry> -</row> -<row> - <entry>gif</entry> - <entry>GIF image</entry> -</row> -<row> - <entry>bmp</entry> - <entry>BMP image</entry> -</row> -<row> - <entry>png</entry> - <entry>PNG image</entry> -</row> -<row> - <entry>h261</entry> - <entry>H.261</entry> -</row> -<row> - <entry>h263</entry> - <entry>H.263 </entry> -</row> -<row> - <entry>h263p</entry> - <entry>H.263+</entry> -</row> -<row> - <entry>mpeg4</entry> - <entry>ISO standard MPEG-4 (DivX, Xvid compatible)</entry> -</row> -<row> - <entry>msmpeg4</entry> - <entry>pre-standard MPEG-4 variant by MS, v3 (AKA DivX3)</entry> -</row> -<row> - <entry>msmpeg4v2</entry> - <entry>pre-standard MPEG-4 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>RealVideo 1.0</entry> -</row> -<row> - <entry>rv20</entry> - <entry>RealVideo 2.0</entry> -</row> -<row> - <entry>mpeg1video</entry> - <entry>MPEG-1 video</entry> -</row> -<row> - <entry>mpeg2video</entry> - <entry>MPEG-2 video</entry> -</row> -<row> - <entry>huffyuv</entry> - <entry>lossless compression</entry> -</row> -<row> - <entry>ffvhuff</entry> - <entry>FFmpeg modified huffyuv lossless</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> -<row> - <entry>svq1</entry> - <entry>Sorenson video 1</entry> -</row> -<row> - <entry>flv</entry> - <entry>Sorenson H.263 used in Flash Video</entry> -</row> -<row> - <entry>flashsv</entry> - <entry>Flash Screen Video</entry> -</row> -<row> - <entry>dvvideo</entry> - <entry>Sony Digital Video</entry> -</row> -<row> - <entry>snow</entry> - <entry>FFmpeg's experimental wavelet-based codec</entry> -</row> -<row> - <entry>zmbv</entry> - <entry>Zip Motion Blocks Video</entry> -</row> -<row> - <entry>dnxhd</entry> - <entry>AVID DNxHD</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 <replaceable>title2.avi</replaceable> -ovc lavc -lavcopts vcodec=mjpeg -oac copy -</screen> -</para></informalexample> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-enc-libavcodec-audio-codecs"> -<title><systemitem class="library">libavcodec</systemitem>'s - audio codecs</title> - -<para> -<informaltable frame="all"> -<tgroup cols="2"> -<thead> -<row><entry>Audio codec name</entry><entry>Description</entry></row> -</thead> -<tbody> -<row> - <entry>ac3</entry> - <entry>Dolby Digital (AC-3)</entry> -</row> -<row> - <entry>adpcm_*</entry> - <entry>Adaptive PCM formats - see supplementary table</entry> -</row> -<row> - <entry>flac</entry> - <entry>Free Lossless Audio Codec (FLAC)</entry> -</row> -<row> - <entry>g726</entry> - <entry>G.726 ADPCM</entry> -</row> -<row> - <entry>libfaac</entry> - <entry>Advanced Audio Coding (AAC) - using FAAC</entry> -</row> -<row> - <entry>libgsm</entry> - <entry>ETSI GSM 06.10 full rate</entry> -</row> -<row> - <entry>libgsm_ms</entry> - <entry>Microsoft GSM</entry> -</row> -<row> - <entry>libmp3lame</entry> - <entry>MPEG-1 audio layer 3 (MP3) - using LAME</entry> -</row> -<row> - <entry>mp2</entry> - <entry>MPEG-1 audio layer 2 (MP2)</entry> -</row> -<row> - <entry>pcm_*</entry> - <entry>PCM formats - see supplementary table</entry> -</row> -<row> - <entry>roq_dpcm</entry> - <entry>Id Software RoQ DPCM</entry> -</row> -<row> - <entry>sonic</entry> - <entry>experimental FFmpeg lossy codec</entry> -</row> -<row> - <entry>sonicls</entry> - <entry>experimental FFmpeg lossless codec</entry> -</row> -<row> - <entry>vorbis</entry> - <entry>Vorbis</entry> -</row> -<row> - <entry>wmav1</entry> - <entry>Windows Media Audio v1</entry> -</row> -<row> - <entry>wmav2</entry> - <entry>Windows Media Audio v2</entry> -</row> -</tbody> -</tgroup> -</informaltable> - -The first column contains the codec names that should be passed after the -<literal>acodec</literal> option, like: <option>-lavcopts acodec=ac3</option> -</para> - -<informalexample><para> -An example with AC-3 compression: -<screen> -mencoder dvd://2 -o <replaceable>title2.avi</replaceable> -oac lavc -lavcopts acodec=ac3 -ovc copy -</screen> -</para></informalexample> - -<para> -Contrary to <systemitem class="library">libavcodec</systemitem>'s video -codecs, its audio codecs do not make a wise usage of the bits they are -given as they lack some minimal psychoacoustic model (if at all) -which most other codec implementations feature. -However, note that all these audio codecs are very fast and work -out-of-the-box everywhere <application>MEncoder</application> has been -compiled with <systemitem class="library">libavcodec</systemitem> (which -is the case most of time), and do not depend on external libraries. -</para> - -<sect3 id="menc-feat-enc-libavcodec-audio-codecs-pcmadpcm"> -<title>PCM/ADPCM format supplementary table</title> - -<para> -<informaltable frame="all"> -<tgroup cols="2"> -<thead> -<row><entry>PCM/ADPCM codec name</entry><entry>Description</entry></row> -</thead> -<tbody> -<row> - <entry>pcm_s32le</entry> - <entry>signed 32-bit little-endian</entry> -</row> -<row> - <entry>pcm_s32be</entry> - <entry>signed 32-bit big-endian</entry> -</row> -<row> - <entry>pcm_u32le</entry> - <entry>unsigned 32-bit little-endian</entry> -</row> -<row> - <entry>pcm_u32be</entry> - <entry>unsigned 32-bit big-endian</entry> -</row> -<row> - <entry>pcm_s24le</entry> - <entry>signed 24-bit little-endian</entry> -</row> -<row> - <entry>pcm_s24be</entry> - <entry>signed 24-bit big-endian</entry> -</row> -<row> - <entry>pcm_u24le</entry> - <entry>unsigned 24-bit little-endian</entry> -</row> -<row> - <entry>pcm_u24be</entry> - <entry>unsigned 24-bit big-endian</entry> -</row> -<row> - <entry>pcm_s16le</entry> - <entry>signed 16-bit little-endian</entry> -</row> -<row> - <entry>pcm_s16be</entry> - <entry>signed 16-bit big-endian</entry> -</row> -<row> - <entry>pcm_u16le</entry> - <entry>unsigned 16-bit little-endian</entry> -</row> -<row> - <entry>pcm_u16be</entry> - <entry>unsigned 16-bit big-endian</entry> -</row> -<row> - <entry>pcm_s8</entry> - <entry>signed 8-bit</entry> -</row> -<row> - <entry>pcm_u8</entry> - <entry>unsigned 8-bit</entry> -</row> -<row> - <entry>pcm_alaw</entry> - <entry>G.711 A-LAW </entry> -</row> -<row> - <entry>pcm_mulaw</entry> - <entry>G.711 μ-LAW</entry> -</row> -<row> - <entry>pcm_s24daud</entry> - <entry>signed 24-bit D-Cinema Audio format</entry> -</row> -<row> - <entry>pcm_zork</entry> - <entry>Activision Zork Nemesis</entry> -</row> -<row> - <entry>adpcm_ima_qt</entry> - <entry>Apple QuickTime</entry> -</row> -<row> - <entry>adpcm_ima_wav</entry> - <entry>Microsoft/IBM WAVE</entry> -</row> -<row> - <entry>adpcm_ima_dk3</entry> - <entry>Duck DK3</entry> -</row> -<row> - <entry>adpcm_ima_dk4</entry> - <entry>Duck DK4</entry> -</row> -<row> - <entry>adpcm_ima_ws</entry> - <entry>Westwood Studios</entry> -</row> -<row> - <entry>adpcm_ima_smjpeg</entry> - <entry>SDL Motion JPEG</entry> -</row> -<row> - <entry>adpcm_ms</entry> - <entry>Microsoft</entry> -</row> -<row> - <entry>adpcm_4xm</entry> - <entry>4X Technologies</entry> -</row> -<row> - <entry>adpcm_xa</entry> - <entry>Phillips Yellow Book CD-ROM eXtended Architecture</entry> -</row> -<row> - <entry>adpcm_ea</entry> - <entry>Electronic Arts</entry> -</row> -<row> - <entry>adpcm_ct</entry> - <entry>Creative 16->4-bit</entry> -</row> -<row> - <entry>adpcm_swf</entry> - <entry>Adobe Shockwave Flash</entry> -</row> -<row> - <entry>adpcm_yamaha</entry> - <entry>Yamaha</entry> -</row> -<row> - <entry>adpcm_sbpro_4</entry> - <entry>Creative VOC SoundBlaster Pro 8->4-bit</entry> -</row> -<row> - <entry>adpcm_sbpro_3</entry> - <entry>Creative VOC SoundBlaster Pro 8->2.6-bit</entry> -</row> -<row> - <entry>adpcm_sbpro_2</entry> - <entry>Creative VOC SoundBlaster Pro 8->2-bit</entry> -</row> -<row> - <entry>adpcm_thp</entry> - <entry>Nintendo GameCube FMV THP</entry> -</row> -<row> - <entry>adpcm_adx</entry> - <entry>Sega/CRI ADX</entry> -</row> -</tbody> -</tgroup> -</informaltable> -</para> -</sect3> - -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-lavc-encoding-options"> -<title>Encoding options of libavcodec</title> - -<para> -Ideally, you would probably want to be able to just tell the encoder to switch -into "high quality" mode and move on. -That would probably be nice, but unfortunately hard to implement as different -encoding options yield different quality results depending on the source -material. That is because compression depends on the visual properties of the -video in question. -For example, Anime and live action have very different properties and -thus require different options to obtain optimum encoding. -The good news is that some options should never be left out, like -<option>mbd=2</option>, <option>trell</option>, and <option>v4mv</option>. -See below for a detailed description of common encoding options. -</para> - -<itemizedlist> -<title>Options to adjust:</title> -<listitem><para> - <emphasis role="bold">vmax_b_frames</emphasis>: 1 or 2 is good, depending on - the movie. - Note that if you need to have your encode be decodable by DivX5, you - need to activate closed GOP support, using - <systemitem class="library">libavcodec</systemitem>'s <option>cgop</option> - option, but you need to deactivate scene detection, which - is not a good idea as it will hurt encode efficiency a bit. -</para></listitem> -<listitem><para> - <emphasis role="bold">vb_strategy=1</emphasis>: helps in high-motion scenes. - On some videos, vmax_b_frames may hurt quality, but vmax_b_frames=2 along - with vb_strategy=1 helps. -</para></listitem> -<listitem><para> - <emphasis role="bold">dia</emphasis>: motion search range. Bigger is better - and slower. - Negative values are a completely different scale. - Good values are -1 for a fast encode, or 2-4 for slower. -</para></listitem> -<listitem><para> - <emphasis role="bold">predia</emphasis>: motion search pre-pass. - Not as important as dia. Good values are 1 (default) to 4. Requires preme=2 - to really be useful. -</para></listitem> -<listitem><para> - <emphasis role="bold">cmp, subcmp, precmp</emphasis>: Comparison function for - motion estimation. - Experiment with values of 0 (default), 2 (hadamard), 3 (dct), and 6 (rate - distortion). - 0 is fastest, and sufficient for precmp. - For cmp and subcmp, 2 is good for Anime, and 3 is good for live action. - 6 may or may not be slightly better, but is slow. -</para></listitem> -<listitem><para> - <emphasis role="bold">last_pred</emphasis>: Number of motion predictors to - take from the previous frame. - 1-3 or so help at little speed cost. - Higher values are slow for no extra gain. -</para></listitem> -<listitem><para> - <emphasis role="bold">cbp, mv0</emphasis>: Controls the selection of - macroblocks. Small speed cost for small quality gain. -</para></listitem> -<listitem><para> - <emphasis role="bold">qprd</emphasis>: adaptive quantization based on the - macroblock's complexity. - May help or hurt depending on the video and other options. - This can cause artifacts unless you set vqmax to some reasonably small value - (6 is good, maybe as low as 4); vqmin=1 should also help. -</para></listitem> -<listitem><para> - <emphasis role="bold">qns</emphasis>: very slow, especially when combined - with qprd. - This option will make the encoder minimize noise due to compression - artifacts instead of making the encoded video strictly match the source. - Do not use this unless you have already tweaked everything else as far as it - will go and the results still are not good enough. -</para></listitem> -<listitem><para> - <emphasis role="bold">vqcomp</emphasis>: Tweak ratecontrol. - What values are good depends on the movie. - You can safely leave this alone if you want. - Reducing vqcomp puts more bits on low-complexity scenes, increasing it puts - them on high-complexity scenes (default: 0.5, range: 0-1. recommended range: - 0.5-0.7). -</para></listitem> -<listitem><para> - <emphasis role="bold">vlelim, vcelim</emphasis>: Sets the single coefficient - elimination threshold for luminance and chroma planes. - These are encoded separately in all MPEG-like algorithms. - The idea behind these options is to use some good heuristics to determine - when the change in a block is less than the threshold you specify, and in - such a case, to just encode the block as "no change". - This saves bits and perhaps speeds up encoding. vlelim=-4 and vcelim=9 - seem to be good for live movies, but seem not to help with Anime; - when encoding animation, you should probably leave them unchanged. -</para></listitem> -<listitem><para> - <emphasis role="bold">qpel</emphasis>: Quarter pixel motion estimation. - MPEG-4 uses half pixel precision for its motion search by default, - therefore this option comes with an overhead as more information will be - stored in the encoded file. - The compression gain/loss depends on the movie, but it is usually not very - effective on Anime. - qpel always incurs a significant cost in CPU decode time (+25% in - practice). -</para></listitem> -<listitem><para> - <emphasis role="bold">psnr</emphasis>: does not affect the actual encoding, - but writes a log file giving the type/size/quality of each frame, and - prints a summary of PSNR (Peak Signal to Noise Ratio) at the end. -</para></listitem> -</itemizedlist> - -<itemizedlist> -<title>Options not recommended to play with:</title> -<listitem><para> - <emphasis role="bold">vme</emphasis>: The default is best. -</para></listitem> -<listitem><para> - <emphasis role="bold">lumi_mask, dark_mask</emphasis>: Psychovisual adaptive - quantization. - You do not want to play with those options if you care about quality. - Reasonable values may be effective in your case, but be warned this is very - subjective. -</para></listitem> -<listitem><para> - <emphasis role="bold">scplx_mask</emphasis>: Tries to prevent blocky - artifacts, but postprocessing is better. -</para></listitem> -</itemizedlist> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-mpeg4-lavc-example-settings"> -<title>Encoding setting examples</title> - -<para> -The following settings are examples of different encoding -option combinations that affect the speed vs quality tradeoff -at the same target bitrate. -</para> - -<para> -All the encoding settings were tested on a 720x448 @30000/1001 fps -video sample, the target bitrate was 900kbps, and the machine was an -AMD-64 3400+ at 2400 MHz in 64 bits mode. -Each encoding setting features the measured encoding speed (in -frames per second) and the PSNR loss (in dB) compared to the "very -high quality" setting. -Please understand that depending on your source, your machine type -and development advancements, you may get very different results. -</para> - -<para> -<informaltable frame="all"> -<tgroup cols="4"> -<thead> -<row> - <entry>Description</entry> - <entry>Encoding options</entry> - <entry>speed (in fps)</entry> - <entry>Relative PSNR loss (in dB)</entry> -</row> -</thead> -<tbody> -<row> - <entry>Very high quality</entry> - <entry><option>vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2</option></entry> - <entry>6fps</entry> - <entry>0dB</entry> -</row> -<row> - <entry>High quality</entry> - <entry><option>vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo</option></entry> - <entry>15fps</entry> - <entry>-0.5dB</entry> -</row> -<row> - <entry>Fast</entry> - <entry><option>vcodec=mpeg4:mbd=2:trell:v4mv:turbo</option></entry> - <entry>42fps</entry> - <entry>-0.74dB</entry> -</row> -<row> - <entry>Realtime</entry> - <entry><option>vcodec=mpeg4:mbd=2:turbo</option></entry> - <entry>54fps</entry> - <entry>-1.21dB</entry> -</row> -</tbody> -</tgroup> -</informaltable> -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="custommatrices"> -<title>Custom inter/intra matrices</title> - -<para> -With this feature of -<systemitem class="library">libavcodec</systemitem> -you are able to set custom inter (I-frames/keyframes) 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> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-dvd-mpeg4-example"> -<title>Example</title> - -<para> -So, you have just bought your shiny new copy of Harry Potter and the Chamber -of Secrets (widescreen edition, of course), and you want to rip this DVD -so that you can add it to your Home Theatre PC. This is a region 1 DVD, -so it is NTSC. The example below will still apply to PAL, except you will -omit <option>-ofps 24000/1001</option> (because the output framerate is the -same as the input framerate), and of course the crop dimensions will be -different. -</para> - -<para> -After running <option>mplayer dvd://1</option>, we follow the process -detailed in the section <link linkend="menc-feat-telecine">How to deal -with telecine and interlacing in NTSC DVDs</link> and discover that it is -24000/1001 fps progressive video, which means that we need not use an inverse -telecine filter, such as <option>pullup</option> or -<option>filmdint</option>. -</para> - -<para id="menc-feat-dvd-mpeg4-example-crop"> -Next, we want to determine the appropriate crop rectangle, so we use the -cropdetect filter: -<screen>mplayer dvd://1 -vf cropdetect</screen> -Make sure you seek to a fully filled frame (such as a bright scene, -past the opening credits and logos), and -you will see in <application>MPlayer</application>'s console output: -<screen>crop area: X: 0..719 Y: 57..419 (-vf crop=720:362:0:58)</screen> -We then play the movie back with this filter to test its correctness: -<screen>mplayer dvd://1 -vf crop=720:362:0:58</screen> -And we see that it looks perfectly fine. Next, we ensure the width and -height are a multiple of 16. The width is fine, however the height is -not. Since we did not fail 7th grade math, we know that the nearest -multiple of 16 lower than 362 is 352. -</para> - -<para> -We could just use <option>crop=720:352:0:58</option>, but it would be nice -to take a little off the top and a little off the bottom so that we -retain the center. We have shrunk the height by 10 pixels, but we do not -want to increase the y-offset by 5-pixels since that is an odd number and -will adversely affect quality. Instead, we will increase the y-offset by -4 pixels: -<screen>mplayer dvd://1 -vf crop=720:352:0:62</screen> -Another reason to shave pixels from both the top and the bottom is that we -ensure we have eliminated any half-black pixels if they exist. Note that if -your video is telecined, make sure the <option>pullup</option> filter (or -whichever inverse telecine filter you decide to use) appears in the filter -chain before you crop. If it is interlaced, deinterlace before cropping. -(If you choose to preserve the interlaced video, then make sure your -vertical crop offset is a multiple of 4.) -</para> - -<para> -If you are really concerned about losing those 10 pixels, you might -prefer instead to scale the dimensions down to the nearest multiple of 16. -The filter chain would look like: -<screen>-vf crop=720:362:0:58,scale=720:352</screen> -Scaling the video down like this will mean that some small amount of -detail is lost, though it probably will not be perceptible. Scaling up will -result in lower quality (unless you increase the bitrate). Cropping -discards those pixels altogether. It is a tradeoff that you will want to -consider for each circumstance. For example, if the DVD video was made -for television, you might want to avoid vertical scaling, since the line -sampling corresponds to the way the content was originally recorded. -</para> - -<para> -On inspection, we see that our movie has a fair bit of action and high -amounts of detail, so we pick 2400Kbit for our bitrate. -</para> - -<para> -We are now ready to do the two pass encode. Pass one: -<screen> -mencoder dvd://1 -ofps 24000/1001 -oac copy -o <replaceable>Harry_Potter_2.avi</replaceable> -ovc lavc \ - -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \ - -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2 -</screen> -And pass two is the same, except that we specify <option>vpass=2</option>: -<screen> -mencoder dvd://1 -ofps 24000/1001 -oac copy -o <replaceable>Harry_Potter_2.avi</replaceable> -ovc lavc \ - -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \ - -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2 -</screen> -</para> - -<para> -The options <option>v4mv:mbd=2:trell</option> will greatly increase the -quality at the expense of encoding time. There is little reason to leave -these options out when the primary goal is quality. The options -<option>cmp=3:subcmp=3</option> select a comparison function that -yields higher quality than the defaults. You might try experimenting with -this parameter (refer to the man page for the possible values) as -different functions can have a large impact on quality depending on the -source material. For example, if you find -<systemitem class="library">libavcodec</systemitem> produces too much -blocky artifacts, you could try selecting the experimental NSSE as -comparison function via <option>*cmp=10</option>. -</para> - -<para> -For this movie, the resulting AVI will be 138 minutes long and nearly -3GB. And because you said that file size does not matter, this is a -perfectly acceptable size. However, if you had wanted it smaller, you -could try a lower bitrate. Increasing bitrates have diminishing -returns, so while we might clearly see an improvement from 1800Kbit to -2000Kbit, it might not be so noticeable above 2000Kbit. Feel -free to experiment until you are happy. -</para> - -<para> -Because we passed the source video through a denoise filter, you may want -to add some of it back during playback. This, along with the -<option>spp</option> post-processing filter, drastically improves the -perception of quality and helps eliminate blocky artifacts in the video. -With <application>MPlayer</application>'s <option>autoq</option> option, -you can vary the amount of post-processing done by the spp filter -depending on available CPU. Also, at this point, you may want to apply -gamma and/or color correction to best suit your display. For example: -<screen> -mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3 -</screen> -</para> -</sect2> -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-xvid"> -<title>Encoding with the <systemitem class="library">Xvid</systemitem> - codec</title> - -<para> -<systemitem class="library">Xvid</systemitem> is a free library for -encoding MPEG-4 ASP video streams. -Before starting to encode, you need to <link linkend="xvid"> -set up <application>MEncoder</application> to support it</link>. -</para> - -<para> -This guide mainly aims at featuring the same kind of information -as x264's encoding guide. -Therefore, please begin by reading -<link linkend="menc-feat-x264-encoding-options-intro">the first part</link> -of that guide. -</para> - -<!-- ********** --> - -<sect2 id="menc-feat-xvid-intro"> -<title>What options should I use to get the best results?</title> - -<para> -Please begin by reviewing the -<systemitem class="library">Xvid</systemitem> section of -<application>MPlayer</application>'s man page. -This section is intended to be a supplement to the man page. -</para> - -<para> -The Xvid default settings are already a good tradeoff between -speed and quality, therefore you can safely stick to them if -the following section puzzles you. -</para> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-xvid-encoding-options"> -<title>Encoding options of <systemitem class="library">Xvid</systemitem></title> - -<itemizedlist> -<listitem><para> - <emphasis role="bold">vhq</emphasis> - This setting affects the macroblock decision algorithm, where the - higher the setting, the wiser the decision. - The default setting may be safely used for every encode, while - higher settings always help PSNR but are significantly slower. - Please note that a better PSNR does not necessarily mean - that the picture will look better, but tells you that it is - closer to the original. - Turning it off will noticeably speed up encoding; if speed is - critical for you, the tradeoff may be worth it. -</para></listitem> -<listitem><para> - <emphasis role="bold">bvhq</emphasis> - This does the same job as vhq, but does it on B-frames. - It has a negligible impact on speed, and slightly improves quality - (around +0.1dB PSNR). -</para></listitem> -<listitem><para> - <emphasis role="bold">max_bframes</emphasis> - A higher number of consecutive allowed B-frames usually improves - compressibility, although it may also lead to more blocking artifacts. - The default setting is a good tradeoff between compressibility and - quality, but you may increase it up to 3 if you are bitrate-starved. - You may also decrease it to 1 or 0 if you are aiming at perfect - quality, though in that case you should make sure your - target bitrate is high enough to ensure that the encoder does not - have to increase quantizers to reach it. -</para></listitem> -<listitem><para> - <emphasis role="bold">bf_threshold</emphasis> - This controls the B-frame sensitivity of the encoder, where a higher - value leads to more B-frames being used (and vice versa). - This setting is to be used together with <option>max_bframes</option>; - if you are bitrate-starved, you should increase both - <option>max_bframes</option> and <option>bf_threshold</option>, - while you may increase <option>max_bframes</option> and reduce - <option>bf_threshold</option> so that the encoder may use more - B-frames in places that only <emphasis role="bold">really</emphasis> - need them. - A low number of <option>max_bframes</option> and a high value of - <option>bf_threshold</option> is probably not a wise choice as it - will force the encoder to put B-frames in places that would not - benefit from them, therefore reducing visual quality. - However, if you need to be compatible with standalone players that - only support old DivX profiles (which only supports up to 1 - consecutive B-frame), this would be your only way to - increase compressibility through using B-frames. -</para></listitem> -<listitem><para> - <emphasis role="bold">trellis</emphasis> - Optimizes the quantization process to get an optimal tradeoff - between PSNR and bitrate, which allows significant bit saving. - These bits will in return be spent elsewhere on the video, - raising overall visual quality. - You should always leave it on as its impact on quality is huge. - Even if you are looking for speed, do not disable it until you - have turned down <option>vhq</option> and all other more - CPU-hungry options to the minimum. -</para></listitem> -<listitem><para> - <emphasis role="bold">hq_ac</emphasis> - Activates a better coefficient cost estimation method, which slightly - reduces file size by around 0.15 to 0.19% (which corresponds to less - than 0.01dB PSNR increase), while having a negligible impact on speed. - It is therefore recommended to always leave it on. -</para></listitem> -<listitem><para> - <emphasis role="bold">cartoon</emphasis> - Designed to better encode cartoon content, and has no impact on - speed as it just tunes the mode decision heuristics for this type - of content. -</para></listitem> -<listitem> - <para> - <emphasis role="bold">me_quality</emphasis> - This setting is to control the precision of the motion estimation. - The higher <option>me_quality</option>, the more - precise the estimation of the original motion will be, and the - better the resulting clip will capture the original motion. - </para> - <para> - The default setting is best in all cases; - thus it is not recommended to turn it down unless you are - really looking for speed, as all the bits saved by a good motion - estimation would be spent elsewhere, raising overall quality. - Therefore, do not go any lower than 5, and even that only as a last - resort. - </para> -</listitem> -<listitem><para> - <emphasis role="bold">chroma_me</emphasis> - Improves motion estimation by also taking the chroma (color) - information into account, whereas <option>me_quality</option> - alone only uses luma (grayscale). - This slows down encoding by 5-10% but improves visual quality - quite a bit by reducing blocking effects and reduces file size by - around 1.3%. - If you are looking for speed, you should disable this option before - starting to consider reducing <option>me_quality</option>. -</para></listitem> -<listitem><para> - <emphasis role="bold">chroma_opt</emphasis> - Is intended to increase chroma image quality around pure - white/black edges, rather than improving compression. - This can help to reduce the "red stairs" effect. -</para></listitem> -<listitem><para> - <emphasis role="bold">lumi_mask</emphasis> - Tries to give less bitrate to part of the picture that the - human eye cannot see very well, which should allow the encoder - to spend the saved bits on more important parts of the picture. - The quality of the encode yielded by this option highly depends - on personal preferences and on the type and monitor settings - used to watch it (typically, it will not look as good if it is - bright or if it is a TFT monitor). -</para></listitem> -<listitem> - <para> - <emphasis role="bold">qpel</emphasis> - Raise the number of candidate motion vectors by increasing - the precision of the motion estimation from halfpel to - quarterpel. - The idea is to find better motion vectors which will in return - reduce bitrate (hence increasing quality). - However, motion vectors with quarterpel precision require a - few extra bits to code, but the candidate vectors do not always - give (much) better results. - Quite often, the codec still spends bits on the extra precision, - but little or no extra quality is gained in return. - Unfortunately, there is no way to foresee the possible gains of - <option>qpel</option>, so you need to actually encode with and - without it to know for sure. - </para> - <para> - <option>qpel</option> can be almost double encoding time, and - requires as much as 25% more processing power to decode. - It is not supported by all standalone players. - </para> -</listitem> -<listitem><para> - <emphasis role="bold">gmc</emphasis> - Tries to save bits on panning scenes by using a single motion - vector for the whole frame. - This almost always raises PSNR, but significantly slows down - encoding (as well as decoding). - Therefore, you should only use it when you have turned - <option>vhq</option> to the maximum. - <systemitem class="library">Xvid</systemitem>'s GMC is more - sophisticated than DivX's, but is only supported by few - standalone players. -</para></listitem> -</itemizedlist> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-xvid-encoding-profiles"> -<title>Encoding profiles</title> - -<para> -Xvid supports encoding profiles through the <option>profile</option> option, -which are used to impose restrictions on the properties of the Xvid video -stream such that it will be playable on anything which supports the -chosen profile. -The restrictions relate to resolutions, bitrates and certain MPEG-4 -features. -The following table shows what each profile supports. -</para> - -<informaltable> -<tgroup cols="16" align="center"> -<colspec colnum="1" colname="col1"/> -<colspec colnum="2" colname="col2"/> -<colspec colnum="3" colname="col3"/> -<colspec colnum="4" colname="col4"/> -<colspec colnum="5" colname="col5"/> -<colspec colnum="6" colname="col6"/> -<colspec colnum="7" colname="col7"/> -<colspec colnum="8" colname="col8"/> -<colspec colnum="9" colname="col9"/> -<colspec colnum="10" colname="col10"/> -<colspec colnum="11" colname="col11"/> -<colspec colnum="12" colname="col12"/> -<colspec colnum="13" colname="col13"/> -<colspec colnum="14" colname="col14"/> -<colspec colnum="15" colname="col15"/> -<colspec colnum="16" colname="col16"/> -<colspec colnum="17" colname="col17"/> -<spanspec spanname="spa2-5" namest="col2" nameend="col5"/> -<spanspec spanname="spa6-11" namest="col6" nameend="col11"/> -<spanspec spanname="spa12-17" namest="col12" nameend="col17"/> -<tbody> -<row> - <entry></entry> - <entry spanname="spa2-5">Simple</entry> - <entry spanname="spa6-11">Advanced Simple</entry> - <entry spanname="spa12-17">DivX</entry> -</row> -<row> - <entry>Profile name</entry> - <entry>0</entry> - <entry>1</entry> - <entry>2</entry> - <entry>3</entry> - <entry>0</entry> - <entry>1</entry> - <entry>2</entry> - <entry>3</entry> - <entry>4</entry> - <entry>5</entry> - <entry>Handheld</entry> - <entry>Portable NTSC</entry> - <entry>Portable PAL</entry> - <entry>Home Theater NTSC</entry> - <entry>Home Theater PAL</entry> - <entry>HDTV</entry> -</row> -<row> - <entry>Width [pixels]</entry> - <entry>176</entry> - <entry>176</entry> - <entry>352</entry> - <entry>352</entry> - <entry>176</entry> - <entry>176</entry> - <entry>352</entry> - <entry>352</entry> - <entry>352</entry> - <entry>720</entry> - <entry>176</entry> - <entry>352</entry> - <entry>352</entry> - <entry>720</entry> - <entry>720</entry> - <entry>1280</entry> -</row> -<row> - <entry>Height [pixels]</entry> - <entry>144</entry> - <entry>144</entry> - <entry>288</entry> - <entry>288</entry> - <entry>144</entry> - <entry>144</entry> - <entry>288</entry> - <entry>288</entry> - <entry>576</entry> - <entry>576</entry> - <entry>144</entry> - <entry>240</entry> - <entry>288</entry> - <entry>480</entry> - <entry>576</entry> - <entry>720</entry> -</row> -<row> - <entry>Frame rate [fps]</entry> - <entry>15</entry> - <entry>15</entry> - <entry>15</entry> - <entry>15</entry> - <entry>30</entry> - <entry>30</entry> - <entry>15</entry> - <entry>30</entry> - <entry>30</entry> - <entry>30</entry> - <entry>15</entry> - <entry>30</entry> - <entry>25</entry> - <entry>30</entry> - <entry>25</entry> - <entry>30</entry> -</row> -<row> - <entry>Max average bitrate [kbps]</entry> - <entry>64</entry> - <entry>64</entry> - <entry>128</entry> - <entry>384</entry> - <entry>128</entry> - <entry>128</entry> - <entry>384</entry> - <entry>768</entry> - <entry>3000</entry> - <entry>8000</entry> - <entry>537.6</entry> - <entry>4854</entry> - <entry>4854</entry> - <entry>4854</entry> - <entry>4854</entry> - <entry>9708.4</entry> -</row> -<row> - <entry>Peak average bitrate over 3 secs [kbps]</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>800</entry> - <entry>8000</entry> - <entry>8000</entry> - <entry>8000</entry> - <entry>8000</entry> - <entry>16000</entry> -</row> -<row> - <entry>Max. B-frames</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>0</entry> - <entry>1</entry> - <entry>1</entry> - <entry>1</entry> - <entry>1</entry> - <entry>2</entry> -</row> -<row> - <entry>MPEG quantization</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> -</row> -<row> - <entry>Adaptive quantization</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> -</row> -<row> - <entry>Interlaced encoding</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> -</row> -<row> - <entry>Quarterpixel</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> -</row> -<row> - <entry>Global motion compensation</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry>X</entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> - <entry></entry> -</row> -</tbody> -</tgroup> -</informaltable> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-xvid-example-settings"> -<title>Encoding setting examples</title> - -<para> -The following settings are examples of different encoding -option combinations that affect the speed vs quality tradeoff -at the same target bitrate. -</para> - -<para> -All the encoding settings were tested on a 720x448 @30000/1001 fps -video sample, the target bitrate was 900kbps, and the machine was an -AMD-64 3400+ at 2400 MHz in 64 bits mode. -Each encoding setting features the measured encoding speed (in -frames per second) and the PSNR loss (in dB) compared to the "very -high quality" setting. -Please understand that depending on your source, your machine type -and development advancements, you may get very different results. -</para> - -<informaltable frame="all"> -<tgroup cols="4"> -<thead> -<row><entry>Description</entry><entry>Encoding options</entry><entry>speed (in fps)</entry><entry>Relative PSNR loss (in dB)</entry></row> -</thead> -<tbody> -<row> - <entry>Very high quality</entry> - <entry><option>chroma_opt:vhq=4:bvhq=1:quant_type=mpeg</option></entry> - <entry>16fps</entry> - <entry>0dB</entry> -</row> -<row> - <entry>High quality</entry> - <entry><option>vhq=2:bvhq=1:chroma_opt:quant_type=mpeg</option></entry> - <entry>18fps</entry> - <entry>-0.1dB</entry> -</row> -<row> - <entry>Fast</entry> - <entry><option>turbo:vhq=0</option></entry> - <entry>28fps</entry> - <entry>-0.69dB</entry> -</row> -<row> - <entry>Realtime</entry> - <entry><option>turbo:nochroma_me:notrellis:max_bframes=0:vhq=0</option></entry> - <entry>38fps</entry> - <entry>-1.48dB</entry> -</row> -</tbody> -</tgroup> -</informaltable> -</sect2> -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-x264"> -<title>Encoding with the - <systemitem class="library">x264</systemitem> codec</title> - -<para> -<systemitem class="library">x264</systemitem> is a free library for -encoding H.264/AVC video streams. -Before starting to encode, you need to -<link linkend="x264">set up <application>MEncoder</application> to support it</link>. -</para> - -<!-- ********** --> - -<sect2 id="menc-feat-x264-encoding-options"> -<title>Encoding options of x264</title> - -<para> -Please begin by reviewing the -<systemitem class="library">x264</systemitem> section of -<application>MPlayer</application>'s man page. -This section is intended to be a supplement to the man page. -Here you will find quick hints about which options are most -likely to interest most people. The man page is more terse, -but also more exhaustive, and it sometimes offers much better -technical detail. -</para> - - -<sect3 id="menc-feat-x264-encoding-options-intro"> -<title>Introduction</title> - -<para> -This guide considers two major categories of encoding options: -</para> - -<orderedlist> -<listitem><para> - Options which mainly trade off encoding time vs. quality -</para></listitem> -<listitem><para> - Options which may be useful for fulfilling various personal - preferences and special requirements -</para></listitem> -</orderedlist> - -<para> -Ultimately, only you can decide which options are best for your -purposes. The decision for the first class of options is the simplest: -you only have to decide whether you think the quality differences -justify the speed differences. For the second class of options, -preferences may be far more subjective, and more factors may be -involved. Note that some of the "personal preferences and special -requirements" options can still have large impacts on speed or quality, -but that is not what they are primarily useful for. A couple of the -"personal preference" options may even cause changes that look better -to some people, but look worse to others. -</para> - -<para> -Before continuing, you need to understand that this guide uses only one -quality metric: global PSNR. -For a brief explanation of what PSNR is, see -<ulink url="http://en.wikipedia.org/wiki/PSNR">the Wikipedia article on PSNR</ulink>. -Global PSNR is the last PSNR number reported when you include -the <option>psnr</option> option in <option>x264encopts</option>. -Any time you read a claim about PSNR, one of the assumptions -behind the claim is that equal bitrates are used. -</para> - -<para> -Nearly all of this guide's comments assume you are using two pass. -When comparing options, there are two major reasons for using -two pass encoding. -First, using two pass often gains around 1dB PSNR, which is a -very big difference. -Secondly, testing options by doing direct quality comparisons -with one pass encodes introduces a major confounding -factor: bitrate often varies significantly with each encode. -It is not always easy to tell whether quality changes are due -mainly to changed options, or if they mostly reflect essentially -random differences in the achieved bitrate. -</para> -</sect3> - - -<sect3 id="menc-feat-x264-encoding-options-speedvquality"> -<title>Options which primarily affect speed and quality</title> - -<itemizedlist> -<listitem> - <para> - <emphasis role="bold">subq</emphasis>: - Of the options which allow you to trade off speed for quality, - <option>subq</option> and <option>frameref</option> (see below) are usually - by far the most important. - If you are interested in tweaking either speed or quality, these - are the first options you should consider. - On the speed dimension, the <option>frameref</option> and - <option>subq</option> options interact with each other fairly - strongly. - Experience shows that, with one reference frame, - <option>subq=5</option> (the default setting) takes about 35% more time than - <option>subq=1</option>. - With 6 reference frames, the penalty grows to over 60%. - <option>subq</option>'s effect on PSNR seems fairly constant - regardless of the number of reference frames. - Typically, <option>subq=5</option> achieves 0.2-0.5 dB higher global - PSNR in comparison <option>subq=1</option>. - This is usually enough to be visible. - </para> - <para> - <option>subq=6</option> is slower and yields better quality at a reasonable - cost. - In comparison to <option>subq=5</option>, it usually gains 0.1-0.4 dB - global PSNR with speed costs varying from 25%-100%. - Unlike other levels of <option>subq</option>, the behavior of - <option>subq=6</option> does not depend much on <option>frameref</option> - and <option>me</option>. Instead, the effectiveness of <option>subq=6 - </option> depends mostly upon the number of B-frames used. In normal - usage, this means <option>subq=6</option> has a large impact on both speed - and quality in complex, high motion scenes, but it may not have much effect - in low-motion scenes. Note that it is still recommended to always set - <option>bframes</option> to something other than zero (see below). - </para> - <para> - <option>subq=7</option> is the slowest, highest quality mode. - In comparison to <option>subq=6</option>, it usually gains 0.01-0.05 dB - global PSNR with speed costs varying from 15%-33%. - Since the tradeoff encoding time vs. quality is quite low, you should - only use it if you are after every bit saving and if encoding time is - not an issue. - </para> -</listitem> -<listitem> - <para> - <emphasis role="bold">frameref</emphasis>: - <option>frameref</option> is set to 1 by default, but this - should not be taken to imply that it is reasonable to set it to 1. - Merely raising <option>frameref</option> to 2 gains around - 0.15dB PSNR with a 5-10% speed penalty; this seems like a good tradeoff. - <option>frameref=3</option> gains around 0.25dB PSNR over - <option>frameref=1</option>, which should be a visible difference. - <option>frameref=3</option> is around 15% slower than - <option>frameref=1</option>. - Unfortunately, diminishing returns set in rapidly. - <option>frameref=6</option> can be expected to gain only - 0.05-0.1 dB over <option>frameref=3</option> at an additional - 15% speed penalty. - Above <option>frameref=6</option>, the quality gains are - usually very small (although you should keep in mind throughout - this whole discussion that it can vary quite a lot depending on your source). - In a fairly typical case, <option>frameref=12</option> - will improve global PSNR by a tiny 0.02dB over - <option>frameref=6</option>, at a speed cost of 15%-20%. - At such high <option>frameref</option> values, the only really - good thing that can be said is that increasing it even further will - almost certainly never <emphasis role="bold">harm</emphasis> - PSNR, but the additional quality benefits are barely even - measurable, let alone perceptible. - </para> - <note><title>Note:</title> - <para> - Raising <option>frameref</option> to unnecessarily high values - <emphasis role="bold">can</emphasis> and - <emphasis role="bold">usually does</emphasis> - hurt coding efficiency if you turn CABAC off. - With CABAC on (the default behavior), the possibility of setting - <option>frameref</option> "too high" currently seems too remote - to even worry about, and in the future, optimizations may remove - the possibility altogether. - </para></note> - <para> - If you care about speed, a reasonable compromise is to use low - <option>subq</option> and <option>frameref</option> values on - the first pass, and then raise them on the second pass. - Typically, this has a negligible negative effect on the final - quality: You will probably lose well under 0.1dB PSNR, which - should be much too small of a difference to see. - However, different values of <option>frameref</option> can - occasionally affect frame type decision. - Most likely, these are rare outlying cases, but if you want to - be pretty sure, consider whether your video has either - fullscreen repetitive flashing patterns or very large temporary - occlusions which might force an I-frame. - Adjust the first-pass <option>frameref</option> so it is large - enough to contain the duration of the flashing cycle (or occlusion). - For example, if the scene flashes back and forth between two images - over a duration of three frames, set the first pass - <option>frameref</option> to 3 or higher. - This issue is probably extremely rare in live action video material, - but it does sometimes come up in video game captures. - </para> -</listitem> -<listitem> - <para> - <emphasis role="bold">me</emphasis>: - This option is for choosing the motion estimation search method. - Altering this option provides a straightforward quality-vs-speed - tradeoff. <option>me=dia</option> is only a few percent faster than - the default search, at a cost of under 0.1dB global PSNR. The - default setting (<option>me=hex</option>) is a reasonable tradeoff - between speed and quality. <option>me=umh</option> gains a little under - 0.1dB global PSNR, with a speed penalty that varies depending on - <option>frameref</option>. At high values of - <option>frameref</option> (e.g. 12 or so), <option>me=umh</option> - is about 40% slower than the default <option> me=hex</option>. With - <option>frameref=3</option>, the speed penalty incurred drops to - 25%-30%. - </para> - <para> - <option>me=esa</option> uses an exhaustive search that is too slow for - practical use. - </para> -</listitem> -<listitem><para> - <emphasis role="bold">partitions=all</emphasis>: - This option enables the use of 8x4, 4x8 and 4x4 subpartitions in - predicted macroblocks (in addition to the default partitions). - Enabling it results in a fairly consistent - 10%-15% loss of speed. This option is rather useless in source - containing only low motion, however in some high-motion source, - particularly source with lots of small moving objects, gains of - about 0.1dB can be expected. -</para></listitem> -<listitem> - <para> - <emphasis role="bold">bframes</emphasis>: - If you are used to encoding with other codecs, you may have found - that B-frames are not always useful. - In H.264, this has changed: there are new techniques and block - types that are possible in B-frames. - Usually, even a naive B-frame choice algorithm can have a - significant PSNR benefit. - It is interesting to note that using B-frames usually speeds up - the second pass somewhat, and may also speed up a single - pass encode if adaptive B-frame decision is turned off. - </para> - <para> - With adaptive B-frame decision turned off - (<option>x264encopts</option>'s <option>nob_adapt</option>), - the optimal value for this setting is usually no more than - <option>bframes=1</option>, or else high-motion scenes can suffer. - With adaptive B-frame decision on (the default behavior), it is - safe to use higher values; the encoder will reduce the use of - B-frames in scenes where they would hurt compression. - The encoder rarely chooses to use more than 3 or 4 B-frames; - setting this option any higher will have little effect. - </para> -</listitem> -<listitem> - <para> - <emphasis role="bold">b_adapt</emphasis>: - Note: This is on by default. - </para> - <para> - With this option enabled, the encoder will use a reasonably fast - decision process to reduce the number of B-frames used in scenes that - might not benefit from them as much. - You can use <option>b_bias</option> to tweak how B-frame-happy - the encoder is. - The speed penalty of adaptive B-frames is currently rather modest, - but so is the potential quality gain. - It usually does not hurt, however. - Note that this only affects speed and frame type decision on the - first pass. - <option>b_adapt</option> and <option>b_bias</option> have no - effect on subsequent passes. - </para> -</listitem> -<listitem><para> - <emphasis role="bold">b_pyramid</emphasis>: - You might as well enable this option if you are using >=2 B-frames; - as the man page says, you get a little quality improvement at no - speed cost. - Note that these videos cannot be read by libavcodec-based decoders - older than about March 5, 2005. -</para></listitem> -<listitem> - <para> - <emphasis role="bold">weight_b</emphasis>: - In typical cases, there is not much gain with this option. - However, in crossfades or fade-to-black scenes, weighted - prediction gives rather large bitrate savings. - In MPEG-4 ASP, a fade-to-black is usually best coded as a series - of expensive I-frames; using weighted prediction in B-frames - makes it possible to turn at least some of these into much smaller - B-frames. - Encoding time cost is minimal, as no extra decisions need to be made. - Also, contrary to what some people seem to guess, the decoder - CPU requirements are not much affected by weighted prediction, - all else being equal. - </para> - <para> - Unfortunately, the current adaptive B-frame decision algorithm - has a strong tendency to avoid B-frames during fades. - Until this changes, it may be a good idea to add - <option>nob_adapt</option> to your x264encopts, if you expect - fades to have a large effect in your particular video - clip. - </para> -</listitem> -<listitem id="menc-feat-x264-encoding-options-speedvquality-threads"> - <para> - <emphasis role="bold">threads</emphasis>: - This option allows to spawn threads to encode in parallel on multiple CPUs. - You can manually select the number of threads to be created or, better, set - <option>threads=auto</option> and let - <systemitem class="library">x264</systemitem> detect how many CPUs are - available and pick an appropriate number of threads. - If you have a multi-processor machine, you should really consider using it - as it can to increase encoding speed linearly with the number of CPU cores - (about 94% per CPU core), with very little quality reduction (about 0.005dB - for dual processor, about 0.01dB for a quad processor machine). - </para> -</listitem> -</itemizedlist> -</sect3> - - -<sect3 id="menc-feat-x264-encoding-options-misc-preferences"> -<title>Options pertaining to miscellaneous preferences</title> - -<itemizedlist> -<listitem> - <para> - <emphasis role="bold">Two pass encoding</emphasis>: - Above, it was suggested to always use two pass encoding, but there - are still reasons for not using it. For instance, if you are capturing - live TV and encoding in realtime, you are forced to use single-pass. - Also, one pass is obviously faster than two passes; if you use the - exact same set of options on both passes, two pass encoding is almost - twice as slow. - </para> - <para> - Still, there are very good reasons for using two pass encoding. For - one thing, single pass ratecontrol is not psychic, and it often makes - unreasonable choices because it cannot see the big picture. For example, - suppose you have a two minute long video consisting of two distinct - halves. The first half is a very high-motion scene lasting 60 seconds - which, in isolation, requires about 2500kbps in order to look decent. - Immediately following it is a much less demanding 60-second scene - that looks good at 300kbps. Suppose you ask for 1400kbps on the theory - that this is enough to accommodate both scenes. Single pass ratecontrol - will make a couple of "mistakes" in such a case. First of all, it - will target 1400kbps in both segments. The first segment may end up - heavily overquantized, causing it to look unacceptably and unreasonably - blocky. The second segment will be heavily underquantized; it may look - perfect, but the bitrate cost of that perfection will be completely - unreasonable. What is even harder to avoid is the problem at the - transition between the two scenes. The first seconds of the low motion - half will be hugely over-quantized, because the ratecontrol is still - expecting the kind of bitrate requirements it met in the first half - of the video. This "error period" of heavily over-quantized low motion - will look jarringly bad, and will actually use less than the 300kbps - it would have taken to make it look decent. There are ways to - mitigate the pitfalls of single-pass encoding, but they may tend to - increase bitrate misprediction. - </para> - <para> - Multipass ratecontrol can offer huge advantages over a single pass. - Using the statistics gathered from the first pass encode, the encoder - can estimate, with reasonable accuracy, the "cost" (in bits) of - encoding any given frame, at any given quantizer. This allows for - a much more rational, better planned allocation of bits between the - expensive (high-motion) and cheap (low-motion) scenes. See - <option>qcomp</option> below for some ideas on how to tweak this - allocation to your liking. - </para> - <para> - Moreover, two passes need not take twice as long as one pass. You can - tweak the options in the first pass for higher speed and lower quality. - If you choose your options well, you can get a very fast first pass. - The resulting quality in the second pass will be slightly lower because size - prediction is less accurate, but the quality difference is normally much - too small to be visible. Try, for example, adding - <option>subq=1:frameref=1</option> to the first pass - <option>x264encopts</option>. Then, on the second pass, use slower, - higher-quality options: - <option>subq=6:frameref=15:partitions=all:me=umh</option> - </para> -</listitem> -<listitem><para> - <emphasis role="bold">Three pass encoding</emphasis>? - x264 offers the ability to make an arbitrary number of consecutive - passes. If you specify <option>pass=1</option> on the first pass, - then use <option>pass=3</option> on a subsequent pass, the subsequent - pass will both read the statistics from the previous pass, and write - its own statistics. An additional pass following this one will have - a very good base from which to make highly accurate predictions of - frame sizes at a chosen quantizer. In practice, the overall quality - gain from this is usually close to zero, and quite possibly a third - pass will result in slightly worse global PSNR than the pass before - it. In typical usage, three passes help if you get either bad bitrate - prediction or bad looking scene transitions when using only two passes. - This is somewhat likely to happen on extremely short clips. There are - also a few special cases in which three (or more) passes are handy - for advanced users, but for brevity, this guide omits discussing those - special cases. -</para></listitem> -<listitem><para> - <emphasis role="bold">qcomp</emphasis>: - <option>qcomp</option> trades off the number of bits allocated - to "expensive" high-motion versus "cheap" low-motion frames. At - one extreme, <option>qcomp=0</option> aims for true constant - bitrate. Typically this would make high-motion scenes look completely - awful, while low-motion scenes would probably look absolutely - perfect, but would also use many times more bitrate than they - would need in order to look merely excellent. At the other extreme, - <option>qcomp=1</option> achieves nearly constant quantization parameter - (QP). Constant QP does not look bad, but most people think it is more - reasonable to shave some bitrate off of the extremely expensive scenes - (where the loss of quality is not as noticeable) and reallocate it to - the scenes that are easier to encode at excellent quality. - <option>qcomp</option> is set to 0.6 by default, which may be slightly - low for many peoples' taste (0.7-0.8 are also commonly used). -</para></listitem> -<listitem><para> - <emphasis role="bold">keyint</emphasis>: - <option>keyint</option> is solely for trading off file seekability against - coding efficiency. By default, <option>keyint</option> is set to 250. In - 25fps material, this guarantees the ability to seek to within 10 seconds - precision. If you think it would be important and useful to be able to - seek within 5 seconds of precision, set <option>keyint=125</option>; - this will hurt quality/bitrate slightly. If you care only about quality - and not about seekability, you can set it to much higher values - (understanding that there are diminishing returns which may become - vanishingly low, or even zero). The video stream will still have seekable - points as long as there are some scene changes. -</para></listitem> -<listitem> - <para> - <emphasis role="bold">deblock</emphasis>: - This topic is going to be a bit controversial. - </para> - <para> - H.264 defines a simple deblocking procedure on I-blocks that uses - pre-set strengths and thresholds depending on the QP of the block - in question. - By default, high QP blocks are filtered heavily, and low QP blocks - are not deblocked at all. - The pre-set strengths defined by the standard are well-chosen and - the odds are very good that they are PSNR-optimal for whatever - video you are trying to encode. - The <option>deblock</option> allow you to specify offsets to the preset - deblocking thresholds. - </para> - <para> - Many people seem to think it is a good idea to lower the deblocking - filter strength by large amounts (say, -3). - This is however almost never a good idea, and in most cases, - people who are doing this do not understand very well how - deblocking works by default. - </para> - <para> - The first and most important thing to know about the in-loop - deblocking filter is that the default thresholds are almost always - PSNR-optimal. - In the rare cases that they are not optimal, the ideal offset is - plus or minus 1. - Adjusting deblocking parameters by a larger amount is almost - guaranteed to hurt PSNR. - Strengthening the filter will smear more details; weakening the - filter will increase the appearance of blockiness. - </para> - <para> - It is definitely a bad idea to lower the deblocking thresholds if - your source is mainly low in spacial complexity (i.e., not a lot - of detail or noise). - The in-loop filter does a rather excellent job of concealing - the artifacts that occur. - If the source is high in spacial complexity, however, artifacts - are less noticeable. - This is because the ringing tends to look like detail or noise. - Human visual perception easily notices when detail is removed, - but it does not so easily notice when the noise is wrongly - represented. - When it comes to subjective quality, noise and detail are somewhat - interchangeable. - By lowering the deblocking filter strength, you are most likely - increasing error by adding ringing artifacts, but the eye does - not notice because it confuses the artifacts with detail. - </para> - <para> - This <emphasis role="bold">still</emphasis> does not justify - lowering the deblocking filter strength, however. - You can generally get better quality noise from postprocessing. - If your H.264 encodes look too blurry or smeared, try playing with - <option>-vf noise</option> when you play your encoded movie. - <option>-vf noise=8a:4a</option> should conceal most mild - artifacts. - It will almost certainly look better than the results you - would have gotten just by fiddling with the deblocking filter. - </para> -</listitem> -</itemizedlist> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-x264-example-settings"> -<title>Encoding setting examples</title> - -<para> -The following settings are examples of different encoding -option combinations that affect the speed vs quality tradeoff -at the same target bitrate. -</para> - -<para> -All the encoding settings were tested on a 720x448 @30000/1001 fps -video sample, the target bitrate was 900kbps, and the machine was an -AMD-64 3400+ at 2400 MHz in 64 bits mode. -Each encoding setting features the measured encoding speed (in -frames per second) and the PSNR loss (in dB) compared to the "very -high quality" setting. -Please understand that depending on your source, your machine type -and development advancements, you may get very different results. -</para> - -<informaltable frame="all"> -<tgroup cols="4"> -<thead> -<row> - <entry>Description</entry> - <entry>Encoding options</entry> - <entry>speed (in fps)</entry> - <entry>Relative PSNR loss (in dB)</entry> -</row> -</thead> -<tbody> -<row> - <entry>Very high quality</entry> - <entry><option>subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b</option></entry> - <entry>6fps</entry> - <entry>0dB</entry> -</row> -<row> - <entry>High quality</entry> - <entry><option>subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b</option></entry> - <entry>13fps</entry> - <entry>-0.89dB</entry> -</row> -<row> - <entry>Fast</entry> - <entry><option>subq=4:bframes=2:b_pyramid:weight_b</option></entry> - <entry>17fps</entry> - <entry>-1.48dB</entry> -</row> -</tbody> -</tgroup> -</informaltable> -</sect2> -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-video-for-windows"> -<title> - Encoding with the <systemitem class="library">Video For Windows</systemitem> - codec family -</title> - -<para> -Video for Windows provides simple encoding by means of binary video codecs. -You can encode with the following codecs (if you have more, please tell us!) -</para> - -<para> -Note that support for this is very experimental and some codecs may not work -correctly. Some codecs will only work in certain colorspaces, try -<option>-vf format=bgr24</option> and <option>-vf format=yuy2</option> -if a codec fails or gives wrong output. -</para> - -<!-- ********** --> - -<sect2 id="menc-feat-enc-vfw-video-codecs"> -<title>Video for Windows supported codecs</title> - -<para> -<informaltable frame="all"> -<tgroup cols="4"> -<thead> -<row> - <entry>Video codec file name</entry> - <entry>Description (FourCC)</entry> - <entry>md5sum</entry> - <entry>Comment</entry> -</row> -</thead> -<tbody> -<row> - <entry>aslcodec_vfw.dll</entry> - <entry>Alparysoft lossless codec vfw (ASLC)</entry> - <entry>608af234a6ea4d90cdc7246af5f3f29a</entry> - <entry></entry> -</row> -<row> - <entry>avimszh.dll</entry> - <entry>AVImszh (MSZH)</entry> - <entry>253118fe1eedea04a95ed6e5f4c28878</entry> - <entry>needs <option>-vf format</option></entry> -</row> -<row> - <entry>avizlib.dll</entry> - <entry>AVIzlib (ZLIB)</entry> - <entry>2f1cc76bbcf6d77d40d0e23392fa8eda</entry> - <entry></entry> -</row> -<row> - <entry>divx.dll</entry> - <entry>DivX4Windows-VFW</entry> - <entry>acf35b2fc004a89c829531555d73f1e6</entry> - <entry></entry> -</row> -<row> - <entry>huffyuv.dll</entry> - <entry>HuffYUV (lossless) (HFYU)</entry> - <entry>b74695b50230be4a6ef2c4293a58ac3b</entry> - <entry></entry> -</row> -<row> - <entry>iccvid.dll</entry> - <entry>Cinepak Video (cvid)</entry> - <entry>cb3b7ee47ba7dbb3d23d34e274895133</entry> - <entry></entry> -</row> -<row> - <entry>icmw_32.dll</entry> - <entry>Motion Wavelets (MWV1)</entry> - <entry>c9618a8fc73ce219ba918e3e09e227f2</entry> - <entry></entry> -</row> -<row> - <entry>jp2avi.dll</entry> - <entry>ImagePower MJPEG2000 (IPJ2)</entry> - <entry>d860a11766da0d0ea064672c6833768b</entry> - <entry><option>-vf flip</option></entry> -</row> -<row> - <entry>m3jp2k32.dll</entry> - <entry>Morgan MJPEG2000 (MJ2C)</entry> - <entry>f3c174edcbaef7cb947d6357cdfde7ff</entry> - <entry></entry> -</row> -<row> - <entry>m3jpeg32.dll</entry> - <entry>Morgan Motion JPEG Codec (MJPEG)</entry> - <entry>1cd13fff5960aa2aae43790242c323b1</entry> - <entry></entry> -</row> -<row> - <entry>mpg4c32.dll</entry> - <entry>Microsoft MPEG-4 v1/v2</entry> - <entry>b5791ea23f33010d37ab8314681f1256</entry> - <entry></entry> -</row> -<row> - <entry>tsccvid.dll</entry> - <entry>TechSmith Camtasia Screen Codec (TSCC)</entry> - <entry>8230d8560c41d444f249802a2700d1d5</entry> - <entry>shareware error on windows</entry> -</row> -<row> - <entry>vp31vfw.dll</entry> - <entry>On2 Open Source VP3 Codec (VP31)</entry> - <entry>845f3590ea489e2e45e876ab107ee7d2</entry> - <entry></entry> -</row> -<row> - <entry>vp4vfw.dll</entry> - <entry>On2 VP4 Personal Codec (VP40)</entry> - <entry>fc5480a482ccc594c2898dcc4188b58f</entry> - <entry></entry> -</row> -<row> - <entry>vp6vfw.dll</entry> - <entry>On2 VP6 Personal Codec (VP60)</entry> - <entry>04d635a364243013898fd09484f913fb</entry> - <entry></entry> -</row> -<row> - <entry>vp7vfw.dll</entry> - <entry>On2 VP7 Personal Codec (VP70)</entry> - <entry>cb4cc3d4ea7c94a35f1d81c3d750bc8d</entry> - <entry><option>-ffourcc VP70</option></entry> -</row> -<row> - <entry>ViVD2.dll</entry> - <entry>SoftMedia ViVD V2 codec VfW (GXVE)</entry> - <entry>a7b4bf5cac630bb9262c3f80d8a773a1</entry> - <entry></entry> -</row> -<row> - <entry>msulvc06.DLL</entry> - <entry>MSU Lossless codec (MSUD)</entry> - <entry>294bf9288f2f127bb86f00bfcc9ccdda</entry> - <entry> - Decodable by <application>Window Media Player</application>, - not <application>MPlayer</application> (yet). - </entry> -</row> -<row> - <entry>camcodec.dll</entry> - <entry>CamStudio lossless video codec (CSCD)</entry> - <entry>0efe97ce08bb0e40162ab15ef3b45615</entry> - <entry>sf.net/projects/camstudio</entry> -</row> -</tbody> -</tgroup> -</informaltable> - -The first column contains the codec names that should be passed after the -<literal>codec</literal> parameter, -like: <option>-xvfwopts codec=divx.dll</option> -The FourCC code used by each codec is given in the parentheses. -</para> - -<informalexample> -<para> -An example to convert an ISO DVD trailer to a VP6 flash video file -using compdata bitrate settings: -<screen> -mencoder -dvd-device <replaceable>zeiram.iso</replaceable> dvd://7 -o <replaceable>trailer.flv</replaceable> \ --ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=onepass.mcf -oac mp3lame \ --lameopts cbr:br=64 -af lavcresample=22050 -vf yadif,scale=320:240,flip \ --of lavf -</screen> -</para> -</informalexample> -</sect2> - -<sect2 id="menc-feat-video-for-windows-bitrate-settings"> -<title>Using vfw2menc to create a codec settings file.</title> - -<para> -To encode with the Video for Windows codecs, you will need to set bitrate -and other options. This is known to work on x86 on both *NIX and Windows. -</para> -<para> -First you must build the <application>vfw2menc</application> program. -It is located in the <filename class="directory">TOOLS</filename> subdirectory -of the MPlayer source tree. -To build on Linux, this can be done using <application>Wine</application>: -<screen>winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32</screen> - -To build on Windows in <application>MinGW</application> or -<application>Cygwin</application> use: -<screen>gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32</screen> - -To build on <application>MSVC</application> you will need getopt. -Getopt can be found in the original <application>vfw2menc</application> -archive available at: -The <ulink url="http://oss.netfarm.it/mplayer-win32.php">MPlayer on win32</ulink> project. -</para> -<informalexample> -<para> -Below is an example with the VP6 codec. -<screen> -vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf -</screen> -This will open the VP6 codec dialog window. -Repeat this step for the second pass -and use <option>-s <replaceable>secondpass.mcf</replaceable></option>. -</para> -</informalexample> -<para> -Windows users can use -<option>-xvfwopts codec=vp6vfw.dll:compdata=dialog</option> to have -the codec dialog display before encoding starts. -</para> -</sect2> -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-quicktime-7"> -<title>Using <application>MEncoder</application> to create -<application>QuickTime</application>-compatible files</title> - - -<sect2 id="menc-feat-quicktime-7-why-use-it"> -<title>Why would one want to produce <application>QuickTime</application>-compatible Files?</title> - -<para> - There are several reasons why producing - <application>QuickTime</application>-compatible files can be desirable. -</para> -<itemizedlist> -<listitem><para> - You want any computer illiterate to be able to watch your encode on - any major platform (Windows, Mac OS X, Unices …). -</para></listitem> -<listitem><para> - <application>QuickTime</application> is able to take advantage of more - hardware and software acceleration features of Mac OS X than - platform-independent players like <application>MPlayer</application> - or <application>VLC</application>. - That means that your encodes have a chance to be played smoothly by older - G4-powered machines. -</para></listitem> -<listitem><para> - <application>QuickTime</application> 7 supports the next-generation codec H.264, - which yields significantly better picture quality than previous codec - generations (MPEG-2, MPEG-4 …). -</para></listitem> -</itemizedlist> -</sect2> - -<sect2 id="menc-feat-quicktime-7-constraints"> -<title><application>QuickTime</application> 7 limitations</title> - -<para> - <application>QuickTime</application> 7 supports H.264 video and AAC audio, - but it does not support them muxed in the AVI container format. - However, you can use <application>MEncoder</application> to encode - the video and audio, and then use an external program such as - <application>mp4creator</application> (part of the - <ulink url="http://mpeg4ip.sourceforge.net/">MPEG4IP suite</ulink>) - to remux the video and audio tracks into an MP4 container. -</para> - -<para> - <application>QuickTime</application>'s support for H.264 is limited, - so you will need to drop some advanced features. - If you encode your video with features that - <application>QuickTime</application> 7 does not support, - <application>QuickTime</application>-based players will show you a pretty - white screen instead of your expected video. -</para> - -<itemizedlist> -<listitem><para> - <emphasis role="bold">B-frames</emphasis>: - <application>QuickTime</application> 7 supports a maximum of 1 B-frame, i.e. - <option>-x264encopts bframes=1</option>. This means that - <option>b_pyramid</option> and <option>weight_b</option> will have no - effect, since they require <option>bframes</option> to be greater than 1. -</para></listitem> -<listitem><para> - <emphasis role="bold">Macroblocks</emphasis>: - <application>QuickTime</application> 7 does not support 8x8 DCT macroblocks. - This option (<option>8x8dct</option>) is off by default, so just be sure - not to explicitly enable it. This also means that the <option>i8x8</option> - option will have no effect, since it requires <option>8x8dct</option>. -</para></listitem> -<listitem><para> - <emphasis role="bold">Aspect ratio</emphasis>: - <application>QuickTime</application> 7 does not support SAR (sample - aspect ratio) information in MPEG-4 files; it assumes that SAR=1. Read - <link linkend="menc-feat-quicktime-7-scale">the section on scaling</link> - for a workaround. <application>QuickTime</application> X no longer has this - limitation. -</para></listitem> -</itemizedlist> - -</sect2> - -<sect2 id="menc-feat-quicktime-7-crop"> -<title>Cropping</title> -<para> - Suppose you want to rip your freshly bought copy of "The Chronicles of - Narnia". Your DVD is region 1, - which means it is NTSC. The example below would still apply to PAL, - except you would omit <option>-ofps 24000/1001</option> and use slightly - different <option>crop</option> and <option>scale</option> dimensions. -</para> - -<para> - After running <option>mplayer dvd://1</option>, you follow the process - detailed in the section <link linkend="menc-feat-telecine">How to deal - with telecine and interlacing in NTSC DVDs</link> and discover that it is - 24000/1001 fps progressive video. This simplifies the process somewhat, - since you do not need to use an inverse telecine filter such as - <option>pullup</option> or a deinterlacing filter such as - <option>yadif</option>. -</para> - -<para> - Next, you need to crop out the black bars from the top and bottom of the - video, as detailed in <link linkend="menc-feat-dvd-mpeg4-example-crop">this</link> - previous section. -</para> - -</sect2> - -<sect2 id="menc-feat-quicktime-7-scale"> -<title>Scaling</title> - -<para> - The next step is truly heartbreaking. - <application>QuickTime</application> 7 does not support MPEG-4 videos - with a sample aspect ratio other than 1, so you will need to upscale - (which wastes a lot of disk space) or downscale (which loses some - details of the source) the video to square pixels. - Either way you do it, this is highly inefficient, but simply cannot - be avoided if you want your video to be playable by - <application>QuickTime</application> 7. - <application>MEncoder</application> can apply the appropriate upscaling - or downscaling by specifying respectively <option>-vf scale=-10:-1</option> - or <option>-vf scale=-1:-10</option>. - This will scale your video to the correct width for the cropped height, - rounded to the closest multiple of 16 for optimal compression. - Remember that if you are cropping, you should crop first, then scale: - - <screen>-vf crop=720:352:0:62,scale=-10:-1</screen> -</para> - -</sect2> - -<sect2 id="menc-feat-quicktime-7-avsync"> -<title>A/V sync</title> - -<para> - Because you will be remuxing into a different container, you should - always use the <option>harddup</option> option to ensure that duplicated - frames are actually duplicated in the video output. Without this option, - <application>MEncoder</application> will simply put a marker in the video - stream that a frame was duplicated, and rely on the client software to - show the same frame twice. Unfortunately, this "soft duplication" does - not survive remuxing, so the audio would slowly lose sync with the video. -</para> - -<para> - The final filter chain looks like this: - <screen>-vf crop=720:352:0:62,scale=-10:-1,harddup</screen> -</para> - -</sect2> - -<sect2 id="menc-feat-quicktime-7-bitrate"> -<title>Bitrate</title> - -<para> - As always, the selection of bitrate is a matter of the technical properties - of the source, as explained - <link linkend="menc-feat-dvd-mpeg4-resolution-bitrate">here</link>, as - well as a matter of taste. - This movie has a fair bit of action and lots of detail, but H.264 video - looks good at much lower bitrates than XviD or other MPEG-4 codecs. - After much experimentation, the author of this guide chose to encode - this movie at 900kbps, and thought that it looked very good. - You may decrease bitrate if you need to save more space, or increase - it if you need to improve quality. -</para> - -</sect2> - -<sect2 id="menc-feat-quicktime-7-example"> -<title>Encoding example</title> - -<para> - You are now ready to encode the video. Since you care about - quality, of course you will be doing a two-pass encode. To shave off - some encoding time, you can specify the <option>turbo</option> option - on the first pass; this reduces <option>subq</option> and - <option>frameref</option> to 1. To save some disk space, you can - use the <option>ss</option> option to strip off the first few seconds - of the video. (I found that this particular movie has 32 seconds of - credits and logos.) <option>bframes</option> can be 0 or 1. - The other options are documented in <link - linkend="menc-feat-x264-encoding-options-speedvquality">Encoding with - the <systemitem class="library">x264</systemitem> codec</link> and - the man page. - - <screen>mencoder dvd://1 -o /dev/null -ss 32 -ovc x264 \ --x264encopts pass=1:turbo:bitrate=900:bframes=1:\ -me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \ --vf crop=720:352:0:62,scale=-10:-1,harddup \ --oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \ --ofps 24000/1001</screen> - - If you have a multi-processor machine, don't miss the opportunity to - dramatically speed-up encoding by enabling - <link linkend="menc-feat-x264-encoding-options-speedvquality-threads"> - <systemitem class="library">x264</systemitem>'s multi-threading mode</link> - by adding <option>threads=auto</option> to your <option>x264encopts</option> - command-line. -</para> - -<para> - The second pass is the same, except that you specify the output file - and set <option>pass=2</option>. - - <screen>mencoder dvd://1 <emphasis role="bold">-o narnia.avi</emphasis> -ss 32 -ovc x264 \ --x264encopts <emphasis role="bold">pass=2</emphasis>:turbo:bitrate=900:frameref=5:bframes=1:\ -me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \ --vf crop=720:352:0:62,scale=-10:-1,harddup \ --oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \ --ofps 24000/1001</screen> -</para> - -<para> - The resulting AVI should play perfectly in - <application>MPlayer</application>, but of course - <application>QuickTime</application> can not play it because it does - not support H.264 muxed in AVI. - So the next step is to remux the video into an MP4 container. -</para> -</sect2> - -<sect2 id="menc-feat-quicktime-7-remux"> -<title>Remuxing as MP4</title> - -<para> - There are several ways to remux AVI files to MP4. You can use - <application>mp4creator</application>, which is part of the - <ulink url="http://mpeg4ip.sourceforge.net/">MPEG4IP suite</ulink>. -</para> - -<para> - First, demux the AVI into separate audio and video streams using - <application>MPlayer</application>. - - <screen>mplayer narnia.avi -dumpaudio -dumpfile narnia.aac -mplayer narnia.avi -dumpvideo -dumpfile narnia.h264</screen> - - The file names are important; <application>mp4creator</application> - requires that AAC audio streams be named <systemitem>.aac</systemitem> - and H.264 video streams be named <systemitem>.h264</systemitem>. -</para> - -<para> - Now use <application>mp4creator</application> to create a new - MP4 file out of the audio and video streams. - - <screen>mp4creator -create=narnia.aac narnia.mp4 -mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4</screen> - - Unlike the encoding step, you must specify the framerate as a - decimal (such as 23.976), not a fraction (such as 24000/1001). -</para> - -<para> - This <systemitem>narnia.mp4</systemitem> file should now be playable - with any <application>QuickTime</application> 7 application, such as - <application>QuickTime Player</application> or - <application>iTunes</application>. If you are planning to view the - video in a web browser with the <application>QuickTime</application> - plugin, you should also hint the movie so that the - <application>QuickTime</application> plugin can start playing it - while it is still downloading. <application>mp4creator</application> - can create these hint tracks: - - <screen>mp4creator -hint=1 narnia.mp4 -mp4creator -hint=2 narnia.mp4 -mp4creator -optimize narnia.mp4</screen> - - You can check the final result to ensure that the hint tracks were - created successfully: - - <screen>mp4creator -list narnia.mp4</screen> - - You should see a list of tracks: 1 audio, 1 video, and 2 hint tracks. - -<screen>Track Type Info -1 audio MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz -2 video H264 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps -3 hint Payload mpeg4-generic for track 1 -4 hint Payload H264 for track 2 -</screen> -</para> - -</sect2> - -<sect2 id="menc-feat-quicktime-7-metadata"> -<title>Adding metadata tags</title> - -<para> - If you want to add tags to your video that show up in iTunes, you can use - <ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>. - - <screen>AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen> - - The <option>--metaEnema</option> option removes any existing metadata - (<application>mp4creator</application> inserts its name in the - "encoding tool" tag), and <option>--freefree</option> reclaims the - space from the deleted metadata. - The <option>--stik</option> option sets the type of video (such as Movie - or TV Show), which iTunes uses to group related video files. - The <option>--overWrite</option> option overwrites the original file; - without it, <application>AtomicParsley</application> creates a new - auto-named file in the same directory and leaves the original file - untouched. -</para> - -</sect2> - -</sect1> - - -<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - -<sect1 id="menc-feat-vcd-dvd"> -<title>Using <application>MEncoder</application> - to create VCD/SVCD/DVD-compliant files</title> - -<sect2 id="menc-feat-vcd-dvd-constraints"> -<title>Format Constraints</title> - -<para> -<application>MEncoder</application> is capable of creating VCD, SCVD -and DVD format MPEG files using the -<systemitem class="library">libavcodec</systemitem> library. -These files can then be used in conjunction with -<ulink url="http://www.gnu.org/software/vcdimager/vcdimager.html">vcdimager</ulink> -or -<ulink url="http://dvdauthor.sourceforge.net/">dvdauthor</ulink> -to create discs that will play on a standard set-top player. -</para> - -<para> -The DVD, SVCD, and VCD formats are subject to heavy constraints. -Only a small selection of encoded picture sizes and aspect ratios are -available. -If your movie does not already meet these requirements, you may have -to scale, crop or add black borders to the picture to make it -compliant. -</para> - - -<sect3 id="menc-feat-vcd-dvd-constraints-resolution"> -<title>Format Constraints</title> - -<informaltable frame="all"> -<tgroup cols="9"> -<thead> -<row> - <entry>Format</entry> - <entry>Resolution</entry> - <entry>V. Codec</entry> - <entry>V. Bitrate</entry> - <entry>Sample Rate</entry> - <entry>A. Codec</entry> - <entry>A. Bitrate</entry> - <entry>FPS</entry> - <entry>Aspect</entry> -</row> -</thead> -<tbody> -<row> - <entry>NTSC DVD</entry> - <entry>720x480, 704x480, 352x480, 352x240</entry> - <entry>MPEG-2</entry> - <entry>9800 kbps</entry> - <entry>48000 Hz</entry> - <entry>AC-3,PCM</entry> - <entry>1536 kbps (max)</entry> - <entry>30000/1001, 24000/1001</entry> - <entry>4:3, 16:9 (only for 720x480)</entry> -</row> -<row> - <entry>NTSC DVD</entry> - <entry>352x240<footnote id='fn-rare-resolutions'><para> - These resolutions are rarely used for DVDs because - they are fairly low quality.</para></footnote></entry> - <entry>MPEG-1</entry> - <entry>1856 kbps</entry> - <entry>48000 Hz</entry> - <entry>AC-3,PCM</entry> - <entry>1536 kbps (max)</entry> - <entry>30000/1001, 24000/1001</entry> - <entry>4:3, 16:9</entry> -</row> -<row> - <entry>NTSC SVCD</entry> - <entry>480x480</entry> - <entry>MPEG-2</entry> - <entry>2600 kbps</entry> - <entry>44100 Hz</entry> - <entry>MP2</entry> - <entry>384 kbps (max)</entry> - <entry>30000/1001</entry> - <entry>4:3</entry> -</row> -<row> - <entry>NTSC VCD</entry> - <entry>352x240</entry> - <entry>MPEG-1</entry> - <entry>1150 kbps</entry> - <entry>44100 Hz</entry> - <entry>MP2</entry> - <entry>224 kbps</entry> - <entry>24000/1001, 30000/1001</entry> - <entry>4:3</entry> -</row> -<row> - <entry>PAL DVD</entry> - <entry>720x576, 704x576, 352x576, 352x288</entry> - <entry>MPEG-2</entry> - <entry>9800 kbps</entry> - <entry>48000 Hz</entry> - <entry>MP2,AC-3,PCM</entry> - <entry>1536 kbps (max)</entry> - <entry>25</entry> - <entry>4:3, 16:9 (only for 720x576)</entry> -</row> -<row> - <entry>PAL DVD</entry> - <entry>352x288<footnoteref linkend='fn-rare-resolutions'/></entry> - <entry>MPEG-1</entry> - <entry>1856 kbps</entry> - <entry>48000 Hz</entry> - <entry>MP2,AC-3,PCM</entry> - <entry>1536 kbps (max)</entry> - <entry>25</entry> - <entry>4:3, 16:9</entry> -</row> -<row> - <entry>PAL SVCD</entry> - <entry>480x576</entry> - <entry>MPEG-2</entry> - <entry>2600 kbps</entry> - <entry>44100 Hz</entry> - <entry>MP2</entry> - <entry>384 kbps (max)</entry> - <entry>25</entry> - <entry>4:3</entry> -</row> -<row> - <entry>PAL VCD</entry> - <entry>352x288</entry> - <entry>MPEG-1</entry> - <entry>1152 kbps</entry> - <entry>44100 Hz</entry> - <entry>MP2</entry> - <entry>224 kbps</entry> - <entry>25</entry> - <entry>4:3</entry> -</row> -</tbody> -</tgroup> -</informaltable> - -<para> -If your movie has 2.35:1 aspect (most recent action movies), you will -have to add black borders or crop the movie down to 16:9 to make a DVD or VCD. -If you add black borders, try to align them at 16-pixel boundaries in -order to minimize the impact on encoding performance. -Thankfully DVD has sufficiently excessive bitrate that you do not have -to worry too much about encoding efficiency, but SVCD and VCD are -highly bitrate-starved and require effort to obtain acceptable quality. -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-constraints-gop"> -<title>GOP Size Constraints</title> - -<para> -DVD, VCD, and SVCD also constrain you to relatively low -GOP (Group of Pictures) sizes. -For 30 fps material the largest allowed GOP size is 18. -For 25 or 24 fps, the maximum is 15. -The GOP size is set using the <option>keyint</option> option. -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-constraints-bitrate"> -<title>Bitrate Constraints</title> - -<para> -VCD video is required to be CBR at 1152 kbps. -This highly limiting constraint also comes along with an extremely low vbv -buffer size of 327 kilobits. -SVCD allows varying video bitrates up to 2500 kbps, and a somewhat less -restrictive vbv buffer size of 917 kilobits is allowed. -DVD video bitrates may range anywhere up to 9800 kbps (though typical -bitrates are about half that), and the vbv buffer size is 1835 kilobits. -</para> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-vcd-dvd-output"> -<title>Output Options</title> - -<para> -<application>MEncoder</application> has options to control the output -format. -Using these options we can instruct it to create the correct type of -file. -</para> - -<para> -The options for VCD and SVCD are called xvcd and xsvcd, because they -are extended formats. -They are not strictly compliant, mainly because the output does not -contain scan offsets. -If you need to generate an SVCD image, you should pass the output file to -<ulink url="http://www.gnu.org/software/vcdimager/vcdimager.html">vcdimager</ulink>. -</para> - -<para> -VCD: -<screen>-of mpeg -mpegopts format=xvcd</screen> -</para> - -<para> -SVCD: -<screen>-of mpeg -mpegopts format=xsvcd</screen> -</para> - -<para> -DVD (with timestamps on every frame, if possible): -<screen>-of mpeg -mpegopts format=dvd:tsaf</screen> -</para> - -<para> -DVD with NTSC Pullup: -<screen>-of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001</screen> -This allows 24000/1001 fps progressive content to be encoded at 30000/1001 -fps whilst maintaining DVD-compliance. -</para> - - -<sect3 id="menc-feat-vcd-dvd-output-aspect"> -<title>Aspect Ratio</title> - -<para> -The aspect argument of <option>-lavcopts</option> is used to encode -the aspect ratio of the file. -During playback the aspect ratio is used to restore the video to the -correct size. -</para> - -<para> -16:9 or "Widescreen" -<screen>-lavcopts aspect=16/9</screen> -</para> - -<para> -4:3 or "Fullscreen" -<screen>-lavcopts aspect=4/3</screen> -</para> - -<para> -2.35:1 or "Cinemascope" NTSC -<screen>-vf scale=720:368,expand=720:480 -lavcopts aspect=16/9</screen> -To calculate the correct scaling size, use the expanded NTSC width of -854/2.35 = 368 -</para> - -<para> -2.35:1 or "Cinemascope" PAL -<screen>-vf scale=720:432,expand=720:576 -lavcopts aspect=16/9</screen> -To calculate the correct scaling size, use the expanded PAL width of -1024/2.35 = 432 -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-a-v-sync"> -<title>Maintaining A/V sync</title> - -<para> -In order to maintain audio/video synchronization throughout the encode, -<application>MEncoder</application> has to drop or duplicate frames. -This works rather well when muxing into an AVI file, but is almost -guaranteed to fail to maintain A/V sync with other muxers such as MPEG. -This is why it is necessary to append the -<option>harddup</option> video filter at the end of the filter chain -to avoid this kind of problem. -You can find more technical information about <option>harddup</option> -in the section -<link linkend="menc-feat-dvd-mpeg4-muxing-filter-issues">Improving muxing and A/V sync reliability</link> -or in the manual page. -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-output-srate"> -<title>Sample Rate Conversion</title> - -<para> -If the audio sample rate in the original file is not the same as -required by the target format, sample rate conversion is required. -This is achieved using the <option>-srate</option> option and -the <option>-af lavcresample</option> audio filter together. -</para> - -<para> -DVD: -<screen>-srate 48000 -af lavcresample=48000</screen> -</para> - -<para> -VCD and SVCD: -<screen>-srate 44100 -af lavcresample=44100</screen> -</para> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-vcd-dvd-lavc"> -<title>Using libavcodec for VCD/SVCD/DVD Encoding</title> - -<sect3 id="menc-feat-vcd-dvd-lavc-intro"> -<title>Introduction</title> - -<para> -<systemitem class="library">libavcodec</systemitem> can be used to -create VCD/SVCD/DVD compliant video by using the appropriate options. -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-lavc-options"> -<title>lavcopts</title> - -<para> -This is a list of fields in <option>-lavcopts</option> that you may -be required to change in order to make a complaint movie for VCD, SVCD, -or DVD: -</para> - -<itemizedlist> -<listitem><para> - <emphasis role="bold">acodec</emphasis>: - <option>mp2</option> for VCD, SVCD, or PAL DVD; - <option>ac3</option> is most commonly used for DVD. - PCM audio may also be used for DVD, but this is mostly a big waste of - space. - Note that MP3 audio is not compliant for any of these formats, but - players often have no problem playing it anyway. -</para></listitem> -<listitem><para> - <emphasis role="bold">abitrate</emphasis>: - 224 for VCD; up to 384 for SVCD; up to 1536 for DVD, but commonly - used values range from 192 kbps for stereo to 384 kbps for 5.1 channel - sound. -</para></listitem> -<listitem><para> - <emphasis role="bold">vcodec</emphasis>: - <option>mpeg1video</option> for VCD; - <option>mpeg2video</option> for SVCD; - <option>mpeg2video</option> is usually used for DVD but you may also use - <option>mpeg1video</option> for CIF resolutions. -</para></listitem> -<listitem><para> - <emphasis role="bold">keyint</emphasis>: - Used to set the GOP size. - 18 for 30fps material, or 15 for 25/24 fps material. - Commercial producers seem to prefer keyframe intervals of 12. - It is possible to make this much larger and still retain compatibility - with most players. - A <option>keyint</option> of 25 should never cause any problems. -</para></listitem> -<listitem><para> - <emphasis role="bold">vrc_buf_size</emphasis>: - 327 for VCD, 917 for SVCD, and 1835 for DVD. -</para></listitem> -<listitem><para> - <emphasis role="bold">vrc_minrate</emphasis>: - 1152, for VCD. May be left alone for SVCD and DVD. -</para></listitem> -<listitem><para> - <emphasis role="bold">vrc_maxrate</emphasis>: - 1152 for VCD; 2500 for SVCD; 9800 for DVD. - For SVCD and DVD, you might wish to use lower values depending on your - own personal preferences and requirements. -</para></listitem> -<listitem><para> - <emphasis role="bold">vbitrate</emphasis>: - 1152 for VCD; - up to 2500 for SVCD; - up to 9800 for DVD. - For the latter two formats, vbitrate should be set based on personal - preference. - For instance, if you insist on fitting 20 or so hours on a DVD, you - could use vbitrate=400. - The resulting video quality would probably be quite bad. - If you are trying to squeeze out the maximum possible quality on a DVD, - use vbitrate=9800, but be warned that this could constrain you to less - than an hour of video on a single-layer DVD. -</para></listitem> -<listitem><para> - <emphasis role="bold">vstrict</emphasis>: - <option>vstrict</option>=0 should be used to create DVDs. - Without this option, <application>MEncoder</application> creates a - stream that cannot be correctly decoded by some standalone DVD - players. -</para></listitem> -</itemizedlist> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-lavc-examples"> -<title>Examples</title> - -<para> -This is a typical minimum set of <option>-lavcopts</option> for -encoding video: -</para> -<para> -VCD: -<screen> --lavcopts vcodec=mpeg1video:vrc_buf_size=327:vrc_minrate=1152:\ -vrc_maxrate=1152:vbitrate=1152:keyint=15:acodec=mp2 -</screen> -</para> - -<para> -SVCD: -<screen> --lavcopts vcodec=mpeg2video:vrc_buf_size=917:vrc_maxrate=2500:vbitrate=1800:\ -keyint=15:acodec=mp2 -</screen> -</para> - -<para> -DVD: -<screen> --lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ -keyint=15:vstrict=0:acodec=ac3 -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-lavc-advanced"> -<title>Advanced Options</title> - -<para> -For higher quality encoding, you may also wish to add quality-enhancing -options to lavcopts, such as <option>trell</option>, -<option>mbd=2</option>, and others. -Note that <option>qpel</option> and <option>v4mv</option>, while often -useful with MPEG-4, are not usable with MPEG-1 or MPEG-2. -Also, if you are trying to make a very high quality DVD encode, it may -be useful to add <option>dc=10</option> to lavcopts. -Doing so may help reduce the appearance of blocks in flat-colored areas. -Putting it all together, this is an example of a set of lavcopts for a -higher quality DVD: -</para> - -<para> -<screen> --lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=8000:\ -keyint=15:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:\ -vqmin=1:lmin=1:dc=10:vstrict=0 -</screen> -</para> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-vcd-dvd-audio"> -<title>Encoding Audio</title> - -<para> -VCD and SVCD support MPEG-1 layer II audio, using one of -<systemitem class="library">toolame</systemitem>, -<systemitem class="library">twolame</systemitem>, -or <systemitem class="library">libavcodec</systemitem>'s MP2 encoder. -The libavcodec MP2 is far from being as good as the other two libraries, -however it should always be available to use. -VCD only supports constant bitrate audio (CBR) whereas SVCD supports -variable bitrate (VBR), too. -Be careful when using VBR because some bad standalone players might not -support it too well. -</para> - -<para> -For DVD audio, <systemitem class="library">libavcodec</systemitem>'s -AC-3 codec is used. -</para> - - -<sect3 id="menc-feat-vcd-dvd-audio-toolame"> -<title>toolame</title> - -<para> -For VCD and SVCD: -<screen>-oac toolame -toolameopts br=224</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-audio-twolame"> -<title>twolame</title> - -<para> -For VCD and SVCD: -<screen>-oac twolame -twolameopts br=224</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-audio-lavc"> -<title>libavcodec</title> - -<para> -For DVD with 2 channel sound: -<screen>-oac lavc -lavcopts acodec=ac3:abitrate=192</screen> -</para> - -<para> -For DVD with 5.1 channel sound: -<screen>-channels 6 -oac lavc -lavcopts acodec=ac3:abitrate=384</screen> -</para> - -<para> -For VCD and SVCD: -<screen>-oac lavc -lavcopts acodec=mp2:abitrate=224</screen> -</para> -</sect3> -</sect2> - -<!-- ********** --> - -<sect2 id="menc-feat-vcd-dvd-all"> -<title>Putting it all Together</title> - -<para> -This section shows some complete commands for creating VCD/SVCD/DVD -compliant videos. -</para> - - -<sect3 id="menc-feat-vcd-dvd-all-pal-dvd"> -<title>PAL DVD</title> - -<para> -<screen> -mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ - -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \ - -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ -keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-ntsc-dvd"> -<title>NTSC DVD</title> - -<para> -<screen> -mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ - -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 \ - -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ -keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-pal-ac3-copy"> -<title>PAL AVI Containing AC-3 Audio to DVD</title> - -<para> -If the source already has AC-3 audio, use -oac copy instead of re-encoding it. -<screen> -mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ - -vf scale=720:576,harddup -ofps 25 \ - -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ -keyint=15:vstrict=0:aspect=16/9 -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-ntsc-ac3-copy"> -<title>NTSC AVI Containing AC-3 Audio to DVD</title> - -<para> -If the source already has AC-3 audio, and is NTSC @ 24000/1001 fps: -<screen> -mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf:telecine \ - -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:\ - vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:aspect=16/9 -ofps 24000/1001 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-pal-svcd"> -<title>PAL SVCD</title> - -<para> -<screen> -mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \ - scale=480:576,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ - vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917:vrc_minrate=600:\ -vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> - </screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-ntsc-svcd"> -<title>NTSC SVCD</title> - -<para> -<screen> -mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \ - scale=480:480,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ - vcodec=mpeg2video:mbd=2:keyint=18:vrc_buf_size=917:vrc_minrate=600:\ -vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-pal-vcd"> -<title>PAL VCD</title> - -<para> -<screen> -mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \ - scale=352:288,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ - vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:\ -vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> -</para> -</sect3> - - -<sect3 id="menc-feat-vcd-dvd-all-ntsc-vcd"> -<title>NTSC VCD</title> - <para> -<screen> -mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \ - scale=352:240,harddup -srate 44100 -af lavcresample=44100 -lavcopts \ - vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:\ -vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \ - -o <replaceable>movie.mpg</replaceable> <replaceable>movie.avi</replaceable> -</screen> +OUTDATED CONTENT REMOVED </para> -</sect3> -</sect2> -</sect1> </chapter> |