Mercurial > mplayer.hg
changeset 21843:7e5c4075fcdf
explain how to use MEncoder to create QuickTime-compatible files
Mainly based on a patch by Mark Pilgrim % pilgrim A gmail P com %
Original thread:
Date: Oct 19, 2006 9:50 PM
Subject: [MPlayer-DOCS] Interested in contributing case studies
author | gpoirier |
---|---|
date | Wed, 10 Jan 2007 00:08:16 +0000 |
parents | f0040ff1ba40 |
children | 586b45216282 |
files | DOCS/xml/en/encoding-guide.xml |
diffstat | 1 files changed, 318 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/xml/en/encoding-guide.xml Tue Jan 09 21:32:25 2007 +0000 +++ b/DOCS/xml/en/encoding-guide.xml Wed Jan 10 00:08:16 2007 +0000 @@ -2898,11 +2898,12 @@ <option>filmdint</option>. </para> -<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), and +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: @@ -4082,6 +4083,321 @@ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> +<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 OSX, Unices …). +</para></listitem> +<listitem><para> + <application>QuickTime</application> is able to take advantage of more + hardware and software acceleration features of Mac OSX 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 support 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 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. +</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 can not + 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 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:4x4mv:trellis=1:qp_step=4:qcomp=0.7:direct_pred=3:keyint=300 \ +-vf crop=720:352:0:62,scale=-10:-1,harddup \ +-oac faac -faacopts br=192:mpeg=4:object=1 -channels 2 -srate 48000 \ +-ofps 24000/1001</screen> + + If you have multi-processor machine, you can add + <option>threads=auto</option>. This increases encoding speed by about + 94% per CPU core, with very little quality penalty (about 0.005dB for + dual processor, about 0.01dB for a quad processor machine). +</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:4x4mv:trellis=1:qp_step=4:qcomp=0.7:direct_pred=3:keyint=300 \ +-vf crop=720:352:0:62,scale=-10:-1,harddup \ +-oac faac -faacopts br=192:mpeg=4:object=1 -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 filenames 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-video-for-windows"> <title> Encoding with the <systemitem class="library">Video For Windows</systemitem>