X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=doc%2Fffmpeg-doc.texi;h=6f42f33b80e809fd2b7990620efca7b6670b5661;hb=f48d6e1b44e591b337c10080480ae642488b1d1d;hp=8489a8382a67f75c6d31fa58f01edb8731116a77;hpb=9fcee5853de3642dfa0798e39a506219db98dd4e;p=ffmpeg diff --git a/doc/ffmpeg-doc.texi b/doc/ffmpeg-doc.texi index 8489a8382a6..6f42f33b80e 100644 --- a/doc/ffmpeg-doc.texi +++ b/doc/ffmpeg-doc.texi @@ -109,7 +109,7 @@ 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 +ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi @end example This is a typical DVD ripping example; the input is a VOB file, the @@ -139,9 +139,31 @@ ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{ 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. The format option may be needed for raw input -files. +file. Therefore, order is important, and you can have the same +option on the command line multiple times. Each occurrence is +then applied to the next input or output file. + +* To set the video bitrate of the output file to 64kbit/s: +@example +ffmpeg -i input.avi -b 64k output.avi +@end example + +* To force the frame rate of the input and output file to 24 fps: +@example +ffmpeg -r 24 -i input.avi 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 + +* To force the frame rate of input file to 1 fps and the output file to 24 fps: +@example +ffmpeg -r 1 -i input.avi -r 24 output.avi +@end example + +The 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 parameters for the outputs as the one @@ -158,6 +180,9 @@ Show license. @item -h Show help. +@item -version +Show version. + @item -formats Show available formats, codecs, protocols, ... @@ -174,13 +199,27 @@ Overwrite output files. Set the recording time in seconds. @code{hh:mm:ss[.xxx]} syntax is also supported. +@item -fs limit_size +Set the file size limit. + @item -ss position Seek to given time position in seconds. @code{hh:mm:ss[.xxx]} syntax is also supported. +@item -itsoffset offset +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. + @item -title string Set the title. +@item -timestamp time +Set the timestamp. + @item -author string Set the author. @@ -190,8 +229,20 @@ Set the copyright. @item -comment string Set the comment. +@item -album string +Set the album. + +@item -track number +Set the track. + +@item -year number +Set the year. + +@item -v verbose +Control amount of logging. + @item -target type -Specify target file type ("vcd", "svcd", "dvd", "dv", "pal-vcd", +Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ... ). All the format options (bitrate, codecs, buffer sizes) are then set automatically. You can just type: @@ -206,16 +257,17 @@ they do not conflict with the standard, as in: ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg @end example -@item -hq -Activate high quality settings. +@item -dframes number +Set the number of data frames to record. -@item -itsoffset offset -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. +@item -scodec codec +Force subtitle codec ('copy' to copy stream). + +@item -newsubtitle +Add a new subtitle stream to the current output stream. + +@item -slang code +Set the ISO 639 language code (3 letters) of the current subtitle stream. @end table @@ -223,9 +275,11 @@ streams are delayed by 'offset' seconds. @table @option @item -b bitrate -Set the video bitrate in kbit/s (default = 200 kb/s). +Set the video bitrate in bit/s (default = 200 kb/s). +@item -vframes number +Set the number of video frames to record. @item -r fps -Set frame rate (default = 25). +Set frame rate (Hz value, fraction or abbreviation), (default = 25). @item -s size Set frame size. The format is @samp{wxh} (default = 160x128). The following abbreviations are recognized: @@ -266,13 +320,13 @@ blue (default = 000000 (black)). @item -vn Disable video recording. @item -bt tolerance -Set video bitrate tolerance (in kbit/s). +Set video bitrate tolerance (in bit/s). @item -maxrate bitrate -Set max video bitrate tolerance (in kbit/s). +Set max video bitrate tolerance (in bit/s). @item -minrate bitrate -Set min video bitrate tolerance (in kbit/s). +Set min video bitrate tolerance (in bit/s). @item -bufsize size -Set rate control buffer size (in kbit). +Set rate control buffer size (in bits). @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. @@ -288,27 +342,49 @@ in the second pass. @item -passlogfile file Set two pass logfile name to @var{file}. +@item -newvideo +Add a new video stream to the current output stream. + @end table @section Advanced Video Options @table @option +@item -pix_fmt format +Set pixel format. @item -g gop_size Set the group of pictures size. @item -intra Use only intra frames. +@item -vdt n +Discard threshold. @item -qscale q -Use fixed video quantiser scale (VBR). +Use fixed video quantizer scale (VBR). @item -qmin q -minimum video quantiser scale (VBR) +minimum video quantizer scale (VBR) @item -qmax q -maximum video quantiser scale (VBR) +maximum video quantizer scale (VBR) @item -qdiff q -maximum difference between the quantiser scales (VBR) +maximum difference between the quantizer scales (VBR) @item -qblur blur -video quantiser scale blur (VBR) +video quantizer scale blur (VBR) @item -qcomp compression -video quantiser scale compression (VBR) +video quantizer scale compression (VBR) + +@item -lmin lambda +minimum video lagrange factor (VBR) +@item -lmax lambda +max video lagrange factor (VBR) +@item -mblmin lambda +minimum macroblock quantizer scale (VBR) +@item -mblmax lambda +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 @item -rc_init_cplx complexity initial complexity for single pass encoding @@ -435,7 +511,7 @@ Enable Unlimited Motion Vector (h263+) @item -deinterlace Deinterlace pictures. -@item -interlace +@item -ilme 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. @@ -448,11 +524,23 @@ 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. +@item -top n +top=1/bottom=0/auto=-1 field first +@item -dc precision +Intra_dc_precision. +@item -vtag fourcc/tag +Force video tag/fourcc. +@item -qphist +Show QP histogram. +@item -vbsf bitstream filter +Bitstream filters available are "dump_extra", "remove_extra", "noise". @end table @section Audio Options @table @option +@item -aframes number +Set the number of audio frames to record. @item -ar freq Set the audio sampling frequency (default = 44100 Hz). @item -ab bitrate @@ -464,6 +552,40 @@ Disable audio recording. @item -acodec codec Force audio codec to @var{codec}. Use the @code{copy} special value to specify that the raw codec data must be copied as is. +@item -newaudio +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..). + +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 +can override the mapping using @code{-map} as usual. + +Example: +@example +ffmpeg -i file.mpg -vcodec copy -acodec ac3 -ab 384 test.mpg -acodec mp2 -ab 192 -newaudio +@end example +@item -alang code +Set the ISO 639 language code (3 letters) of the current audio stream. +@end table + +@section Advanced Audio options: + +@table @option +@item -atag fourcc/tag +Force audio tag/fourcc. +@item -absf bitstream filter +Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp", "mp3decomp". +@end table + +@section Subtitle options: + +@table @option +@item -scodec codec +Force subtitle codec ('copy' to copy stream). +@item -newsubtitle +Add a new subtitle stream to the current output stream. +@item -slang code +Set the ISO 639 language code (3 letters) of the current subtitle stream. @end table @section Audio/Video grab options @@ -479,31 +601,53 @@ Set television standard (NTSC, PAL (SECAM)). Set DV1394 grab. @item -ad device Set audio device (e.g. @file{/dev/dsp}). +@item -grab format +Request grabbing using. +@item -gd device +Set grab device. @end table @section Advanced options @table @option -@item -map file:stream -Set input stream mapping. +@item -map input stream id[:input stream id] +Set stream mapping from input streams to output streams. +Just enumerate the input streams in the order you want them in the output. +[input stream id] sets the (input) stream to sync against. +@item -map_meta_data outfile:infile +Set meta data information of outfile from infile. @item -debug Print specific debug info. @item -benchmark Add timings for benchmarking. -@item -hex +@item -dump Dump each input packet. +@item -hex +When dumping packets, also dump the payload. @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 +@item -loop_input Loop over the input stream. Currently it works only for image streams. This option is used for automatic FFserver testing. @item -loop_output number_of_times Repeatedly loop output for formats that support looping such as animated GIF (0 will loop the output infinitely). +@item -threads count +Thread count. +@item -vsync parameter +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 +audio unchanged and sync the remaining stream(s) to the unchanged one. +@item -async samples_per_second +Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps, +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. @end table @node FFmpeg formula evaluator @@ -603,7 +747,7 @@ 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 +ffmpeg -g 3 -r 3 -t 10 -b 50k -s qcif -f rv10 /tmp/b.rm @end example @item The parameter 'q' which is displayed while encoding is the current @@ -632,6 +776,40 @@ It allows almost lossless encoding. @end itemize + +@chapter external libraries + +FFmpeg can be hooked up with a number of external libraries to add support +for more formats. + +@section AMR + +AMR comes in two different flavors, WB and NB. FFmpeg can make use of the +AMR WB (floating-point mode) and the AMR NB (both floating-point and +fixed-point mode) reference decoders and encoders. + +@itemize + +@item For AMR WB floating-point download TS26.204 V5.1.0 from +@url{http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip} +and extract the source to @file{libavcodec/amrwb_float/}. + +@item For AMR NB floating-point download TS26.104 REL-5 V5.1.0 from +@url{http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip} +and extract the source to @file{libavcodec/amr_float/}. +If you try this on Alpha, you may need to change @code{Word32} to +@code{int} in @file{amr/typedef.h}. + +@item For AMR NB fixed-point download TS26.073 REL-5 V5.1.0 from +@url{http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip} +and extract the source to @file{libavcodec/amr}. +You must also add @code{-DMMS_IO} and remove @code{-pedantic-errors} +to/from @code{CFLAGS} in @file{libavcodec/amr/makefile}, i.e. +``@code{CFLAGS = -Wall -I. \$(CFLAGS_\$(MODE)) -D\$(VAD) -DMMS_IO}''. + +@end itemize + + @chapter Supported File Formats and Codecs You can use the @code{-formats} option to have an exhaustive list. @@ -704,7 +882,14 @@ library: @tab Multimedia format used by the Creature Shock game. @item Smacker @tab @tab X @tab Multimedia format used by many games. -@item GXF @tab @tab X +@item GXF @tab X @tab X +@tab General eXchange Format SMPTE 360M, used by Thomson Grass Valley playout servers. +@item CIN @tab @tab X +@tab Multimedia format used by Delphine Software games. +@item MXF @tab @tab X +@tab Material eXchange Format SMPTE 377M, used by D-Cinema, broadcast industry. +@item SEQ @tab @tab X +@tab Tiertex .seq files used in the DOS CDROM version of the game Flashback. @end multitable @code{X} means that encoding (resp. decoding) is supported. @@ -723,6 +908,8 @@ following image formats are 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. +@item Targa @tab @tab X @tab Targa (.TGA) image format. +@item TIFF @tab @tab X @tab Only 24 bit/pixel images are supported. @item SGI @tab X @tab X @tab SGI RGB image format @end multitable @@ -734,12 +921,14 @@ following image formats are supported: @item Supported Codec @tab Encoding @tab Decoding @tab Comments @item MPEG-1 video @tab X @tab X @item MPEG-2 video @tab X @tab X -@item MPEG-4 @tab X @tab X @tab also known as DivX4/5 +@item MPEG-4 @tab X @tab X @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 MSMPEG4 V3 @tab X @tab X @item WMV7 @tab X @tab X @item WMV8 @tab X @tab X @tab not completely working +@item WMV9 @tab @tab X @tab not completely working +@item VC1 @tab @tab X @item H.261 @tab X @tab X @item H.263(+) @tab X @tab X @tab also known as RealVideo 1.0 @item H.264 @tab @tab X @@ -760,6 +949,8 @@ following image formats are supported: @item Sorenson Video 1 @tab X @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 On2 VP5 @tab @tab X @tab fourcc: VP50 +@item On2 VP6 @tab @tab X @tab fourcc: VP62 @item Theora @tab @tab X @tab still experimental @item Intel Indeo 3 @tab @tab X @item FLV @tab X @tab X @tab Sorenson H.263 used in Flash @@ -798,19 +989,18 @@ following image formats are supported: @item Fraps FPS1 @tab @tab X @tab @item CamStudio @tab @tab X @tab fourcc: CSCD @item American Laser Games Video @tab @tab X @tab Used in games like Mad Dog McCree -@item ZMBV @tab @tab X @tab +@item ZMBV @tab X @tab X @tab Encoder works only on PAL8 @item AVS Video @tab @tab X @tab Video encoding used by the Creature Shock game. @item Smacker Video @tab @tab X @tab Video encoding used in Smacker. @item RTjpeg @tab @tab X @tab Video encoding used in NuppelVideo files. @item KMVC @tab @tab X @tab Codec used in Worms games. +@item VMware Video @tab @tab X @tab Codec used in videos captured by VMware. +@item Cin Video @tab @tab X @tab Codec used in Delphine Software games. +@item Tiertex Seq Video @tab @tab X @tab Codec used in DOS CDROM FlashBack game. @end multitable @code{X} means that encoding (resp. decoding) is supported. -See @url{http://mplayerhq.hu/~michael/codec-features.html} to -get a precise comparison of the FFmpeg MPEG-4 codec compared to -other implementations. - @section Audio Codecs @multitable @columnfractions .4 .1 .1 .1 .7 @@ -821,7 +1011,6 @@ other implementations. @item AC3 @tab IX @tab IX @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 AAC @tab X @tab X @tab Supported through the external library libfaac/libfaad. @@ -879,6 +1068,10 @@ other implementations. @item DSP Group TrueSpeech @tab @tab X @item True Audio (TTA) @tab @tab X @item Smacker Audio @tab @tab X +@item WavPack Audio @tab @tab X +@item Cin Audio @tab @tab X +@tab Codec used in Delphine Software games. +@item Intel Music Coder @tab @tab X @end multitable @code{X} means that encoding (resp. decoding) is supported. @@ -1084,7 +1277,59 @@ MinGW tools). Then you can easily test FFmpeg with Wine (@url{http://www.winehq.com/}). -@section Mac OS X +@subsection Compilation under Cygwin + +Cygwin works very much like Unix. + +Just install your Cygwin with all the "Base" packages, plus the +following "Devel" ones: +@example +binutils, gcc-core, make, subversion +@end example + +Do not install binutils-20060709-1 (they are buggy on shared builds); +use binutils-20050610-1 instead. + +Then run + +@example +./configure --enable-static --disable-shared +@end example + +to make a static build or + +@example +./configure --enable-shared --disable-static +@end example + +to build shared libraries. + +If you want to build FFmpeg with additional libraries, download Cygwin +"Devel" packages for Ogg and Vorbis from any Cygwin packages repository +and/or SDL, xvid, faac, faad2 packages from Cygwin Ports, +(@url{http://cygwinports.dotsrc.org/}). + +@subsection Crosscompilation for Windows under Cygwin + +With Cygwin you can create Windows binaries that don't need the cygwin1.dll. + +Just install your Cygwin as explained before, plus these additional +"Devel" packages: +@example +gcc-mingw-core, mingw-runtime, mingw-zlib +@end example + +and add some special flags to your configure invocation. + +For a static build run +@example +./configure --enable-mingw32 --enable-memalign-hack --enable-static --disable-shared --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin +@end example + +and for a build with shared libraries +@example +./configure --enable-mingw32 --enable-memalign-hack --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin +@end example @section BeOS @@ -1109,7 +1354,7 @@ valid results, then crashes. @chapter Developers Guide @section API -@itemize +@itemize @bullet @item libavcodec is the library containing the codecs (both encoding and decoding). Look at @file{libavcodec/apiexample.c} to see how to use it. @@ -1214,7 +1459,6 @@ int myfunc(int my_parameter) fprintf and printf are forbidden in libavformat and libavcodec, please use av_log() instead. -@node Development Policy @section Development Policy @enumerate @@ -1271,11 +1515,11 @@ please use av_log() instead. answer to ffmpeg-devel (or wherever you got the patch from) saying that you applied the patch. @item - Do NOT commit to code actively maintained by others without permission. Send - a patch to ffmpeg-devel instead. If noone awnsers within a reasonable time - (12h for build failure and security fixes, 3 days for all other small changes - 1 week for big patches) then commit your patch if you think its ok - also note, the maintainer can simply ask for more time to review! + Do NOT commit to code actively maintained by others without permission. + Send a patch to ffmpeg-devel instead. If noone answers within a reasonable + timeframe (12h for build failures and security fixes, 3 days small changes, + 1 week for big patches) then commit your patch if you think it's OK. + Also note, the maintainer can simply ask for more time to review! @item Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits are sent there and reviewed by all the other developers. Bugs and possible @@ -1294,9 +1538,9 @@ please use av_log() instead. parts (libavutil, libavcodec, libavformat) you are changing. You need to change the version integer and the version string. Incrementing the first component means no backward compatibility to - previous versions (e.g. removal of a function). + previous versions (e.g. removal of a function from the public API). Incrementing the second component means backward compatible change - (e.g. addition of a function). + (e.g. addition of a function to the public API). Incrementing the third component means a noteworthy binary compatible change (e.g. encoder bug fix that matters for the decoder). @item @@ -1311,10 +1555,6 @@ We think our rules are not too hard. If you have comments, contact us. Note, these rules are mostly borrowed from the MPlayer project. -@subsection Renaming/moving files or content of files - You CANNOT do that. Post a request for such a change to the mailing list - Do NOT remove & readd a file - it will kill the changelog!!!! - @section Submitting patches First, (@pxref{Coding Rules}) above if you didn't yet.