view DOCS/tech/snow.txt @ 24589:9118be6575da

demux_audio.c: Fix timestamp handling The code calculated the pts values of audio packets by adding the length of the current packet to the pts of the previous one. The length of the previous packet should be added instead. This broke WAV timestamps near the end of the stream where a short packet occurs. Change the code to store the pts of the next packet instead of the last one. This fixes the WAV timestamps and allows some simplifications. MP3 timestamps are not affected as packets are always treated as constant decoded length, and FLAC timestamps still have worse problems (FLAC is treated as as if it was constant bitrate even though it isn't). Also store the timestamps as double instead of float.
author uau
date Mon, 24 Sep 2007 21:49:56 +0000
parents 25c95219c33d
children 0f1b5b68af32
line wrap: on
line source

 HOW TO TEST SNOW
 ----------------

Snow is an experimental wavelet-based codec made by the FFmpeg developers,
and while it is still in heavy development, it is already giving very good
results.
Be very careful though, as the format of the bitstream produced might
change, do not rely on it to store videos that you value.
For this reason, MEncoder will not encode without 'vstrict=-2' on the
command line.


OPTIONS RECOGNIZED BY SNOW

 * vqscale=<0.0-255.0>
   Encoding quality, sane range 1-10. 0 is lossless.
   May be fractional.
   A given quality in snow needs a somewhat lower qscale than the same
   quality in MPEG-4.

 * vpass=<1-3>
   Activates internal two (or more) pass mode.

 * vbitrate=<value>
   Specify bitrate of 1pass CBR or 2pass ABR. default: 800 kbit/s.
   This is not very accurate for short videos.

 * lmin, lmax, vqcomp, vratetol, vrc_eq, vrc_override
   Generic multipass ratecontrol options, subject to the same suggestions
   as in other codecs.
   lmin=1 can be useful for medium to high bitrates (see vqscale).

 * cmp, subcmp, mbcmp
   Set the comparison function, default: 0 (SAD).
   useful values = 0 (SAD), 1 (SSD), 2 (SATD), 
                   11 (5/3 wavelet), 12 (9/7 wavelet).
   SAD is fastest and lowest quality.
   SSD is the only function that makes correct decisions about intra vs
   inter (mbcmp) when using fast motion estimation, but is not the best for
   the actual search (cmp, subcmp).
   The wavelet functions (use the one that matches pred) are best quality,
   especially with vme=8, but are very slow.
   SATD is a good balance.
   You can add 256 to any of the options to enable chroma motion
   estimation for that comparison (e.g. mbcmp=257 for SSD with chroma),
   but it doesn't seem to help much for the moment.

 * pred=<0-2>
   Wavelet type.
   0 = 9/7 wavelet, default.
   1 = 5/3 wavelet.
   2 = 13/7 wavelet.
   9/7 is probably better for for lossy coding, and 5/3 for lossless.
   NOTE: 9/7 wavelet doesn't work with lossless mode.

 * qpel
   Refines motion estimation, default: off.
   This setting always helps compressibility, but costs some CPU time
   both while encoding and decoding.

 * v4mv
   Allows smaller motion partitions, default: off.
   v4mv is theoretically good, but in practice isn't really working yet.
   The current MB decision algorithm doesn't make very good use of this:
   It improves quality, but also increases bitrate. (You could get
   more quality per bitrate by reducing quantizer instead.)

 * vme=<4|8>
   The default EPZS (4) is the same as in other formats.
   Snow also supports iterative motion estimation (8), which jointly
   optimizes adjacent blocks to make the most of OBMC. This significantly
   improves compression, but is very slow.
   Iterative ME currently does not perform scenecut detection, so should
   be used only in the second pass of a two pass encode.

 * refs=<1-8>
   Allows each block to choose which of several reference frames to
   motion compensate from. Default: 1. Larger values always improve
   compression, but cost lots of CPU-time when encoding and extra
   memory when decoding.

In short:
The best options in almost all cases are
vcodec=snow:vstrict=-2:vpass=1:vbitrate=$B:pred=0:cmp=2:subcmp=2:mbcmp=1:qpel
vcodec=snow:vstrict=-2:vpass=2:vbitrate=$B:pred=0:cmp=12:subcmp=12:mbcmp=1:qpel:vme=8:refs=8

Decent, fast options are
vcodec=snow:vstrict=-2:vpass=1:vbitrate=$B:pred=0:cmp=1:subcmp=1:mbcmp=1
vcodec=snow:vstrict=-2:vpass=2:vbitrate=$B:pred=0:cmp=2:subcmp=2:mbcmp=1:refs=2