123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920 |
- \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.
-
- The command line interface is designed to be intuitive, in the sense
- that ffmpeg tries to figure out all the parameters, when
- possible. You have usually to give only the target bitrate you want.
- 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
- @c man begin EXAMPLES
- @section Video and Audio grabbing
- FFmpeg can use a video4linux compatible video source and any Open Sound
- System audio source:
- @example
- ffmpeg /tmp/out.mpg
- @end example
- Note that you must activate the right video source and channel before
- launching ffmpeg. You can use any TV viewer such as xawtv
- (@url{http://bytesex.org/xawtv/}) by Gerd Knorr which I find very
- good. You must also set correctly the audio recording levels with a
- standard mixer.
- @section Video and Audio file format conversion
- * ffmpeg can use any supported file format and protocol as input:
- Examples:
- * You can input from YUV files:
- @example
- ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
- @end example
- It will use the files:
- @example
- /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
- /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
- @end example
- 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
- if ffmpeg cannot guess it.
- * You can input from a RAW YUV420P file:
- @example
- ffmpeg -i /tmp/test.yuv /tmp/out.avi
- @end example
- The RAW YUV420P is a file containing RAW YUV planar, for each frame first
- come the Y plane followed by U and V planes, which are half vertical and
- horizontal resolution.
- * You can output to a RAW YUV420P file:
- @example
- ffmpeg -i mydivx.avi -o hugefile.yuv
- @end example
- * You can set several input files and output files:
- @example
- ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
- @end example
- Convert the audio file a.wav and the raw yuv video file a.yuv
- to mpeg file a.mpg
- * You can also do audio and video conversions at the same time:
- @example
- ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
- @end example
- Convert the sample rate of a.wav to 22050 Hz and encode it to MPEG audio.
- * You can encode to several formats at the same time and define a
- mapping from input stream to output streams:
- @example
- ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
- @end example
- Convert a.wav to a.mp2 at 64 kbits and b.mp2 at 128 kbits. '-map
- file:index' specify which input stream is used for each output
- stream, in the order of the definition of output streams.
- * You can transcode decrypted VOBs
- @example
- ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi
- @end example
- This is a typical DVD ripper example, input from a VOB file, output
- to 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, GOP
- size is 300 that means an INTRA frame every 10 seconds for 29.97 fps
- input video. Also the audio stream is MP3 encoded so you need LAME
- support which is enabled using @code{--enable-mp3lame} when
- configuring. The mapping is particularly useful for DVD transcoding
- to get the desired audio language.
- NOTE: to see the supported input formats, use @code{ffmpeg -formats}.
- @c man end
- @chapter Invocation
- @section Syntax
- The generic syntax is:
- @example
- @c man begin SYNOPSIS
- ffmpeg [[options][@option{-i} @var{input_file}]]... @{[options] @var{output_file}@}...
- @c man end
- @end example
- @c man begin DESCRIPTION
- If no input file is given, audio/video grabbing is done.
- As a general rule, options are applied to the next specified
- file. For example, if you give the @option{-b 64} option, it sets the video
- bitrate of the next file. Format option may be needed for raw input
- files.
- By default, ffmpeg tries to convert as losslessly as possible: it
- uses the same audio and video parameter for the outputs as the one
- specified for the inputs.
- @c man end
- @c man begin OPTIONS
- @section Main options
- @table @option
- @item -L
- show license
- @item -h
- show help
- @item -formats
- show available formats, codecs, protocols, ...
- @item -f fmt
- force format
- @item -i filename
- input file name
- @item -y
- overwrite output files
- @item -t duration
- set the recording time in seconds. @code{hh:mm:ss[.xxx]} syntax is also
- supported.
- @item -title string
- set the title
- @item -author string
- set the author
- @item -copyright string
- set the copyright
- @item -comment string
- set the comment
- @item -hq
- activate high quality settings
- @end table
- @section Video Options
- @table @option
- @item -b bitrate
- set the video bitrate in kbit/s (default = 200 kb/s)
- @item -r fps
- set frame rate (default = 25)
- @item -s size
- set frame size. The format is @samp{WxH} (default 160x128). The
- following abbreviations are recognized:
- @table @samp
- @item sqcif
- 128x96
- @item qcif
- 176x144
- @item cif
- 352x288
- @item 4cif
- 704x576
- @end table
- @item -aspect aspect
- set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
- @item -croptop size
- set top crop band size (in pixels)
- @item -cropbottom size
- set bottom crop band size (in pixels)
- @item -cropleft size
- set left crop band size (in pixels)
- @item -cropright size
- set right crop band size (in pixels)
- @item -vn
- disable video recording
- @item -bt tolerance
- set video bitrate tolerance (in kbit/s)
- @item -maxrate bitrate
- set max video bitrate tolerance (in kbit/s)
- @item -minrate bitrate
- set min video bitrate tolerance (in kbit/s)
- @item -bufsize size
- set ratecontrol buffere size (in kbit)
- @item -vcodec codec
- force video codec to @var{codec}. Use the @code{copy} special value to
- tell that the raw codec data must be copied as is.
- @item -sameq
- use same video quality as source (implies VBR)
- @item -pass n
- select the pass number (1 or 2). It is useful to do two pass
- encoding. The statistics of the video are recorded in the first pass and
- the video at the exact requested bit rate is generated in the second
- pass.
- @item -passlogfile file
- select two pass log file name to @var{file}.
- @end table
- @section Advanced Video Options
- @table @option
- @item -g gop_size
- set the group of picture size
- @item -intra
- use only intra frames
- @item -qscale q
- use fixed video quantiser scale (VBR)
- @item -qmin q
- min video quantiser scale (VBR)
- @item -qmax q
- max video quantiser scale (VBR)
- @item -qdiff q
- max difference between the quantiser scale (VBR)
- @item -qblur blur
- video quantiser scale blur (VBR)
- @item -qcomp compression
- video quantiser scale compression (VBR)
- @item -rc_init_cplx complexity
- initial complexity for 1-pass encoding
- @item -b_qfactor factor
- qp factor between p and b frames
- @item -i_qfactor factor
- qp factor between p and i frames
- @item -b_qoffset offset
- qp offset between p and b frames
- @item -i_qoffset offset
- qp offset between p and i frames
- @item -rc_eq equation
- set rate control equation (@pxref{FFmpeg formula
- evaluator}). Default is @code{tex^qComp}.
- @item -rc_override override
- rate control override for specific intervals
- @item -me method
- set motion estimation method to @var{method}. Available methods are
- (from lower to best quality):
- @table @samp
- @item zero
- Try just the (0, 0) vector.
- @item phods
- @item log
- @item x1
- @item epzs
- (default method)
- @item full
- exhaustive search (slow and marginally better than epzs)
- @end table
- @item -dct_algo algo
- set dct algorithm to @var{algo}. Available values are:
- @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
- @item -idct_algo algo
- set idct algorithm to @var{algo}. Available values are:
- @table @samp
- @item 0
- FF_IDCT_AUTO (default)
- @item 1
- FF_IDCT_INT
- @item 2
- FF_IDCT_SIMPLE
- @item 3
- FF_IDCT_SIMPLEMMX
- @item 4
- FF_IDCT_LIBMPEG2MMX
- @item 5
- FF_IDCT_PS2
- @item 6
- FF_IDCT_MLIB
- @item 7
- FF_IDCT_ARM
- @item 8
- FF_IDCT_ALTIVEC
- @item 9
- FF_IDCT_SH4
- @item 10
- FF_IDCT_SIMPLEARM
- @end table
- @item -er n
- set error resilience to @var{n}.
- @table @samp
- @item 1
- FF_ER_CAREFULL (default)
- @item 2
- FF_ER_COMPLIANT
- @item 3
- FF_ER_AGGRESSIVE
- @item 4
- FF_ER_VERY_AGGRESSIVE
- @end table
- @item -ec bit_mask
- set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
- the following values:
- @table @samp
- @item 1
- FF_EC_GUESS_MVS (default=enabled)
- @item 2
- FF_EC_DEBLOCK (default=enabled)
- @end table
- @item -bf frames
- use 'frames' B frames (supported for MPEG-1, MPEG-2 and MPEG-4)
- @item -mbd mode
- macroblock decision
- @table @samp
- @item 0
- FF_MB_DECISION_SIMPLE: use mb_cmp (cannot change it yet in ffmpeg)
- @item 1
- FF_MB_DECISION_BITS: chooses the one which needs the fewest bits
- @item 2
- FF_MB_DECISION_RD: rate distoration
- @end table
- @item -4mv
- use four motion vector by macroblock (only MPEG-4)
- @item -part
- use data partitioning (only MPEG-4)
- @item -bug param
- workaround not auto detected encoder bugs
- @item -strict strictness
- how strictly to follow the standarts
- @item -aic
- enable Advanced intra coding (h263+)
- @item -umv
- enable Unlimited Motion Vector (h263+)
- @item -deinterlace
- deinterlace pictures
- @item -psnr
- calculate PSNR of compressed frames
- @item -vstats
- dump video coding statistics to @file{vstats_HHMMSS.log}.
- @item -vhook module
- insert video processing @var{module}. @var{module} contains the module
- name and its parameters separated by spaces.
- @end table
- @section Audio Options
- @table @option
- @item -ab bitrate
- set audio bitrate (in kbit/s)
- @item -ar freq
- set the audio sampling freq (default = 44100 Hz)
- @item -ab bitrate
- set the audio bitrate in kbit/s (default = 64)
- @item -ac channels
- set the number of audio channels (default = 1)
- @item -an
- disable audio recording
- @item -acodec codec
- force audio codec to @var{codec}. Use the @code{copy} special value to
- tell that the raw codec data must be copied as is.
- @end table
- @section Audio/Video grab options
- @table @option
- @item -vd device
- set video grab device (e.g. @file{/dev/video0})
- @item -vc channel
- set video grab channel (DV1394 only)
- @item -tvstd standard
- set television standard (NTSC, PAL (SECAM))
- @item -dv1394
- set DV1394 grab
- @item -ad device
- set audio device (e.g. @file{/dev/dsp})
- @end table
- @section Advanced options
- @table @option
- @item -map file:stream
- set input stream mapping
- @item -debug
- print specific debug info
- @item -benchmark
- add timings for benchmarking
- @item -hex
- dump each input packet
- @item -bitexact
- only use bit exact algorithms (for codec testing)
- @item -ps size
- set packet size in bits
- @item -re
- read input at native frame rate. Mainly used to simulate a grab device.
- @item -loop
- loop over the input stream. Currently it works only for image
- streams. This option is used for ffserver automatic testing.
- @end table
- @node FFmpeg formula evaluator
- @section FFmpeg formula evaluator
- When evaluating a rate control string, FFmpeg uses an internal formula
- evaluator.
- The following binary operators are available: @code{+}, @code{-},
- @code{*}, @code{/}, @code{^}.
- The following unary operators are available: @code{+}, @code{-},
- @code{(...)}.
- 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)
- @item exp(x)
- @item log(x)
- @item squish(x)
- @item gauss(x)
- @item abs(x)
- @item max(x, y)
- @item min(x, y)
- @item gt(x, y)
- @item lt(x, y)
- @item eq(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
- @c man end
- @ignore
- @setfilename ffmpeg
- @settitle FFmpeg video converter
- @c man begin SEEALSO
- ffserver(1), ffplay(1) and the html documentation of @file{ffmpeg}.
- @c man end
- @c man begin AUTHOR
- Fabrice Bellard
- @c man end
- @end ignore
- @section Protocols
- The filename can be @file{-} to read from the standard input or to write
- to the standard output.
- ffmpeg handles also many protocols specified with the URL syntax.
- Use 'ffmpeg -formats' to have a list of the supported protocols.
- The protocol @code{http:} is currently used only to communicate with
- ffserver (see the ffserver documentation). When ffmpeg will be a
- video player it will also be used for streaming :-)
- @chapter Tips
- @itemize
- @item For streaming at very low bit rate application, use a low frame rate
- and a small gop size. This is especially true for real video where
- the Linux player does not seem to be very fast, so it can miss
- frames. An example is:
- @example
- ffmpeg -g 3 -r 3 -t 10 -b 50 -s qcif -f rv10 /tmp/b.rm
- @end example
- @item The parameter 'q' which is displayed while encoding is the current
- quantizer. The value of 1 indicates that a very good quality could
- be achieved. The value of 31 indicates the worst quality. If q=31
- too often, it means that the encoder cannot compress enough to meet
- your bit rate. You must either increase the bit rate, decrease the
- frame rate or decrease the frame size.
- @item If your computer is not fast enough, you can speed up the
- compression at the expense of the compression ratio. You can use
- '-me zero' to speed up motion estimation, and '-intra' to disable
- completely motion estimation (you have only I frames, which means it
- is about as good as JPEG compression).
- @item To have very low bitrates in audio, reduce the sampling frequency
- (down to 22050 kHz for mpeg audio, 22050 or 11025 for ac3).
- @item To have a constant quality (but a variable bitrate), use the option
- '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
- quality).
- @item When converting video files, you can use the '-sameq' option which
- uses in the encoder the same quality factor than in the decoder. It
- allows to be almost lossless in encoding.
- @end itemize
- @chapter Supported File Formats and Codecs
- You can use the @code{-formats} option to have an exhaustive list.
- @section File Formats
- FFmpeg supports the following file formats through the @code{libavformat}
- library:
- @multitable @columnfractions .4 .1 .1
- @item Supported File Format @tab Encoding @tab Decoding @tab Comments
- @item MPEG audio @tab X @tab X
- @item MPEG1 systems @tab X @tab X
- @tab muxed audio and video
- @item MPEG2 PS @tab X @tab X
- @tab also known as @code{VOB} file
- @item MPEG2 TS @tab @tab X
- @tab also known as DVB Transport Stream
- @item ASF@tab X @tab X
- @item AVI@tab X @tab X
- @item WAV@tab X @tab X
- @item Macromedia Flash@tab X @tab X
- @tab Only embedded audio is decoded
- @item FLV @tab X @tab X
- @tab Macromedia Flash video files
- @item Real Audio and Video @tab X @tab X
- @item Raw AC3 @tab X @tab X
- @item Raw MJPEG @tab X @tab X
- @item Raw MPEG video @tab X @tab X
- @item Raw PCM8/16 bits, mulaw/Alaw@tab X @tab X
- @item SUN AU format @tab X @tab X
- @item Quicktime @tab X @tab X
- @item MPEG4 @tab X @tab X
- @tab MPEG4 is a variant of Quicktime
- @item Raw MPEG4 video @tab X @tab X
- @item DV @tab @tab X
- @item 4xm @tab @tab X
- @tab 4X Technologies format, used in some games
- @item Playstation STR @tab @tab X
- @item Id RoQ @tab @tab X
- @tab used in Quake III, Jedi Knight 2, other computer games
- @item Interplay MVE @tab @tab X
- @tab format used in various Interplay computer games
- @item WC3 Movie @tab @tab X
- @tab multimedia format used in Origin's Wing Commander III computer game
- @item Sega FILM/CPK @tab @tab X
- @tab used in many Sega Saturn console games
- @item Westwood Studios VQA/AUD @tab @tab X
- @tab Multimedia formats used in Westwood Studios games
- @end multitable
- @code{X} means that the encoding (resp. decoding) is supported.
- @section Image Formats
- FFmpeg can read and write images for each frame of a video sequence. The
- following image formats are supported:
- @multitable @columnfractions .4 .1 .1
- @item Supported Image Format @tab Encoding @tab Decoding @tab Comments
- @item PGM, PPM @tab X @tab X
- @item PAM @tab X @tab X @tab PAM is a PNM extension with alpha support
- @item PGMYUV @tab X @tab X @tab PGM with U and V components in YUV 4:2:0
- @item JPEG @tab X @tab X @tab Progressive JPEG is not supported
- @item .Y.U.V @tab X @tab X @tab One raw file per component
- @item Animated GIF @tab X @tab X @tab Only uncompressed GIFs are generated
- @item PNG @tab X @tab X @tab 2 bit and 4 bit/pixel not supported yet
- @end multitable
- @code{X} means that the encoding (resp. decoding) is supported.
- @section Video Codecs
- @multitable @columnfractions .4 .1 .1 .7
- @item Supported Codec @tab Encoding @tab Decoding @tab Comments
- @item MPEG1 video @tab X @tab X
- @item MPEG2 video @tab X @tab X
- @item MPEG4 @tab X @tab X @tab Also known as DIVX4/5
- @item MSMPEG4 V1 @tab X @tab X
- @item MSMPEG4 V2 @tab X @tab X
- @item MSMPEG4 V3 @tab X @tab X @tab Also known as DIVX3
- @item WMV7 @tab X @tab X
- @item WMV8 @tab X @tab X @tab Not completely working
- @item H263(+) @tab X @tab X @tab Also known as Real Video 1.0
- @item MJPEG @tab X @tab X
- @item DV @tab @tab X
- @item Huff YUV @tab X @tab X
- @item Asus v1 @tab X @tab X @tab fourcc: ASV1
- @item Asus v2 @tab X @tab X @tab fourcc: ASV2
- @item Creative YUV @tab @tab X @tab fourcc: CYUV
- @item H.264 @tab @tab X
- @item Sorenson Video 1 @tab @tab X @tab fourcc: SVQ1
- @item Sorenson Video 3 @tab @tab X @tab fourcc: SVQ3
- @item On2 VP3 @tab @tab X @tab still experimental
- @item Intel Indeo 3 @tab @tab X @tab only works on i386 right now
- @item FLV @tab X @tab X @tab Flash H263 variant
- @item ATI VCR1 @tab @tab X @tab fourcc: VCR1
- @item Cirrus Logic AccuPak @tab @tab X @tab fourcc: CLJR
- @item 4X Video @tab @tab X @tab used in certain computer games
- @item Sony Playstation MDEC @tab @tab X
- @item Id RoQ @tab @tab X @tab used in Quake III, Jedi Knight 2, other computer games
- @item Xan/WC3 @tab @tab X @tab used in Wing Commander III .MVE files
- @item Interplay Video @tab @tab X @tab used in Interplay .MVE files
- @item Apple Video @tab @tab X @tab fourcc: rpza
- @item Cinepak @tab @tab X
- @item Microsoft RLE @tab @tab X
- @item Microsoft Video-1 @tab @tab X
- @end multitable
- @code{X} means that the encoding (resp. decoding) is supported.
- Check at @url{http://www.mplayerhq.hu/~michael/codec-features.html} to
- get a precise comparison of FFmpeg MPEG4 codec compared to the other
- solutions.
- @section Audio Codecs
- @multitable @columnfractions .4 .1 .1 .1 .7
- @item Supported Codec @tab Encoding @tab Decoding @tab Comments
- @item MPEG audio layer 2 @tab IX @tab IX
- @item MPEG audio layer 1/3 @tab IX @tab IX
- @tab MP3 encoding is supported through the external library LAME
- @item AC3 @tab IX @tab X
- @tab liba52 is used internally for decoding
- @item Vorbis @tab X @tab X
- @tab supported through the external library libvorbis
- @item WMA V1/V2 @tab @tab X
- @item Microsoft ADPCM @tab X @tab X
- @item MS IMA ADPCM @tab X @tab X
- @item QT IMA ADPCM @tab @tab X
- @item 4X IMA ADPCM @tab @tab X
- @item Duck DK3 IMA ADPCM @tab @tab X
- @tab used in some Sega Saturn console games
- @item Duck DK4 IMA ADPCM @tab @tab X
- @tab used in some Sega Saturn console games
- @item Westwood Studios IMA ADPCM @tab @tab X
- @tab used in Westwood Studios games likes Command and Conquer
- @item RA144 @tab @tab X
- @tab Real 14400 bit/s codec
- @item RA288 @tab @tab X
- @tab Real 28800 bit/s codec
- @item AMR-NB @tab X @tab X
- @tab supported through an external library
- @item AMR-WB @tab X @tab X
- @tab supported through an external library
- @item DV audio @tab @tab X
- @item Id RoQ DPCM @tab @tab X
- @tab used in Quake III, Jedi Knight 2, other computer games
- @item Interplay MVE DPCM @tab @tab X
- @tab used in various Interplay computer games
- @item Xan DPCM @tab @tab X
- @tab used in Origin's Wing Commander IV AVI files
- @end multitable
- @code{X} means that the encoding (resp. decoding) is supported.
- @code{I} means that an integer only version is available too (ensures highest
- performances on systems without hardware floating point support).
- @chapter Platform Specific information
- @section Linux
- ffmpeg should be compiled with at least GCC 2.95.3. GCC 3.2 is the
- preferred compiler now for ffmpeg. All future optimizations will depend on
- features only found in GCC 3.2.
- @section BSD
- @section Windows
- @subsection Native Windows compilation
- @itemize
- @item Install the current versions of MSYS and MinGW from
- @url{http://www.mingw.org/}. You can find detailed installation
- instructions in the download section and the FAQ.
- @item If you want to test the FFmpeg Simple Media Player, also download
- the MinGW development library of SDL 1.2.x
- (@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
- @url{http://www.libsdl.org}. Unpack it in a temporary place, and
- unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
- directory. Edit the @file{sdl-config} script so that it gives the
- correct SDL directory when invoked.
- @item Extract the current version of FFmpeg (the latest release version or the current CVS snapshot whichever is recommended).
-
- @item Start the MSYS shell (file @file{msys.bat}).
- @item Change to the FFMPEG directory and follow
- the instructions of how to compile ffmpeg (file
- @file{INSTALL}). Usually, launching @file{./configure} and @file{make}
- suffices. If you have problems using SDL, verify that
- @file{sdl-config} can be launched from the MSYS command line.
- @item You can install FFmpeg in @file{Program Files/FFmpeg} by typing @file{make install}. Don't forget to copy @file{SDL.dll} at the place you launch
- @file{ffplay}.
- @end itemize
- Notes:
- @itemize
- @item The target @file{make wininstaller} can be used to create a
- Nullsoft based Windows installer for FFmpeg and FFplay. @file{SDL.dll}
- must be copied in the ffmpeg directory in order to build the
- installer.
- @item By using @code{./configure --enable-shared} when configuring ffmpeg,
- you can build @file{avcodec.dll} and @file{avformat.dll}. With
- @code{make install} you install the FFmpeg DLLs and the associated
- headers in @file{Program Files/FFmpeg}.
- @item Visual C++ compatibility: if you used @code{./configure --enable-shared}
- when configuring FFmpeg, then FFmpeg tries to use the Microsoft Visual
- C++ @code{lib} tool to build @code{avcodec.lib} and
- @code{avformat.lib}. With these libraries, you can link your Visual C++
- code directly with the FFmpeg DLLs.
- @end itemize
- @subsection Cross compilation for Windows with Linux
- You must use the MinGW cross compilation tools available at
- @url{http://www.mingw.org/}.
- Then configure ffmpeg with the following options:
- @example
- ./configure --enable-mingw32 --cross-prefix=i386-mingw32msvc-
- @end example
- (you can change the cross-prefix according to the prefix choosen for the
- MinGW tools).
- Then you can easily test ffmpeg with wine
- (@url{http://www.winehq.com/}).
- @section MacOS X
- @section BeOS
- The configure script should guess the configuration itself.
- Networking support is currently not finished.
- errno issues fixed by Andrew Bachmann.
- Old stuff:
- François Revol - revol at free dot fr - April 2002
- The configure script should guess the configuration itself,
- however I still didn't tested building on net_server version of BeOS.
- ffserver is broken (needs poll() implementation).
- There is still issues with errno codes, which are negative in BeOs, and
- that ffmpeg negates when returning. This ends up turning errors into
- valid results, then crashes.
- (To be fixed)
- @chapter Developers Guide
- @section API
- @itemize
- @item libavcodec is the library containing the codecs (both encoding and
- decoding). See @file{libavcodec/apiexample.c} to see how to use it.
- @item libavformat is the library containing the file formats handling (mux and
- demux code for several formats). See @file{ffplay.c} to use it in a
- player. See @file{output_example.c} to use it to generate audio or video
- streams.
- @end itemize
- @section Integrating libavcodec or libavformat in your program
- You can integrate all the source code of the libraries to link them
- statically to avoid any version problem. All you need is to provide a
- 'config.mak' and a 'config.h' in the parent directory. See the defines
- generated by ./configure to understand what is needed.
- You can use libavcodec or libavformat in your commercial program, but
- @emph{any patch you make must be published}. The best way to proceed is
- to send your patches to the ffmpeg mailing list.
- @section Coding Rules
- ffmpeg is programmed in ANSI C language. GCC extensions are
- tolerated. Indent size is 4. The TAB character should not be used.
- The presentation is the one specified by 'indent -i4 -kr'.
- Main priority in ffmpeg is simplicity and small code size (=less
- bugs).
- Comments: for functions visible from other modules, use the JavaDoc
- format (see examples in @file{libav/utils.c}) so that a documentation
- can be generated automatically.
- @section Submitting patches
- When you submit your patch, try to send a unified diff (diff '-u'
- option). I cannot read other diffs :-)
- Run the regression tests before submitting a patch so that you can
- verify that there are no big problems.
- Patches should be posted as base64 encoded attachments (or any other
- encoding which ensures that the patch wont be trashed during
- transmission) to the ffmpeg-devel mailinglist, see
- @url{http://lists.sourceforge.net/lists/listinfo/ffmpeg-devel}
- @section Regression tests
- Before submitting a patch (or committing with CVS), you should at least
- test that you did not break anything.
- The regression test build a synthetic video stream and a synthetic
- audio stream. Then these are encoded then decoded with all codecs or
- formats. The CRC (or MD5) of each generated file is recorded in a
- result file. Then a 'diff' is launched with the reference results and
- the result file.
- The regression test then goes on to test the ffserver code with a
- limited set of streams. It is important that this step runs correctly
- as well.
- Run 'make test' to test all the codecs.
- Run 'make fulltest' to test all the codecs, formats and ffserver.
- [Of course, some patches may change the regression tests results. In
- this case, the regression tests reference results shall be modified
- accordingly].
- @bye
|