doc/ffmpeg-doc.texi
9181577c
 \input texinfo @c -*- texinfo -*-
 
 @settitle FFmpeg Documentation
 @titlepage
 @sp 7
 @center @titlefont{FFmpeg Documentation}
 @sp 3
 @end titlepage
 
 
 @chapter Introduction
 
 FFmpeg is a very fast video and audio converter. It can also grab from
 a live audio/video source.
115329f1
 
9181577c
 The command line interface is designed to be intuitive, in the sense
4c5f7207
 that FFmpeg tries to figure out all parameters that can possibly be
 derived automatically. You usually only have to specify the target
 bitrate you want.
9181577c
 
 FFmpeg can also convert from any sample rate to any other, and resize
 video on the fly with a high quality polyphase filter.
 
 @chapter Quick Start
 
e99c4e10
 @c man begin EXAMPLES
9181577c
 @section Video and Audio grabbing
 
cc58300e
 FFmpeg can grab video and audio from devices given that you specify the input
 format and device.
e99c4e10
 
9181577c
 @example
1156c6b0
 ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
9181577c
 @end example
 
e99c4e10
 Note that you must activate the right video source and channel before
4c5f7207
 launching FFmpeg with any TV viewer such as xawtv
66d82290
 (@url{http://linux.bytesex.org/xawtv/}) by Gerd Knorr. You also
4c5f7207
 have to set the audio recording levels correctly with a
e99c4e10
 standard mixer.
9181577c
 
76d2efda
 @section X11 grabbing
 
913e4081
 FFmpeg can grab the X11 display.
76d2efda
 
 @example
9e0ab666
 ffmpeg -f x11grab -s cif -i :0.0 /tmp/out.mpg
76d2efda
 @end example
 
913e4081
 0.0 is display.screen number of your X11 server, same as
 the DISPLAY environment variable.
76d2efda
 
0cd4faf9
 @example
9e0ab666
 ffmpeg -f x11grab -s cif -i :0.0+10,20 /tmp/out.mpg
0cd4faf9
 @end example
 
 0.0 is display.screen number of your X11 server, same as the DISPLAY environment
 variable. 10 is the x-offset and 20 the y-offset for the grabbing.
 
6bf40f39
 @section Video and Audio file format conversion
9181577c
 
4c5f7207
 * FFmpeg can use any supported file format and protocol as input:
9181577c
 
 Examples:
 
4c5f7207
 * You can use YUV files as input:
9181577c
 
 @example
115329f1
 ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
9181577c
 @end example
 
115329f1
 It will use the files:
9181577c
 @example
e99c4e10
 /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
 /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
9181577c
 @end example
 
e99c4e10
 The Y files use twice the resolution of the U and V files. They are
 raw files, without header. They can be generated by all decent video
 decoders. You must specify the size of the image with the @option{-s} option
4c5f7207
 if FFmpeg cannot guess it.
9181577c
 
4c5f7207
 * You can input from a raw YUV420P file:
9181577c
 
 @example
e99c4e10
 ffmpeg -i /tmp/test.yuv /tmp/out.avi
9181577c
 @end example
 
4c5f7207
 test.yuv is a file containing raw YUV planar data. Each frame is composed
 of the Y plane followed by the U and V planes at half vertical and
e99c4e10
 horizontal resolution.
9181577c
 
4c5f7207
 * You can output to a raw YUV420P file:
9181577c
 
 @example
f926cbe7
 ffmpeg -i mydivx.avi hugefile.yuv
9181577c
 @end example
 
 * You can set several input files and output files:
 
 @example
e99c4e10
 ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
9181577c
 @end example
 
4c5f7207
 Converts the audio file a.wav and the raw YUV video file a.yuv
 to MPEG file a.mpg.
9181577c
 
6bf40f39
 * You can also do audio and video conversions at the same time:
9181577c
 
 @example
e99c4e10
 ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
9181577c
 @end example
 
c27c66c3
 Converts a.wav to MPEG audio at 22050 Hz sample rate.
9181577c
 
 * You can encode to several formats at the same time and define a
e99c4e10
 mapping from input stream to output streams:
9181577c
 
 @example
5438308f
 ffmpeg -i /tmp/a.wav -ab 64k /tmp/a.mp2 -ab 128k /tmp/b.mp2 -map 0:0 -map 0:0
9181577c
 @end example
 
4c5f7207
 Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
 file:index' specifies which input stream is used for each output
e99c4e10
 stream, in the order of the definition of output streams.
9181577c
 
831ec935
 * You can transcode decrypted VOBs:
9181577c
 
 @example
7b900f2d
 ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec libmp3lame -ab 128k snatch.avi
9181577c
 @end example
 
4c5f7207
 This is a typical DVD ripping example; the input is a VOB file, the
 output an AVI file with MPEG-4 video and MP3 audio. Note that in this
 command we use B-frames so the MPEG-4 stream is DivX5 compatible, and
 GOP size is 300 which means one intra frame every 10 seconds for 29.97fps
 input video. Furthermore, the audio stream is MP3-encoded so you need
1cc60c47
 to enable LAME support by passing @code{--enable-libmp3lame} to configure.
4c5f7207
 The mapping is particularly useful for DVD transcoding
e99c4e10
 to get the desired audio language.
9181577c
 
4c5f7207
 NOTE: To see the supported input formats, use @code{ffmpeg -formats}.
8d36d36e
 
a0244ae3
 * You can extract images from a video, or create a video from many images:
8d36d36e
 
a0244ae3
 For extracting images from a video:
8d36d36e
 @example
 ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
 @end example
 
 This will extract one video frame per second from the video and will
 output them in files named @file{foo-001.jpeg}, @file{foo-002.jpeg},
 etc. Images will be rescaled to fit the new WxH values.
 
a0244ae3
 If you want to extract just a limited number of frames, you can use the
 above command in combination with the -vframes or -t option, or in
 combination with -ss to start extracting from a certain point in time.
 
 For creating a video from many images:
 @example
 ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
 @end example
 
8d36d36e
 The syntax @code{foo-%03d.jpeg} specifies to use a decimal number
 composed of three digits padded with zeroes to express the sequence
 number. It is the same syntax supported by the C printf function, but
 only formats accepting a normal integer are suitable.
 
07696497
 * You can put many streams of the same type in the output:
 
 @example
 ffmpeg -i test1.avi -i test2.avi -vcodec copy -acodec copy -vcodec copy -acodec copy test12.avi -newvideo -newaudio
 @end example
 
 In addition to the first video and audio streams, the resulting
 output file @file{test12.avi} will contain the second video
 and the second audio stream found in the input streams list.
 
 The @code{-newvideo}, @code{-newaudio} and @code{-newsubtitle}
 options have to be specified immediately after the name of the output
 file to which you want to add them.
e99c4e10
 @c man end
9181577c
 
 @chapter Invocation
 
 @section Syntax
 
e99c4e10
 The generic syntax is:
9181577c
 
115329f1
 @example
e99c4e10
 @c man begin SYNOPSIS
28f88dc8
 ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}...
e99c4e10
 @c man end
9181577c
 @end example
e99c4e10
 @c man begin DESCRIPTION
 As a general rule, options are applied to the next specified
699e77b1
 file. Therefore, order is important, and you can have the same
8cc62264
 option on the command line multiple times. Each occurrence is
699e77b1
 then applied to the next input or output file.
 
eb10acec
 * To set the video bitrate of the output file to 64kbit/s:
699e77b1
 @example
 ffmpeg -i input.avi -b 64k output.avi
 @end example
 
 * To force the frame rate of the output file to 24 fps:
 @example
 ffmpeg -i input.avi -r 24 output.avi
 @end example
 
9c170372
 * To force the frame rate of the input file (valid for raw formats only)
 to 1 fps and the frame rate of the output file to 24 fps:
699e77b1
 @example
9c170372
 ffmpeg -r 1 -i input.m2v -r 24 output.avi
699e77b1
 @end example
 
 The format option may be needed for raw input files.
9181577c
 
4c5f7207
 By default, FFmpeg tries to convert as losslessly as possible: It
 uses the same audio and video parameters for the outputs as the one
e99c4e10
 specified for the inputs.
 @c man end
9181577c
 
e99c4e10
 @c man begin OPTIONS
9181577c
 @section Main options
 
e99c4e10
 @table @option
9181577c
 @item -L
4c5f7207
 Show license.
18bff752
 
9181577c
 @item -h
4c5f7207
 Show help.
18bff752
 
4386f941
 @item -version
 Show version.
 
e99c4e10
 @item -formats
f67f485b
 Show available formats, codecs, bitstream filters, protocols, and frame size and frame rate abbreviations.
 
 The fields preceding the format and codec names have the following meanings:
 @table @samp
 @item D
 Decoding available
 @item E
 Encoding available
 @item V/A/S
 Video/audio/subtitle codec
 @item S
 Codec supports slices
 @item D
 Codec supports direct rendering
 @item T
 Codec can handle input truncated at random locations instead of only at frame boundaries
 @end table
18bff752
 
a19caa0f
 @item -f @var{fmt}
4c5f7207
 Force format.
18bff752
 
a19caa0f
 @item -i @var{filename}
831ec935
 input file name
9181577c
 
115329f1
 @item -y
4c5f7207
 Overwrite output files.
9181577c
 
a19caa0f
 @item -t @var{duration}
250c5317
 Restrict the transcoded/captured video sequence
 to the duration specified in seconds.
4c5f7207
 @code{hh:mm:ss[.xxx]} syntax is also supported.
9181577c
 
a19caa0f
 @item -fs @var{limit_size}
4386f941
 Set the file size limit.
 
a19caa0f
 @item -ss @var{position}
4c5f7207
 Seek to given time position in seconds.
 @code{hh:mm:ss[.xxx]} syntax is also supported.
e83a84ac
 
a19caa0f
 @item -itsoffset @var{offset}
4386f941
 Set the input time offset in seconds.
 @code{[-]hh:mm:ss[.xxx]} syntax is also supported.
 This option affects all the input files that follow it.
 The offset is added to the timestamps of the input files.
 Specifying a positive offset means that the corresponding
 streams are delayed by 'offset' seconds.
 
a19caa0f
 @item -timestamp @var{time}
4386f941
 Set the timestamp.
 
a0244ae3
 @item -metadata @var{key}=@var{value}
 Set a metadata key/value pair.
8819b9c6
 
a0244ae3
 For example, for setting the title in the output file:
 @example
 ffmpeg -i in.avi -metadata title="my title" out.flv
 @end example
ec1b10f4
 
a19caa0f
 @item -v @var{number}
53d1bdba
 Set the logging verbosity level.
4386f941
 
a19caa0f
 @item -target @var{type}
4386f941
 Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd",
4c5f7207
 "ntsc-svcd", ... ). All the format options (bitrate, codecs,
 buffer sizes) are then set automatically. You can just type:
99db6420
 
 @example
 ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
 @end example
 
4c5f7207
 Nevertheless you can specify additional options as long as you know
 they do not conflict with the standard, as in:
791d8d1d
 
 @example
 ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
 @end example
 
a19caa0f
 @item -dframes @var{number}
4386f941
 Set the number of data frames to record.
 
a19caa0f
 @item -scodec @var{codec}
4386f941
 Force subtitle codec ('copy' to copy stream).
 
 @item -newsubtitle
 Add a new subtitle stream to the current output stream.
 
a19caa0f
 @item -slang @var{code}
4386f941
 Set the ISO 639 language code (3 letters) of the current subtitle stream.
401fbdde
 
9181577c
 @end table
 
 @section Video Options
 
e99c4e10
 @table @option
a19caa0f
 @item -b @var{bitrate}
3c0ba870
 Set the video bitrate in bit/s (default = 200 kb/s).
a19caa0f
 @item -vframes @var{number}
4386f941
 Set the number of video frames to record.
a19caa0f
 @item -r @var{fps}
4386f941
 Set frame rate (Hz value, fraction or abbreviation), (default = 25).
a19caa0f
 @item -s @var{size}
67053c30
 Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source).
4c5f7207
 The following abbreviations are recognized:
5ee03c86
 @table @samp
18bff752
 @item sqcif
 128x96
 @item qcif
 176x144
 @item cif
 352x288
 @item 4cif
 704x576
7d88b5ca
 @item qqvga
 160x120
 @item qvga
 320x240
 @item vga
 640x480
 @item svga
 800x600
 @item xga
 1024x768
 @item uxga
 1600x1200
 @item qxga
 2048x1536
 @item sxga
 1280x1024
 @item qsxga
 2560x2048
 @item hsxga
 5120x4096
 @item wvga
 852x480
 @item wxga
 1366x768
 @item wsxga
 1600x1024
 @item wuxga
 1920x1200
 @item woxga
 2560x1600
 @item wqsxga
 3200x2048
 @item wquxga
 3840x2400
 @item whsxga
 6400x4096
 @item whuxga
 7680x4800
 @item cga
 320x200
 @item ega
 640x350
 @item hd480
 852x480
 @item hd720
 1280x720
 @item hd1080
 1920x1080
18bff752
 @end table
 
a19caa0f
 @item -aspect @var{aspect}
4c5f7207
 Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777).
a19caa0f
 @item -croptop @var{size}
4c5f7207
 Set top crop band size (in pixels).
a19caa0f
 @item -cropbottom @var{size}
4c5f7207
 Set bottom crop band size (in pixels).
a19caa0f
 @item -cropleft @var{size}
4c5f7207
 Set left crop band size (in pixels).
a19caa0f
 @item -cropright @var{size}
4c5f7207
 Set right crop band size (in pixels).
a19caa0f
 @item -padtop @var{size}
4c5f7207
 Set top pad band size (in pixels).
a19caa0f
 @item -padbottom @var{size}
4c5f7207
 Set bottom pad band size (in pixels).
a19caa0f
 @item -padleft @var{size}
4c5f7207
 Set left pad band size (in pixels).
a19caa0f
 @item -padright @var{size}
4c5f7207
 Set right pad band size (in pixels).
a19caa0f
 @item -padcolor @var{hex_color}
4c5f7207
 Set color of padded bands. The value for padcolor is expressed
 as a six digit hexadecimal number where the first two digits
 represent red, the middle two digits green and last two digits
 blue (default = 000000 (black)).
9181577c
 @item -vn
4c5f7207
 Disable video recording.
a19caa0f
 @item -bt @var{tolerance}
e3576e25
 Set video bitrate tolerance (in bits, default 4000k).
 Has a minimum value of: (target_bitrate/target_framerate).
 In 1-pass mode, bitrate tolerance specifies how far ratecontrol is
 willing to deviate from the target average bitrate value. This is
 not related to min/max bitrate. Lowering tolerance too much has
 an adverse effect on quality.
a19caa0f
 @item -maxrate @var{bitrate}
f754bfb9
 Set max video bitrate (in bit/s).
bbc35f51
 Requires -bufsize to be set.
a19caa0f
 @item -minrate @var{bitrate}
f754bfb9
 Set min video bitrate (in bit/s).
bbc35f51
 Most useful in setting up a CBR encode:
 @example
 ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
 @end example
 It is of little use elsewise.
a19caa0f
 @item -bufsize @var{size}
fa78d895
 Set video buffer verifier buffer size (in bits).
a19caa0f
 @item -vcodec @var{codec}
4c5f7207
 Force video codec to @var{codec}. Use the @code{copy} special value to
5ee03c86
 tell that the raw codec data must be copied as is.
18bff752
 @item -sameq
4c5f7207
 Use same video quality as source (implies VBR).
9181577c
 
a19caa0f
 @item -pass @var{n}
c2902c9c
 Select the pass number (1 or 2). It is used to do two-pass
 video encoding. The statistics of the video are recorded in the first
 pass into a log file (see also the option -passlogfile),
 and in the second pass that log file is used to generate the video
 at the exact requested bitrate.
850a8d42
 On pass 1, you may just deactivate audio and set output to null,
 examples for Windows and Unix:
 @example
 ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y NUL
 ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y /dev/null
 @end example
9181577c
 
44fe7113
 @item -passlogfile @var{prefix}
 Set two-pass log file name prefix to @var{prefix}, the default file name
 prefix is ``ffmpeg2pass''. The complete file name will be
 @file{PREFIX-N.log}, where N is a number specific to the output
c2902c9c
 stream.
9181577c
 
4386f941
 @item -newvideo
 Add a new video stream to the current output stream.
 
9181577c
 @end table
 
18bff752
 @section Advanced Video Options
9181577c
 
e99c4e10
 @table @option
a19caa0f
 @item -pix_fmt @var{format}
c3b95b1d
 Set pixel format. Use 'list' as parameter to show all the supported
 pixel formats.
a19caa0f
 @item -sws_flags @var{flags}
831ec935
 Set SwScaler flags (only available when compiled with swscale support).
a19caa0f
 @item -g @var{gop_size}
4c5f7207
 Set the group of pictures size.
115329f1
 @item -intra
4c5f7207
 Use only intra frames.
a19caa0f
 @item -vdt @var{n}
4386f941
 Discard threshold.
a19caa0f
 @item -qscale @var{q}
4bef236b
 Use fixed video quantizer scale (VBR).
a19caa0f
 @item -qmin @var{q}
4bef236b
 minimum video quantizer scale (VBR)
a19caa0f
 @item -qmax @var{q}
4bef236b
 maximum video quantizer scale (VBR)
a19caa0f
 @item -qdiff @var{q}
4bef236b
 maximum difference between the quantizer scales (VBR)
a19caa0f
 @item -qblur @var{blur}
3a9b190c
 video quantizer scale blur (VBR) (range 0.0 - 1.0)
a19caa0f
 @item -qcomp @var{compression}
3a9b190c
 video quantizer scale compression (VBR) (default 0.5).
 Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0
18bff752
 
a19caa0f
 @item -lmin @var{lambda}
9ae711e1
 minimum video lagrange factor (VBR)
a19caa0f
 @item -lmax @var{lambda}
9ae711e1
 max video lagrange factor (VBR)
a19caa0f
 @item -mblmin @var{lambda}
9ae711e1
 minimum macroblock quantizer scale (VBR)
a19caa0f
 @item -mblmax @var{lambda}
9ae711e1
 maximum macroblock quantizer scale (VBR)
 
 These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units,
 but you may use the QP2LAMBDA constant to easily convert from 'q' units:
 @example
 ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
 @end example
 
a19caa0f
 @item -rc_init_cplx @var{complexity}
4c5f7207
 initial complexity for single pass encoding
a19caa0f
 @item -b_qfactor @var{factor}
4c5f7207
 qp factor between P- and B-frames
a19caa0f
 @item -i_qfactor @var{factor}
4c5f7207
 qp factor between P- and I-frames
a19caa0f
 @item -b_qoffset @var{offset}
4c5f7207
 qp offset between P- and B-frames
a19caa0f
 @item -i_qoffset @var{offset}
4c5f7207
 qp offset between P- and I-frames
a19caa0f
 @item -rc_eq @var{equation}
4c5f7207
 Set rate control equation (@pxref{FFmpeg formula
 evaluator}) (default = @code{tex^qComp}).
a19caa0f
 @item -rc_override @var{override}
5ee03c86
 rate control override for specific intervals
a19caa0f
 @item -me_method @var{method}
4c5f7207
 Set motion estimation method to @var{method}.
 Available methods are (from lowest to best quality):
18bff752
 @table @samp
 @item zero
5ee03c86
 Try just the (0, 0) vector.
18bff752
 @item phods
 @item log
 @item x1
c0de00da
 @item hex
 @item umh
18bff752
 @item epzs
 (default method)
 @item full
 exhaustive search (slow and marginally better than epzs)
 @end table
 
a19caa0f
 @item -dct_algo @var{algo}
4c5f7207
 Set DCT algorithm to @var{algo}. Available values are:
18bff752
 @table @samp
 @item 0
 FF_DCT_AUTO (default)
 @item 1
 FF_DCT_FASTINT
 @item 2
 FF_DCT_INT
 @item 3
 FF_DCT_MMX
 @item 4
 FF_DCT_MLIB
 @item 5
 FF_DCT_ALTIVEC
 @end table
 
a19caa0f
 @item -idct_algo @var{algo}
4c5f7207
 Set IDCT algorithm to @var{algo}. Available values are:
18bff752
 @table @samp
 @item 0
 FF_IDCT_AUTO (default)
 @item 1
115329f1
 FF_IDCT_INT
18bff752
 @item 2
115329f1
 FF_IDCT_SIMPLE
18bff752
 @item 3
115329f1
 FF_IDCT_SIMPLEMMX
18bff752
 @item 4
115329f1
 FF_IDCT_LIBMPEG2MMX
18bff752
 @item 5
115329f1
 FF_IDCT_PS2
18bff752
 @item 6
115329f1
 FF_IDCT_MLIB
18bff752
 @item 7
115329f1
 FF_IDCT_ARM
18bff752
 @item 8
115329f1
 FF_IDCT_ALTIVEC
18bff752
 @item 9
115329f1
 FF_IDCT_SH4
18bff752
 @item 10
115329f1
 FF_IDCT_SIMPLEARM
18bff752
 @end table
 
a19caa0f
 @item -er @var{n}
4c5f7207
 Set error resilience to @var{n}.
18bff752
 @table @samp
115329f1
 @item 1
1471c6c2
 FF_ER_CAREFUL (default)
18bff752
 @item 2
5ee03c86
 FF_ER_COMPLIANT
18bff752
 @item 3
 FF_ER_AGGRESSIVE
 @item 4
 FF_ER_VERY_AGGRESSIVE
 @end table
 
a19caa0f
 @item -ec @var{bit_mask}
4c5f7207
 Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
5ee03c86
 the following values:
18bff752
 @table @samp
 @item 1
4c5f7207
 FF_EC_GUESS_MVS (default = enabled)
18bff752
 @item 2
4c5f7207
 FF_EC_DEBLOCK (default = enabled)
18bff752
 @end table
 
a19caa0f
 @item -bf @var{frames}
4c5f7207
 Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
a19caa0f
 @item -mbd @var{mode}
18bff752
 macroblock decision
 @table @samp
 @item 0
4c5f7207
 FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg).
18bff752
 @item 1
4c5f7207
 FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
18bff752
 @item 2
019c8838
 FF_MB_DECISION_RD: rate distortion
18bff752
 @end table
 
 @item -4mv
4c5f7207
 Use four motion vector by macroblock (MPEG-4 only).
18bff752
 @item -part
4c5f7207
 Use data partitioning (MPEG-4 only).
a19caa0f
 @item -bug @var{param}
4c5f7207
 Work around encoder bugs that are not auto-detected.
a19caa0f
 @item -strict @var{strictness}
4c5f7207
 How strictly to follow the standards.
5ee03c86
 @item -aic
4c5f7207
 Enable Advanced intra coding (h263+).
5ee03c86
 @item -umv
4c5f7207
 Enable Unlimited Motion Vector (h263+)
18bff752
 
 @item -deinterlace
4c5f7207
 Deinterlace pictures.
3841e813
 @item -ilme
4c5f7207
 Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
 Use this option if your input file is interlaced and you want
 to keep the interlaced format for minimum losses.
 The alternative is to deinterlace the input stream with
 @option{-deinterlace}, but deinterlacing introduces losses.
18bff752
 @item -psnr
4c5f7207
 Calculate PSNR of compressed frames.
18bff752
 @item -vstats
4c5f7207
 Dump video coding statistics to @file{vstats_HHMMSS.log}.
a19caa0f
 @item -vstats_file @var{file}
b60d1379
 Dump video coding statistics to @var{file}.
a19caa0f
 @item -vhook @var{module}
4c5f7207
 Insert video processing @var{module}. @var{module} contains the module
18bff752
 name and its parameters separated by spaces.
a19caa0f
 @item -top @var{n}
4386f941
 top=1/bottom=0/auto=-1 field first
a19caa0f
 @item -dc @var{precision}
4386f941
 Intra_dc_precision.
a19caa0f
 @item -vtag @var{fourcc/tag}
4386f941
 Force video tag/fourcc.
 @item -qphist
 Show QP histogram.
a19caa0f
 @item -vbsf @var{bitstream_filter}
5ad2b4c6
 Bitstream filters available are "dump_extra", "remove_extra", "noise", "h264_mp4toannexb", "imxdump", "mjpegadump".
 @example
 ffmpeg -i h264.mp4 -vcodec copy -vbsf h264_mp4toannexb -an out.h264
 @end example
18bff752
 @end table
 
 @section Audio Options
 
 @table @option
a19caa0f
 @item -aframes @var{number}
4386f941
 Set the number of audio frames to record.
a19caa0f
 @item -ar @var{freq}
4c5f7207
 Set the audio sampling frequency (default = 44100 Hz).
a19caa0f
 @item -ab @var{bitrate}
5438308f
 Set the audio bitrate in bit/s (default = 64k).
a0244ae3
 @item -aq @var{q}
 Set the audio quality (codec-specific, VBR).
a19caa0f
 @item -ac @var{channels}
4c5f7207
 Set the number of audio channels (default = 1).
5ee03c86
 @item -an
4c5f7207
 Disable audio recording.
a19caa0f
 @item -acodec @var{codec}
4c5f7207
 Force audio codec to @var{codec}. Use the @code{copy} special value to
 specify that the raw codec data must be copied as is.
de62a89d
 @item -newaudio
18fd519f
 Add a new audio track to the output file. If you want to specify parameters,
 do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..).
de62a89d
 
18fd519f
 Mapping will be done automatically, if the number of output streams is equal to
 the number of input streams, else it will pick the first one that matches. You
de62a89d
 can override the mapping using @code{-map} as usual.
 
 Example:
 @example
5438308f
 ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
de62a89d
 @end example
a19caa0f
 @item -alang @var{code}
4386f941
 Set the ISO 639 language code (3 letters) of the current audio stream.
 @end table
 
 @section Advanced Audio options:
 
 @table @option
a19caa0f
 @item -atag @var{fourcc/tag}
4386f941
 Force audio tag/fourcc.
a19caa0f
 @item -absf @var{bitstream_filter}
4386f941
 Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp".
 @end table
 
 @section Subtitle options:
 
 @table @option
a19caa0f
 @item -scodec @var{codec}
4386f941
 Force subtitle codec ('copy' to copy stream).
 @item -newsubtitle
 Add a new subtitle stream to the current output stream.
a19caa0f
 @item -slang @var{code}
4386f941
 Set the ISO 639 language code (3 letters) of the current subtitle stream.
a0244ae3
 @item -sn
 Disable subtitle recording.
5ad2b4c6
 @item -sbsf @var{bitstream_filter}
 Bitstream filters available are "mov2textsub", "text2movsub".
 @example
 ffmpeg -i file.mov -an -vn -sbsf mov2textsub -scodec copy -f rawvideo sub.txt
 @end example
18bff752
 @end table
 
 @section Audio/Video grab options
 
 @table @option
a19caa0f
 @item -vc @var{channel}
4c5f7207
 Set video grab channel (DV1394 only).
a19caa0f
 @item -tvstd @var{standard}
4c5f7207
 Set television standard (NTSC, PAL (SECAM)).
cc58300e
 @item -isync
 Synchronize read on input.
18bff752
 @end table
 
 @section Advanced options
 
 @table @option
bb89b0bc
 @item -map @var{input_stream_id}[:@var{sync_stream_id}]
e645a733
 Set stream mapping from input streams to output streams.
 Just enumerate the input streams in the order you want them in the output.
bb89b0bc
 @var{sync_stream_id} if specified sets the input stream to sync
 against.
a19caa0f
 @item -map_meta_data @var{outfile}:@var{infile}
 Set meta data information of @var{outfile} from @var{infile}.
18bff752
 @item -debug
4c5f7207
 Print specific debug info.
115329f1
 @item -benchmark
4c5f7207
 Add timings for benchmarking.
4386f941
 @item -dump
4c5f7207
 Dump each input packet.
4386f941
 @item -hex
 When dumping packets, also dump the payload.
18bff752
 @item -bitexact
4c5f7207
 Only use bit exact algorithms (for codec testing).
a19caa0f
 @item -ps @var{size}
4c5f7207
 Set packet size in bits.
5ee03c86
 @item -re
4c5f7207
 Read input at native frame rate. Mainly used to simulate a grab device.
4386f941
 @item -loop_input
4c5f7207
 Loop over the input stream. Currently it works only for image
 streams. This option is used for automatic FFserver testing.
a19caa0f
 @item -loop_output @var{number_of_times}
019c8838
 Repeatedly loop output for formats that support looping such as animated GIF
4c5f7207
 (0 will loop the output infinitely).
a19caa0f
 @item -threads @var{count}
4386f941
 Thread count.
a19caa0f
 @item -vsync @var{parameter}
29c9183c
 Video sync method. Video will be stretched/squeezed to match the timestamps,
 it is done by duplicating and dropping frames. With -map you can select from
 which stream the timestamps should be taken. You can leave either video or
c52e13f1
 audio unchanged and sync the remaining stream(s) to the unchanged one.
a19caa0f
 @item -async @var{samples_per_second}
29c9183c
 Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
c52e13f1
 the parameter is the maximum samples per second by which the audio is changed.
 -async 1 is a special case where only the start of the audio stream is corrected
 without any later correction.
43399718
 @item -copyts
 Copy timestamps from input to output.
 @item -shortest
 Finish encoding when the shortest input stream ends.
 @item -dts_delta_threshold
 Timestamp discontinuity delta threshold.
a19caa0f
 @item -muxdelay @var{seconds}
43399718
 Set the maximum demux-decode delay.
a19caa0f
 @item -muxpreload @var{seconds}
43399718
 Set the initial demux-decode delay.
9181577c
 @end table
18bff752
 
4a60e574
 @section Preset files
 
 A preset file contains a sequence of @var{option}=@var{value} pairs,
 one for each line, specifying a sequence of options which would be
 awkward to specify on the command line. Lines starting with the hash
 ('#') character are ignored and are used to provide comments. Check
 the @file{ffpresets} directory in the FFmpeg source tree for examples.
 
 Preset files are specified with the @code{vpre}, @code{apre} and
 @code{spre} options. The options specified in a preset file are
66e9aa74
 applied to the currently selected codec of the same type as the preset
 option.
4a60e574
 
 The argument passed to the preset options identifies the preset file
 to use according to the following rules.
 
 First ffmpeg searches for a file named @var{arg}.ffpreset in the
bd591ead
 directories @file{$HOME/.ffmpeg}, and in the datadir defined at
 configuration time (usually @file{PREFIX/share/ffmpeg}) in that
 order. For example, if the argument is @code{libx264-max}, it will
 search for the file @file{libx264-max.ffpreset}.
4a60e574
 
 If no such file is found, then ffmpeg will search for a file named
 @var{codec_name}-@var{arg}.ffpreset in the above-mentioned
 directories, where @var{codec_name} is the name of the codec to which
 the preset file options will be applied. For example, if you select
 the video codec with @code{-vcodec libx264} and use @code{-vpre max},
 then it will search for the file @file{libx264-max.ffpreset}.
 
 Finally, if the above rules failed and the argument specifies an
 absolute pathname, ffmpeg will search for that filename. This way you
 can specify the absolute and complete filename of the preset file, for
 example @file{./ffpresets/libx264-max.ffpreset}.
 
18bff752
 @node FFmpeg formula evaluator
 @section FFmpeg formula evaluator
 
 When evaluating a rate control string, FFmpeg uses an internal formula
115329f1
 evaluator.
18bff752
 
 The following binary operators are available: @code{+}, @code{-},
 @code{*}, @code{/}, @code{^}.
 
 The following unary operators are available: @code{+}, @code{-},
 @code{(...)}.
 
17bdc290
 The following statements are available: @code{ld}, @code{st},
 @code{while}.
 
18bff752
 The following functions are available:
 @table @var
 @item sinh(x)
 @item cosh(x)
 @item tanh(x)
 @item sin(x)
 @item cos(x)
 @item tan(x)
593b3219
 @item atan(x)
 @item asin(x)
 @item acos(x)
18bff752
 @item exp(x)
 @item log(x)
593b3219
 @item abs(x)
18bff752
 @item squish(x)
 @item gauss(x)
593b3219
 @item mod(x, y)
18bff752
 @item max(x, y)
 @item min(x, y)
593b3219
 @item eq(x, y)
 @item gte(x, y)
18bff752
 @item gt(x, y)
593b3219
 @item lte(x, y)
18bff752
 @item lt(x, y)
 @item bits2qp(bits)
 @item qp2bits(qp)
 @end table
 
 The following constants are available:
 @table @var
 @item PI
 @item E
 @item iTex
 @item pTex
 @item tex
 @item mv
 @item fCode
 @item iCount
 @item mcVar
 @item var
 @item isI
 @item isP
 @item isB
 @item avgQP
 @item qComp
 @item avgIITex
 @item avgPITex
 @item avgPPTex
 @item avgBPTex
 @item avgTex
 @end table
 
e99c4e10
 @c man end
 
 @ignore
 
 @setfilename ffmpeg
 @settitle FFmpeg video converter
 
 @c man begin SEEALSO
019c8838
 ffserver(1), ffplay(1) and the HTML documentation of @file{ffmpeg}.
e99c4e10
 @c man end
 
 @c man begin AUTHOR
 Fabrice Bellard
 @c man end
 
 @end ignore
9181577c
 
 @section Protocols
 
831ec935
 The file name can be @file{-} to read from standard input or to write
4c5f7207
 to standard output.
9181577c
 
4c5f7207
 FFmpeg also handles many protocols specified with an URL syntax.
9181577c
 
4c5f7207
 Use 'ffmpeg -formats' to see a list of the supported protocols.
9181577c
 
e99c4e10
 The protocol @code{http:} is currently used only to communicate with
4c5f7207
 FFserver (see the FFserver documentation). When FFmpeg will be a
e99c4e10
 video player it will also be used for streaming :-)
9181577c
 
 @chapter Tips
 
 @itemize
4c5f7207
 @item For streaming at very low bitrate application, use a low frame rate
 and a small GOP size. This is especially true for RealVideo where
e99c4e10
 the Linux player does not seem to be very fast, so it can miss
 frames. An example is:
9181577c
 
 @example
3c0ba870
 ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm
9181577c
 @end example
 
 @item  The parameter 'q' which is displayed while encoding is the current
4c5f7207
 quantizer. The value 1 indicates that a very good quality could
 be achieved. The value 31 indicates the worst quality. If q=31 appears
e99c4e10
 too often, it means that the encoder cannot compress enough to meet
4c5f7207
 your bitrate. You must either increase the bitrate, decrease the
e99c4e10
 frame rate or decrease the frame size.
9181577c
 
 @item If your computer is not fast enough, you can speed up the
e99c4e10
 compression at the expense of the compression ratio. You can use
 '-me zero' to speed up motion estimation, and '-intra' to disable
4c5f7207
 motion estimation completely (you have only I-frames, which means it
e99c4e10
 is about as good as JPEG compression).
9181577c
 
4c5f7207
 @item To have very low audio bitrates, reduce the sampling frequency
c27c66c3
 (down to 22050 Hz for MPEG audio, 22050 or 11025 for AC-3).
9181577c
 
 @item To have a constant quality (but a variable bitrate), use the option
e99c4e10
 '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
 quality).
9181577c
 
 @item When converting video files, you can use the '-sameq' option which
4c5f7207
 uses the same quality factor in the encoder as in the decoder.
 It allows almost lossless encoding.
9181577c
 
 @end itemize
 
 @bye