diff --git a/Program/avcodec-52.dll b/Program/avcodec-52.dll deleted file mode 100644 index 7ed2e7ef85..0000000000 Binary files a/Program/avcodec-52.dll and /dev/null differ diff --git a/Program/avcodec-53.dll b/Program/avcodec-53.dll new file mode 100644 index 0000000000..f762b3df0a Binary files /dev/null and b/Program/avcodec-53.dll differ diff --git a/Program/avdevice-52.dll b/Program/avdevice-52.dll deleted file mode 100644 index ae66642729..0000000000 Binary files a/Program/avdevice-52.dll and /dev/null differ diff --git a/Program/avformat-52.dll b/Program/avformat-52.dll deleted file mode 100644 index e936a796ca..0000000000 Binary files a/Program/avformat-52.dll and /dev/null differ diff --git a/Program/avformat-53.dll b/Program/avformat-53.dll new file mode 100644 index 0000000000..21267dd12c Binary files /dev/null and b/Program/avformat-53.dll differ diff --git a/Program/avutil-50.dll b/Program/avutil-50.dll deleted file mode 100644 index 1940d72201..0000000000 Binary files a/Program/avutil-50.dll and /dev/null differ diff --git a/Program/avutil-51.dll b/Program/avutil-51.dll new file mode 100644 index 0000000000..ef175d8c5c Binary files /dev/null and b/Program/avutil-51.dll differ diff --git a/Program/ffmpeg_lastgood/avcodec-51.dll b/Program/ffmpeg_lastgood/avcodec-51.dll deleted file mode 100644 index 5870cd8172..0000000000 Binary files a/Program/ffmpeg_lastgood/avcodec-51.dll and /dev/null differ diff --git a/Program/ffmpeg_lastgood/avformat-51.dll b/Program/ffmpeg_lastgood/avformat-51.dll deleted file mode 100644 index cb97ae8ee4..0000000000 Binary files a/Program/ffmpeg_lastgood/avformat-51.dll and /dev/null differ diff --git a/Program/ffmpeg_lastgood/avutil-49.dll b/Program/ffmpeg_lastgood/avutil-49.dll deleted file mode 100644 index edcb57911e..0000000000 Binary files a/Program/ffmpeg_lastgood/avutil-49.dll and /dev/null differ diff --git a/Program/swscale-0.dll b/Program/swscale-0.dll deleted file mode 100644 index b316c1287a..0000000000 Binary files a/Program/swscale-0.dll and /dev/null differ diff --git a/Program/swscale-2.dll b/Program/swscale-2.dll new file mode 100644 index 0000000000..f060f9f248 Binary files /dev/null and b/Program/swscale-2.dll differ diff --git a/autoconf/m4/video.m4 b/autoconf/m4/video.m4 index f4f15544cb..6aceb10d20 100644 --- a/autoconf/m4/video.m4 +++ b/autoconf/m4/video.m4 @@ -1,42 +1,31 @@ AC_DEFUN([SM_VIDEO], [ + +AC_REQUIRE([SM_STATIC]) + AC_ARG_WITH(ffmpeg, AS_HELP_STRING([--without-ffmpeg],[Disable ffmpeg support]), with_ffmpeg=$withval, with_ffmpeg=yes) +AC_ARG_WITH(static-ffmpeg, AS_HELP_STRING([--with-static-ffmpeg],[Statically link ffmpeg libraries]), with_static_ffmpeg=$withval, with_static_ffmpeg=no) -old_LIBS="$LIBS" -old_CFLAGS="$CFLAGS" -old_CXXFLAGS="$CXXFLAGS" - -if test "$with_ffmpeg" != "no"; then - if test "$with_ffmpeg" != "yes"; then - if test $(echo $with_ffmpeg|cut -c 1) != /; then - with_ffmpeg=$(/bin/pwd)/$with_ffmpeg - fi - CFLAGS="-I$with_ffmpeg/include $CFLAGS" - CXXFLAGS="-I$with_ffmpeg/include $CXXFLAGS" - LIBS="$with_ffmpeg/lib/libavutil.a $LIBS" - AC_CHECK_FUNC([av_free], have_libavutil=yes, have_libavutil=no) - LIBS="$with_ffmpeg/lib/libavcodec.a $LIBS" - AC_CHECK_FUNC([avcodec_init], have_libavcodec=yes, have_libavcodec=no) - LIBS="$with_ffmpeg/lib/libavformat.a $LIBS" - AC_CHECK_FUNC([guess_format], have_libavformat=yes, have_libavformat=no) - LIBS="$with_ffmpeg/lib/libswscale.a $LIBS" - AC_CHECK_FUNC([sws_scale], have_libswscale=yes, have_libswscale=no) - else - AC_SEARCH_LIBS(av_free, [avutil], have_libavutil=yes, have_libavutil=no) - AC_SEARCH_LIBS(avcodec_init, [avcodec], have_libavcodec=yes, have_libavcodec=no) - AC_SEARCH_LIBS(guess_format, [avformat], have_libavformat=yes, have_libavformat=no) - AC_SEARCH_LIBS(sws_scale, [swscale], have_libswscale=yes, have_libswscale=no) - fi +if test "$with_static_ffmpeg" = "yes"; then + LIB_PRE=$START_STATIC + LIB_POST=$END_STATIC fi have_ffmpeg=no -if test "$have_libavutil" = "yes" -a "$have_libavformat" = "yes" -a "$have_libavcodec" = "yes" -a "$have_libswscale" = "yes"; then - have_ffmpeg=yes - AC_DEFINE(HAVE_FFMPEG, 1, [FFMPEG support available]) -else - LIBS="$old_LIBS" - CFLAGS="$old_CFLAGS" - CXXFLAGS="$old_CXXFLAGS" +if test "$with_ffmpeg" = "yes"; then + AC_CHECK_LIB(avutil, av_free, have_libavutil=yes, have_libavutil=no) + AC_CHECK_LIB(avformat, av_guess_format, have_libavformat=yes, have_libavformat=no) + AC_CHECK_LIB(avcodec, avcodec_init, have_libavcodec=yes, have_libavcodec=no) + AC_CHECK_LIB(swscale, sws_scale, have_libswscale=yes, have_libswscale=no) + if test "$have_libavutil" = "yes" -a "$have_libavformat" = "yes" -a "$have_libavcodec" = "yes" -a "$have_libswscale" = "yes"; then + have_ffmpeg=yes + LIBS="$LIBS $LIB_PRE -lavutil -lavcodec -lavformat -lswscale $LIB_POST" + AC_DEFINE(HAVE_FFMPEG, 1, [FFMPEG support available]) + fi fi + +LIB_PRE= +LIB_POST= + AM_CONDITIONAL(HAVE_FFMPEG, test "$have_ffmpeg" = "yes") diff --git a/extern/ffmpeg/README.txt b/extern/ffmpeg/README.txt new file mode 100644 index 0000000000..e22241c131 --- /dev/null +++ b/extern/ffmpeg/README.txt @@ -0,0 +1,80 @@ +This is a FFmpeg Win32 shared build by Kyle Schwarz. + +Zeranoe's FFmpeg Builds Home Page: http://ffmpeg.zeranoe.com/builds/ + +Built on Jan 27 2012 18:37:07 + +FFmpeg version git-01fcbdf + libavutil 51. 34.101 / 51. 34.101 + libavcodec 53. 60.100 / 53. 60.100 + libavformat 53. 31.100 / 53. 31.100 + libavdevice 53. 4.100 / 53. 4.100 + libavfilter 2. 60.100 / 2. 60.100 + libswscale 2. 1.100 / 2. 1.100 + libswresample 0. 6.100 / 0. 6.100 + libpostproc 52. 0.100 / 52. 0.100 + +FFmpeg configured with: + --disable-static + --enable-shared + --enable-gpl + --enable-version3 + --disable-w32threads + --enable-runtime-cpudetect + --enable-avisynth + --enable-bzlib + --enable-frei0r + --enable-libopencore-amrnb + --enable-libopencore-amrwb + --enable-libfreetype + --enable-libgsm + --enable-libmp3lame + --enable-libopenjpeg + --enable-librtmp + --enable-libschroedinger + --enable-libspeex + --enable-libtheora + --enable-libvo-aacenc + --enable-libvo-amrwbenc + --enable-libvorbis + --enable-libvpx + --enable-libx264 + --enable-libxavs + --enable-libxvid + --enable-zlib + +The source code for this FFmpeg build can be found at: + http://ffmpeg.zeranoe.com/builds/source/ffmpeg/ + +This version of FFmpeg was built on: + Ubuntu Desktop 10.04: http://www.ubuntu.com/desktop + +The cross-compile toolchain used to compile this FFmpeg was: + MinGW-w64: http://mingw-w64.sourceforge.net/ + winpthreads (part of MinGW-w64) + +The GCC version used to compile this FFmpeg was: + GCC 4.6.2: http://gcc.gnu.org/ + +The external libaries compiled into this FFmpeg are: + bzip2 1.0.6 http://www.bzip.org + Frei0r 1.3 http://frei0r.dyne.org/ + opencore-amr 0.1.2 http://sourceforge.net/projects/opencore-amr/ + FreeType 2.4.6 http://www.freetype.org/ + gsm 1.0.13 http://libgsm.sourcearchive.com/ + LAME 3.98.4 http://lame.sourceforge.net/ + OpenJPEG 1.4 http://www.openjpeg.org/ + RTMP git-60218d0a http://rtmpdump.mplayerhq.hu/ + Schroedinger 1.0.10 http://diracvideo.org/ + Speex 1.2rc1 http://www.speex.org/ + Theora 1.1.1 http://www.theora.org/ + vo-aacenc 0.1.1 http://sourceforge.net/projects/opencore-amr/ + vo-amrwbenc 0.1.1 http://sourceforge.net/projects/opencore-amr/ + Vorbis 1.3.2 http://www.vorbis.com/ + libvpx v0.9.7-p1 http://www.webmproject.org/code/ + x264 git-bcd41db http://www.videolan.org/developers/x264.html + XAVS r55 http://xavs.sourceforge.net/ + Xvid 1.3.2 http://www.xvid.org/ + zlib 1.2.5 http://zlib.net/ + +License for each library can be found in the licenses folder. diff --git a/extern/ffmpeg/doc/developer.html b/extern/ffmpeg/doc/developer.html new file mode 100644 index 0000000000..4af08f8cdc --- /dev/null +++ b/extern/ffmpeg/doc/developer.html @@ -0,0 +1,656 @@ + + + + +
+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 +any patch you make must be published. The best way to proceed is +to send your patches to the FFmpeg mailing list. +
+ +There are 3 ways by which code gets into ffmpeg. +
Whichever way, changes should be reviewed by the maintainer of the code +before they are committed. And they should follow the Coding Rules. +The developer making the commit and the author are responsible for their changes +and should try to fix issues their commit causes. +
+ +There are the following guidelines regarding the indentation in files: +
The presentation is one inspired by ’indent -i4 -kr -nut’. +
+The main priority in FFmpeg is simplicity and small code size in order to +minimize the bug count. +
+ +Use the JavaDoc/Doxygen format (see examples below) so that code documentation +can be generated automatically. All nontrivial functions should have a comment +above them explaining what the function does, even if it is just one sentence. +All structures and their member variables should be documented, too. +
+Avoid Qt-style and similar Doxygen syntax with ! in it, i.e. replace
+//! with /// and similar. Also @ syntax should be employed
+for markup commands, i.e. use @param and not \param.
+
/**
+ * @file
+ * MPEG codec.
+ * @author ...
+ */
+
+/**
+ * Summary sentence.
+ * more text ...
+ * ...
+ */
+typedef struct Foobar{
+ int var1; /**< var1 description */
+ int var2; ///< var2 description
+ /** var3 description */
+ int var3;
+} Foobar;
+
+/**
+ * Summary sentence.
+ * more text ...
+ * ...
+ * @param my_parameter description of my_parameter
+ * @return return value description
+ */
+int myfunc(int my_parameter)
+...
+ |
FFmpeg is programmed in the ISO C90 language with a few additional +features from ISO C99, namely: +
These features are supported by all compilers we care about, so we will not +accept patches to remove their use unless they absolutely do not impair +clarity and performance. +
+All code must compile with recent versions of GCC and a number of other +currently supported compilers. To ensure compatibility, please do not use +additional C99 features or GCC extensions. Especially watch out for: +
All names are using underscores (_), not CamelCase. For example, ‘avfilter_get_video_buffer’ is +a valid function name and ‘AVFilterGetVideo’ is not. The exception from this are type names, like +for example structs and enums; they should always be in the CamelCase +
+ +There are following conventions for naming variables and functions: +
static no prefixes are required.
+ff_ prefix
+should be used.
+For example, ‘ff_w64_demuxer’.
+avpriv_. For example, ‘avpriv_aac_parse_header’.
+In order to configure Vim to follow FFmpeg formatting conventions, paste +the following snippet into your ‘.vimrc’: +
" indentation rules for FFmpeg: 4 spaces, no tabs +set expandtab +set shiftwidth=4 +set softtabstop=4 +" allow tabs in Makefiles +autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=8 +" Trailing whitespace and tabs are forbidden, so highlight them. +highlight ForbiddenWhitespace ctermbg=red guibg=red +match ForbiddenWhitespace /\s\+$\|\t/ +" Do not highlight spaces at the end of line while typing on that line. +autocmd InsertEnter * match ForbiddenWhitespace /\t\|\s\+\%#\@<!$/ + |
For Emacs, add these roughly equivalent lines to your ‘.emacs.d/init.el’: +
(setq c-default-style "k&r") +(setq-default c-basic-offset 4) +(setq-default indent-tabs-mode nil) +(setq-default show-trailing-whitespace t) + |
Note: Redundant code can be removed. +
NOTE: If you had to put if(){ .. } over a large (> 5 lines) chunk of code, + then either do NOT change the indentation of the inner part within (do not + move it to the right)! or do so in a separate commit +
details describing what and why and giving references. +
We think our rules are not too hard. If you have comments, contact us. +
+Note, these rules are mostly borrowed from the MPlayer project. +
+ +First, read the Coding Rules above if you did not yet, in particular +the rules regarding patch submission. +
+When you submit your patch, please use git format-patch or
+git send-email. We cannot read other diffs :-)
+
Also please do not submit a patch which contains several unrelated changes. +Split it into separate, self-contained pieces. This does not mean splitting +file by file. Instead, make the patch as small as possible while still +keeping it as a logical unit that contains an individual change, even +if it spans multiple files. This makes reviewing your patches much easier +for us and greatly increases your chances of getting your patch applied. +
+Use the patcheck tool of FFmpeg to check your patch. +The tool is located in the tools directory. +
+Run the Regression tests before submitting a patch in order to verify +it does not cause unexpected problems. +
+Patches should be posted as base64 encoded attachments (or any other +encoding which ensures that the patch will not be trashed during +transmission) to the ffmpeg-devel mailing list, see +http://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel +
+It also helps quite a bit if you tell us what the patch does (for example +’replaces lrint by lrintf’), and why (for example ’*BSD isn’t C99 compliant +and has no lrint()’) +
+Also please if you send several patches, send each patch as a separate mail, +do not attach several unrelated patches to the same mail. +
+Your patch will be reviewed on the mailing list. You will likely be asked +to make some changes and are expected to send in an improved version that +incorporates the requests from the review. This process may go through +several iterations. Once your patch is deemed good enough, some developer +will pick it up and commit it to the official FFmpeg tree. +
+Give us a few days to react. But if some time passes without reaction, +send a reminder by email. Your patch should eventually be dealt with. +
+ + +git add the appropriate files before committing?
+configure --disable-everything --enable-decoder=foo
+ (or --enable-demuxer or whatever your component is)?
+make fate pass with the patch applied?
+All patches posted to ffmpeg-devel will be reviewed, unless they contain a +clear note that the patch is not for the git master branch. +Reviews and comments will be posted as replies to the patch on the +mailing list. The patch submitter then has to take care of every comment, +that can be by resubmitting a changed patch or by discussion. Resubmitted +patches will themselves be reviewed like any other patch. If at some point +a patch passes review with no comments then it is approved, that can for +simple and small patches happen immediately while large patches will generally +have to be changed and reviewed many times before they are approved. +After a patch is approved it will be committed to the repository. +
+We will review all submitted patches, but sometimes we are quite busy so +especially for large patches this can take several weeks. +
+If you feel that the review process is too slow and you are willing to try to +take over maintainership of the area of code you change then just clone +git master and maintain the area of code there. We will merge each area from +where its best maintained. +
+When resubmitting patches, please do not make any significant changes +not related to the comments received during review. Such patches will +be rejected. Instead, submit significant changes or new features as +separate patches. +
+ +Before submitting a patch (or committing to the repository), you should at least +test that you did not break anything. +
+Running ’make fate’ accomplishes this, please see fate.html for details. +
+[Of course, some patches may change the results of the regression tests. In +this case, the reference results of the regression tests shall be modified +accordingly]. +
+make fate not running all tests?make fate not finding the samples?Because no one has taken on that task yet. FFmpeg development is +driven by the tasks that are important to the individual developers. +If there is a feature that is important to you, the best way to get +it implemented is to undertake the task yourself or sponsor a developer. +
+ +No. Windows DLLs are not portable, bloated and often slow. +Moreover FFmpeg strives to support all codecs natively. +A DLL loader is not conducive to that goal. +
+ +Even if ffmpeg can read the container format, it may not support all its +codecs. Please consult the supported codec list in the ffmpeg +documentation. +
+ +Windows does not support standard formats like MPEG very well, unless you +install some additional codecs. +
+The following list of video codecs should work on most Windows systems: +
.avi/.asf +
.asf only +
.asf only +
.asf only +
Only if you have some MPEG-4 codec like ffdshow or Xvid installed. +
.mpg only +
Note, ASF files often have .wmv or .wma extensions in Windows. It should also +be mentioned that Microsoft claims a patent on the ASF format, and may sue +or threaten users who create ASF files with non-Microsoft software. It is +strongly advised to avoid ASF where possible. +
+The following list of audio codecs should work on most Windows systems: +
always +
If some MP3 codec like LAME is installed. +
error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'This is a bug in gcc. Do not report it to us. Instead, please report it to +the gcc developers. Note that we will not add workarounds for gcc bugs. +
+Also note that (some of) the gcc developers believe this is not a bug or +not a bug they should fix: +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203. +Then again, some of them do not know the difference between an undecidable +problem and an NP-hard problem... +
+ +Try a make distclean in the ffmpeg source directory before the build.
+If this does not help see
+(http://ffmpeg.org/bugreports.html).
+
First, rename your pictures to follow a numerical sequence. +For example, img1.jpg, img2.jpg, img3.jpg,... +Then you may run: +
+ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg + |
Notice that ‘%d’ is replaced by the image number. +
+‘img%03d.jpg’ means the sequence ‘img001.jpg’, ‘img002.jpg’, etc... +
+If you have large number of pictures to rename, you can use the
+following command to ease the burden. The command, using the bourne
+shell syntax, symbolically links all files in the current directory
+that match *jpg to the ‘/tmp’ directory in the sequence of
+‘img001.jpg’, ‘img002.jpg’ and so on.
+
x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done + |
If you want to sequence them by oldest modified first, substitute
+$(ls -r -t *jpg) in place of *jpg.
+
Then run: +
+ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg + |
The same logic is used for any image format that ffmpeg reads. +
+ +Use: +
+ffmpeg -i movie.mpg movie%d.jpg + |
The ‘movie.mpg’ used as input will be converted to +‘movie1.jpg’, ‘movie2.jpg’, etc... +
+Instead of relying on file format self-recognition, you may also use +
to force the encoding. +
+Applying that to the previous example: +
ffmpeg -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg + |
Beware that there is no "jpeg" codec. Use "mjpeg" instead. +
+ +For multithreaded MPEG* encoding, the encoded slices must be independent, +otherwise thread n would practically have to wait for n-1 to finish, so it’s +quite logical that there is a small reduction of quality. This is not a bug. +
+ +Use ‘-’ as file name. +
+ +Try ’-f image2 test%d.jpg’. +
+ +Some codecs, like MPEG-1/2, only allow a small number of fixed frame rates. +Choose a different codec with the -c:v command line option. +
+ +Both Xvid and DivX (version 4+) are implementations of the ISO MPEG-4 +standard (note that there are many other coding formats that use this +same standard). Thus, use ’-c:v mpeg4’ to encode in these formats. The +default fourcc stored in an MPEG-4-coded file will be ’FMP4’. If you want +a different fourcc, use the ’-vtag’ option. E.g., ’-vtag xvid’ will +force the fourcc ’xvid’ to be stored as the video fourcc rather than the +default. +
+ +’-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2’, +things to try: ’-bf 2’, ’-flags qprd’, ’-flags mv0’, ’-flags skiprd’. +
+ +’-mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 100 -pass 1/2’ +but beware the ’-g 100’ might cause problems with some decoders. +Things to try: ’-bf 2’, ’-flags qprd’, ’-flags mv0’, ’-flags skiprd. +
+ +You should use ’-flags +ilme+ildct’ and maybe ’-flags +alt’ for interlaced +material, and try ’-top 0/1’ if the result looks really messed-up. +
+ +If you have built FFmpeg with ./configure --enable-avisynth
+(only possible on MinGW/Cygwin platforms),
+then you may use any file that DirectShow can read as input.
+
Just create an "input.avs" text file with this single line ... +
DirectShowSource("C:\path to your file\yourfile.asf")
+ |
... and then feed that text file to ffmpeg: +
ffmpeg -i input.avs + |
For ANY other help on Avisynth, please visit the +Avisynth homepage. +
+ +A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow to join video files by +merely concatenating them. +
+Hence you may concatenate your multimedia files by first transcoding them to
+these privileged formats, then using the humble cat command (or the
+equally humble copy under Windows), and finally transcoding back to your
+format of choice.
+
ffmpeg -i input1.avi -same_quant intermediate1.mpg +ffmpeg -i input2.avi -same_quant intermediate2.mpg +cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg +ffmpeg -i intermediate_all.mpg -same_quant output.avi + |
Notice that you should either use -same_quant or set a reasonably high
+bitrate for your intermediate and output files, if you want to preserve
+video quality.
+
Also notice that you may avoid the huge intermediate files by taking advantage +of named pipes, should your platform support it: +
+mkfifo intermediate1.mpg +mkfifo intermediate2.mpg +ffmpeg -i input1.avi -same_quant -y intermediate1.mpg < /dev/null & +ffmpeg -i input2.avi -same_quant -y intermediate2.mpg < /dev/null & +cat intermediate1.mpg intermediate2.mpg |\ +ffmpeg -f mpeg -i - -same_quant -c:v mpeg4 -acodec libmp3lame output.avi + |
Similarly, the yuv4mpegpipe format, and the raw video, raw audio codecs also
+allow concatenation, and the transcoding step is almost lossless.
+When using multiple yuv4mpegpipe(s), the first line needs to be discarded
+from all but the first stream. This can be accomplished by piping through
+tail as seen below. Note that when piping through tail you
+must use command grouping, { ;}, to background properly.
+
For example, let’s say we want to join two FLV files into an output.flv file: +
+mkfifo temp1.a
+mkfifo temp1.v
+mkfifo temp2.a
+mkfifo temp2.v
+mkfifo all.a
+mkfifo all.v
+ffmpeg -i input1.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 - > temp1.a < /dev/null &
+ffmpeg -i input2.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 - > temp2.a < /dev/null &
+ffmpeg -i input1.flv -an -f yuv4mpegpipe - > temp1.v < /dev/null &
+{ ffmpeg -i input2.flv -an -f yuv4mpegpipe - < /dev/null | tail -n +2 > temp2.v ; } &
+cat temp1.a temp2.a > all.a &
+cat temp1.v temp2.v > all.v &
+ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
+ -f yuv4mpegpipe -i all.v \
+ -same_quant -y output.flv
+rm temp[12].[av] all.[av]
+ |
ffmpeg prints an error like
+
Undefined constant or missing '(' in 'baseline'
+Unable to parse option value "baseline"
+Error setting option profile to value baseline.
+ |
Short answer: write ‘-profile:v’ instead of ‘-profile’. +
+Long answer: this happens because the ‘-profile’ option can apply to both +video and audio. Specifically the AAC encoder also defines some profiles, none +of which are named baseline. +
+The solution is to apply the ‘-profile’ option to the video stream only
+by using Stream specifiers.
+Appending :v to it will do exactly that.
+
Use ‘-dumpgraph -’ to find out exactly where the channel layout is +lost. +
+Most likely, it is through auto-inserted aconvert. Try to understand
+why the converting filter was needed at that place.
+
Just before the output is a likely place, as ‘-f lavfi’ currently +only support packed S16. +
+Then insert the correct aconvert explicitly in the filter graph,
+specifying the exact format.
+
aconvert=s16:stereo:packed + |
Yes. Read the Developers Guide of the FFmpeg documentation. Alternatively, +examine the source code for one of the many open source projects that +already incorporate FFmpeg at (projects.html). +
+ +It depends. If your compiler is C99-compliant, then patches to support
+it are likely to be welcome if they do not pollute the source code
+with #ifdefs related to the compiler.
+
No. Microsoft Visual C++ is not compliant to the C99 standard and does +not - among other things - support the inline assembly used in FFmpeg. +If you wish to use MSVC++ for your +project then you can link the MSVC++ code with libav* as long as +you compile the latter with a working C compiler. For more information, see +the Microsoft Visual C++ compatibility section in the FFmpeg +documentation. +
+There have been efforts to make FFmpeg compatible with MSVC++ in the +past. However, they have all been rejected as too intrusive, especially +since MinGW does the job adequately. None of the core developers +work with MSVC++ and thus this item is low priority. Should you find +the silver bullet that solves this problem, feel free to shoot it at us. +
+We strongly recommend you to move over from MSVC++ to MinGW tools. +
+ +Yes, but the Cygwin or MinGW tools must be used to compile FFmpeg. +Read the Windows section in the FFmpeg documentation to find more +information. +
+To get help and instructions for building FFmpeg under Windows, check out +the FFmpeg Windows Help Forum at +http://ffmpeg.arrozcru.org/. +
+ +No. These tools are too bloated and they complicate the build. +
+ +FFmpeg is already organized in a highly modular manner and does not need to +be rewritten in a formal object language. Further, many of the developers +favor straight C; it works for them. For more arguments on this matter, +read "Programming Religion". +
+ +The build process creates ffmpeg_g, ffplay_g, etc. which contain full debug +information. Those binaries are stripped to create ffmpeg, ffplay, etc. If +you need the debug information, use the *_g versions. +
+ +Yes, as long as the code is optional and can easily and cleanly be placed +under #if CONFIG_GPL without breaking anything. So, for example, a new codec +or filter would be OK under GPL while a bug fix to LGPL code would not. +
+ +FFmpeg is a pure C project, so to use the libraries within your C++ application
+you need to explicitly state that you are using a C library. You can do this by
+encompassing your FFmpeg includes using extern "C".
+
See http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3 +
+ +FFmpeg is a pure C project using C99 math features, in order to enable C++ +to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS +
+ +You have to implement a URLProtocol, see ‘libavformat/file.c’ in +FFmpeg and ‘libmpdemux/demux_lavf.c’ in MPlayer sources. +
+ +see http://www.iversenit.dk/dev/ffmpeg-headers/ +
+ +see http://www.ffmpeg.org/~michael/ +
+ +Even if peculiar since it is network oriented, RTP is a container like any +other. You have to demux RTP before feeding the payload to libavcodec. +In this specific case please look at RFC 4629 to see how it should be done. +
+ +r_frame_rate is NOT the average frame rate, it is the smallest frame rate +that can accurately represent all timestamps. So no, it is not +wrong if it is larger than the average! +For example, if you have mixed 25 and 30 fps content, then r_frame_rate +will be 150. +
+ +make fate not running all tests?Make sure you have the fate-suite samples and the SAMPLES Make variable
+or FATE_SAMPLES environment variable or the --samples
+configure option is set to the right path.
+
make fate not finding the samples?Do you happen to have a ~ character in the samples path to indicate a
+home directory? The value is used in ways where the shell cannot expand it,
+causing FATE to not find files. Just replace ~ by the full path.
+
FATE is an extended regression suite on the client-side and a means +for results aggregation and presentation on the server-side. +
+The first part of this document explains how you can use FATE from +your FFmpeg source directory to test your ffmpeg binary. The second +part describes how you can run FATE to submit the results to FFmpeg’s +FATE server. +
+In any way you can have a look at the publicly viewable FATE results +by visiting this website: +
+ +This is especially recommended for all people contributing source +code to FFmpeg, as it can be seen if some test on some platform broke +with there recent contribution. This usually happens on the platforms +the developers could not test on. +
+The second part of this document describes how you can run FATE to +submit your results to FFmpeg’s FATE server. If you want to submit your +results be sure to check that your combination of CPU, OS and compiler +is not already listed on the above mentioned website. +
+In the third part you can find a comprehensive listing of FATE makefile +targets and variables. +
+ + +If you want to run FATE on your machine you need to have the samples +in place. You can get the samples via the build target fate-rsync. +Use this command from the top-level source directory: +
+make fate-rsync SAMPLES=fate-suite/ +make fate SAMPLES=fate-suite/ + |
The above commands set the samples location by passing a makefile +variable via command line. It is also possible to set the samples +location at source configuration time by invoking configure with +‘–samples=<path to the samples directory>’. Afterwards you can +invoke the makefile targets without setting the SAMPLES makefile +variable. This is illustrated by the following commands: +
+./configure --samples=fate-suite/ +make fate-rsync +make fate + |
Yet another way to tell FATE about the location of the sample +directory is by making sure the environment variable FATE_SAMPLES +contains the path to your samples directory. This can be achieved +by e.g. putting that variable in your shell profile or by setting +it in your interactive session. +
+FATE_SAMPLES=fate-suite/ make fate + |
Do not put a ’~’ character in the samples path to indicate a home +directory. Because of shell nuances, this will cause FATE to fail. +
To submit your results to the server you should run fate through the +shell script tests/fate.sh from the FFmpeg sources. This script needs +to be invoked with a configuration file as its first argument. +
+tests/fate.sh /path/to/fate_config + |
A configuration file template with comments describing the individual +configuration variables can be found at ‘tests/fate_config.sh.template’. +
+The mentioned configuration template is also available here: +
slot= # some unique identifier +repo=git://source.ffmpeg.org/ffmpeg.git # the source repository +samples= # path to samples directory +workdir= # directory in which to do all the work +#fate_recv="ssh -T fate@fate.ffmpeg.org" # command to submit report +comment= # optional description + +# the following are optional and map to configure options +arch= +cpu= +cross_prefix= +cc= +target_os= +sysroot= +target_exec= +target_path= +extra_cflags= +extra_ldflags= +extra_libs= +extra_conf= # extra configure options not covered above + +#make= # name of GNU make if not 'make' +makeopts= # extra options passed to 'make' +#tar= # command to create a tar archive from its arguments on stdout, + # defaults to 'tar c' ++
Create a configuration that suits your needs, based on the configuration +template. The ‘slot’ configuration variable can be any string that is not +yet used, but it is suggested that you name it adhering to the following +pattern <arch>-<os>-<compiler>-<compiler version>. The configuration file +itself will be sourced in a shell script, therefore all shell features may +be used. This enables you to setup the environment as you need it for your +build. +
+For your first test runs the ‘fate_recv’ variable should be empty or +commented out. This will run everything as normal except that it will omit +the submission of the results to the server. The following files should be +present in $workdir as specified in the configuration file: +
+When you have everything working properly you can create an SSH key and +send its public part to the FATE server administrator. +
+Configure your SSH client to use public key authentication with that key +when connecting to the FATE server. Also do not forget to check the identity +of the server and to accept its host key. This can usually be achieved by +running your SSH client manually and killing it after you accepted the key. +The FATE server’s fingerprint is: +
+b1:31:c8:79:3f:04:1d:f8:f2:23:26:5a:fd:55:fa:92 +
+The only thing left is to automate the execution of the fate.sh script and +the synchronisation of the samples directory. +
+ + +Download/synchronize sample files to the configured samples directory. +
+Will list all fate/regression test targets. +
+Run the FATE test suite (requires the fate-suite dataset). +
Verbosity level, can be set to 0, 1 or 2. +
Specify or override the path to the FATE samples at make time, it has a + meaning only while running the regression tests. +
+Specify how many threads to use while running regression tests, it is + quite useful to detect thread-related regressions. +
Example: +
make V=1 SAMPLES=/var/fate/samples THREADS=2 fate + |
The generic syntax is: +
+ffmpeg [global options] [[infile options][‘-i’ infile]]... {[outfile options] outfile}...
+ |
ffmpeg is a very fast video and audio converter that can also grab from +a live audio/video source. It can also convert between arbitrary sample +rates and resize video on the fly with a high quality polyphase filter. +
+ffmpeg reads from an arbitrary number of input "files" (which can be regular
+files, pipes, network streams, grabbing devices, etc.), specified by the
+-i option, and writes to an arbitrary number of output "files", which are
+specified by a plain output filename. Anything found on the command line which
+cannot be interpreted as an option is considered to be an output filename.
+
Each input or output file can in principle contain any number of streams of
+different types (video/audio/subtitle/attachment/data). Allowed number and/or
+types of streams can be limited by the container format. Selecting, which
+streams from which inputs go into output, is done either automatically or with
+the -map option (see the Stream selection chapter).
+
To refer to input files in options, you must use their indices (0-based). E.g.
+the first input file is 0, the second is 1 etc. Similarly, streams
+within a file are referred to by their indices. E.g. 2:3 refers to the
+fourth stream in the third input file. See also the Stream specifiers chapter.
+
As a general rule, options are applied to the next specified +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. +Exceptions from this rule are the global options (e.g. verbosity level), +which should be specified first. +
+Do not mix input and output files – first specify all input files, then all +output files. Also do not mix options which belong to different files. All +options apply ONLY to the next input or output file and are reset between files. +
+ffmpeg -i input.avi -b:v 64k output.avi + |
ffmpeg -i input.avi -r 24 output.avi + |
ffmpeg -r 1 -i input.m2v -r 24 output.avi + |
The format option may be needed for raw input files. +
+ + +By default ffmpeg includes only one stream of each type (video, audio, subtitle) +present in the input files and adds them to each output file. It picks the +"best" of each based upon the following criteria; for video it is the stream +with the highest resolution, for audio the stream with the most channels, for +subtitle it’s the first subtitle stream. In the case where several streams of +the same type rate equally, the lowest numbered stream is chosen. +
+You can disable some of those defaults by using -vn/-an/-sn options. For
+full manual control, use the -map option, which disables the defaults just
+described.
+
All the numerical options, if not specified otherwise, accept in input +a string representing a number, which may contain one of the +International System number postfixes, for example ’K’, ’M’, ’G’. +If ’i’ is appended after the postfix, powers of 2 are used instead of +powers of 10. The ’B’ postfix multiplies the value for 8, and can be +appended after another postfix or used alone. This allows using for +example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +
+Options which do not take arguments are boolean options, and set the +corresponding value to true. They can be set to false by prefixing +with "no" the option name, for example using "-nofoo" in the +command line will set to false the boolean option with name "foo". +
+ +Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers +are used to precisely specify which stream(s) does a given option belong to. +
+A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. -codec:a:1 ac3 option contains
+a:1 stream specifer, which matches the second audio stream. Therefore it
+would select the ac3 codec for the second audio stream.
+
A stream specifier can match several stream, the option is then applied to all
+of them. E.g. the stream specifier in -b:a 128k matches all audio
+streams.
+
An empty stream specifier matches all streams, for example -codec copy
+or -codec: copy would copy all the streams without reencoding.
+
Possible forms of stream specifiers are: +
Matches the stream with this index. E.g. -threads:1 4 would set the
+thread count for the second stream to 4.
+
stream_type is one of: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data and ’t’ for attachments. If stream_index is given, then +matches stream number stream_index of this type. Otherwise matches all +streams of this type. +
If stream_index is given, then matches stream number stream_index in +program with id program_id. Otherwise matches all streams in this program. +
These options are shared amongst the av* tools. +
+Show license. +
+Show help. +
+Show version. +
+Show available formats. +
+The fields preceding the format names have the following meanings: +
Decoding available +
Encoding available +
Show available codecs. +
+The fields preceding the codec names have the following meanings: +
Decoding available +
Encoding available +
Video/audio/subtitle codec +
Codec supports slices +
Codec supports direct rendering +
Codec can handle input truncated at random locations instead of only at frame boundaries +
Show available bitstream filters. +
+Show available protocols. +
+Show available libavfilter filters. +
+Show available pixel formats. +
+Show available sample formats. +
+Set the logging level used by the library. +loglevel is a number or a string containing one of the following values: +
By default the program logs to stderr, if coloring is supported by the
+terminal, colors are used to mark errors and warnings. Log coloring
+can be disabled setting the environment variable
+AV_LOG_FORCE_NOCOLOR or NO_COLOR, or can be forced setting
+the environment variable AV_LOG_FORCE_COLOR.
+The use of the environment variable NO_COLOR is deprecated and
+will be dropped in a following FFmpeg version.
+
Dump full command line and console output to a file named
+program-YYYYMMDD-HHMMSS.log in the current
+directory.
+This file can be useful for bug reports.
+It also implies -loglevel verbose.
+
Note: setting the environment variable FFREPORT to any value has the
+same effect.
+
These options are provided directly by the libavformat, libavdevice and +libavcodec libraries. To see the list of available AVOptions, use the +‘-help’ option. They are separated into two categories: +
These options can be set for any container, codec or device. Generic options +are listed under AVFormatContext options for containers/devices and under +AVCodecContext options for codecs. +
These options are specific to the given container, device or codec. Private +options are listed under their corresponding containers/devices/codecs. +
For example to write an ID3v2.3 header instead of a default ID3v2.4 to +an MP3 file, use the ‘id3v2_version’ private option of the MP3 +muxer: +
ffmpeg -i input.flac -id3v2_version 3 out.mp3 + |
All codec AVOptions are obviously per-stream, so the chapter on stream +specifiers applies to them +
+Note ‘-nooption’ syntax cannot be used for boolean AVOptions, +use ‘-option 0’/‘-option 1’. +
+Note2 old undocumented way of specifying per-stream AVOptions by prepending +v/a/s to the options name is now obsolete and will be removed soon. +
+ +Force input or output file format. The format is normally auto detected for input +files and guessed from file extension for output files, so this option is not +needed in most cases. +
+input file name +
+Overwrite output files without asking. +
+Do not overwrite output files but exit if file exists. +
+Select an encoder (when used before an output file) or a decoder (when used
+before an input file) for one or more streams. codec is the name of a
+decoder/encoder or a special value copy (output only) to indicate that
+the stream is not to be re-encoded.
+
For example +
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT + |
encodes all video streams with libx264 and copies all audio streams. +
+For each stream, the last matching c option is applied, so
+
ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT + |
will copy all the streams except the second video, which will be encoded with +libx264, and the 138th audio, which will be encoded with libvorbis. +
+Stop writing the output after its duration reaches duration.
+duration may be a number in seconds, or in hh:mm:ss[.xxx] form.
+
Set the file size limit. +
+When used as an input option (before -i), seeks in this input file to
+position. When used as an output option (before an output filename),
+decodes but discards input until the timestamps reach position. This is
+slower, but more accurate.
+
position may be either in seconds or in hh:mm:ss[.xxx] form.
+
Set the input time offset in seconds.
+[-]hh:mm:ss[.xxx] syntax is also supported.
+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.
+
Set the recording timestamp in the container. +The syntax for time is: +
now|([(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH[:MM[:SS[.m...]]])|(HH[MM[SS[.m...]]]))[Z|z]) + |
If the value is "now" it takes the current time. +Time is local time unless ’Z’ or ’z’ is appended, in which case it is +interpreted as UTC. +If the year-month-day part is not specified it takes the current +year-month-day. +
+Set a metadata key/value pair. +
+An optional metadata_specifier may be given to set metadata
+on streams or chapters. See -map_metadata documentation for
+details.
+
This option overrides metadata set with -map_metadata. It is
+also possible to delete metadata by using an empty value.
+
For example, for setting the title in the output file: +
ffmpeg -i in.avi -metadata title="my title" out.flv + |
To set the language of the first audio stream: +
ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT + |
Specify target file type (vcd, svcd, dvd, dv,
+dv50). type may be prefixed with pal-, ntsc- or
+film- to use the corresponding standard. All the format options
+(bitrate, codecs, buffer sizes) are then set automatically. You can just type:
+
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg + |
Nevertheless you can specify additional options as long as you know +they do not conflict with the standard, as in: +
+ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg + |
Set the number of data frames to record. This is an alias for -frames:d.
+
Stop writing to the stream after framecount frames. +
+Use fixed quality scale (VBR). The meaning of q is +codec-dependent. +
+filter_graph is a description of the filter graph to apply to
+the stream. Use -filters to show all the available filters
+(including also sources and sinks).
+
Specify the preset for matching stream(s). +
+Print encoding progress/statistics. On by default. +
+Add an attachment to the output file. This is supported by a few formats
+like Matroska for e.g. fonts used in rendering subtitles. Attachments
+are implemented as a specific type of stream, so this option will add
+a new stream to the file. It is then possible to use per-stream options
+on this stream in the usual way. Attachment streams created with this
+option will be created after all the other streams (i.e. those created
+with -map or automatic mappings).
+
Note that for Matroska you also have to set the mimetype metadata tag: +
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv + |
(assuming that the attachment stream will be third in the output file). +
+Extract the matching attachment stream into a file named filename. If
+filename is empty, then the value of the filename metadata tag
+will be used.
+
E.g. to extract the first attachment to a file named ’out.ttf’: +
ffmpeg -dump_attachment:t:0 out.ttf INPUT + |
To extract all attachments to files determined by the filename tag:
+
ffmpeg -dump_attachment:t "" INPUT + |
Technical note – attachments are implemented as codec extradata, so this +option can actually be used to extract extradata from any stream, not just +attachments. +
+Set the number of video frames to record. This is an alias for -frames:v.
+
Set frame rate (Hz value, fraction or abbreviation), (default = 25). +
Set frame size. The format is ‘wxh’ (default - same as source). +The following abbreviations are recognized: +
128x96 +
176x144 +
352x288 +
704x576 +
1408x1152 +
160x120 +
320x240 +
640x480 +
800x600 +
1024x768 +
1600x1200 +
2048x1536 +
1280x1024 +
2560x2048 +
5120x4096 +
852x480 +
1366x768 +
1600x1024 +
1920x1200 +
2560x1600 +
3200x2048 +
3840x2400 +
6400x4096 +
7680x4800 +
320x200 +
640x350 +
852x480 +
1280x720 +
1920x1080 +
Set the video display aspect ratio specified by aspect. +
+aspect can be a floating point number string, or a string of the +form num:den, where num and den are the +numerator and denominator of the aspect ratio. For example "4:3", +"16:9", "1.3333", and "1.7777" are valid argument values. +
+All the crop options have been removed. Use -vf +crop=width:height:x:y instead. +
+All the pad options have been removed. Use -vf +pad=width:height:x:y:color instead. +
+Disable video recording. +
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. +
Set max video bitrate (in bit/s). +Requires -bufsize to be set. +
Set min video bitrate (in bit/s). +Most useful in setting up a CBR encode: +
ffmpeg -i myfile.avi -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v + |
It is of little use elsewise. +
Set video buffer verifier buffer size (in bits). +
Set the video codec. This is an alias for -codec:v.
+
Use same quantizer as source (implies VBR). +
+Note that this is NOT SAME QUALITY. Do not use this option unless you know you +need it. +
+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. +On pass 1, you may just deactivate audio and set output to null, +examples for Windows and Unix: +
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL +ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null + |
Set two-pass log file name prefix to prefix, the default file name +prefix is “ffmpeg2pass”. The complete file name will be +‘PREFIX-N.log’, where N is a number specific to the output +stream +
+Set the ISO 639 language code (3 letters) of the current video stream. +
+filter_graph is a description of the filter graph to apply to
+the input video.
+Use the option "-filters" to show all the available filters (including
+also sources and sinks). This is an alias for -filter:v.
+
Set pixel format. Use -pix_fmts to show all the supported
+pixel formats.
+
Set SwScaler flags. +
Set the group of pictures size. +
deprecated, use -g 1 +
Discard threshold. +
minimum video quantizer scale (VBR) +
maximum video quantizer scale (VBR) +
maximum difference between the quantizer scales (VBR) +
video quantizer scale blur (VBR) (range 0.0 - 1.0) +
video quantizer scale compression (VBR) (default 0.5). +Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0 +
+minimum video lagrange factor (VBR) +
max video lagrange factor (VBR) +
minimum macroblock quantizer scale (VBR) +
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: +
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext + |
initial complexity for single pass encoding +
qp factor between P- and B-frames +
qp factor between P- and I-frames +
qp offset between P- and B-frames +
qp offset between P- and I-frames +
Set rate control equation (see section "Expression Evaluation")
+(default = tex^qComp).
+
When computing the rate control equation expression, besides the +standard functions defined in the section "Expression Evaluation", the +following functions are available: +
and the following constants are available: +
Rate control override for specific intervals, formatted as "int,int,int" +list separated with slashes. Two first values are the beginning and +end frame numbers, last one is quantizer to use if positive, or quality +factor if negative. +
Set motion estimation method to method. +Available methods are (from lowest to best quality): +
Try just the (0, 0) vector. +
(default method) +
exhaustive search (slow and marginally better than epzs) +
Set DCT algorithm to algo. Available values are: +
FF_DCT_AUTO (default) +
FF_DCT_FASTINT +
FF_DCT_INT +
FF_DCT_MMX +
FF_DCT_MLIB +
FF_DCT_ALTIVEC +
Set IDCT algorithm to algo. Available values are: +
FF_IDCT_AUTO (default) +
FF_IDCT_INT +
FF_IDCT_SIMPLE +
FF_IDCT_SIMPLEMMX +
FF_IDCT_LIBMPEG2MMX +
FF_IDCT_PS2 +
FF_IDCT_MLIB +
FF_IDCT_ARM +
FF_IDCT_ALTIVEC +
FF_IDCT_SH4 +
FF_IDCT_SIMPLEARM +
Set error resilience to n. +
FF_ER_CAREFUL (default) +
FF_ER_COMPLIANT +
FF_ER_AGGRESSIVE +
FF_ER_VERY_AGGRESSIVE +
Set error concealment to bit_mask. bit_mask is a bit mask of +the following values: +
FF_EC_GUESS_MVS (default = enabled) +
FF_EC_DEBLOCK (default = enabled) +
Use ’frames’ B-frames (supported for MPEG-1, MPEG-2 and MPEG-4). +
macroblock decision +
FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in ffmpeg). +
FF_MB_DECISION_BITS: Choose the one which needs the fewest bits. +
FF_MB_DECISION_RD: rate distortion +
Use four motion vector by macroblock (MPEG-4 only). +
Use data partitioning (MPEG-4 only). +
Work around encoder bugs that are not auto-detected. +
How strictly to follow the standards. +
Enable Advanced intra coding (h263+). +
Enable Unlimited Motion Vector (h263+) +
+Deinterlace pictures. +
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 +‘-deinterlace’, but deinterlacing introduces losses. +
Calculate PSNR of compressed frames. +
Dump video coding statistics to ‘vstats_HHMMSS.log’. +
Dump video coding statistics to file. +
top=1/bottom=0/auto=-1 field first +
Intra_dc_precision. +
Force video tag/fourcc. This is an alias for -tag:v.
+
Show QP histogram +
Deprecated see -bsf +
Force key frames at the specified timestamps, more precisely at the first +frames after each specified time. +This option can be useful to ensure that a seek point is present at a +chapter mark or any other designated place in the output file. +The timestamps must be specified in ascending order. +
+When doing stream copy, copy also non-key frames found at the +beginning. +
Set the number of audio frames to record. This is an alias for -frames:a.
+
Set the audio sampling frequency. For output streams it is set by +default to the frequency of the corresponding input stream. For input +streams this option only makes sense for audio grabbing devices and raw +demuxers and is mapped to the corresponding demuxer options. +
Set the audio quality (codec-specific, VBR). This is an alias for -q:a. +
Set the number of audio channels. For output streams it is set by +default to the number of input audio channels. For input streams +this option only makes sense for audio grabbing devices and raw demuxers +and is mapped to the corresponding demuxer options. +
Disable audio recording. +
Set the audio codec. This is an alias for -codec:a.
+
Set the audio sample format. Use -sample_fmts to get a list
+of supported sample formats.
+
Force audio tag/fourcc. This is an alias for -tag:a.
+
Set the type of service that the audio stream contains. +
Main Audio Service (default) +
Effects +
Visually Impaired +
Hearing Impaired +
Dialogue +
Commentary +
Emergency +
Voice Over +
Karaoke +
Deprecated, see -bsf +
Set the ISO 639 language code (3 letters) of the current subtitle stream. +
Set the subtitle codec. This is an alias for -codec:s.
+
Disable subtitle recording. +
Deprecated, see -bsf +
Synchronize read on input. +
Designate one or more input streams as a source for the output file. Each input +stream is identified by the input file index input_file_id and +the input stream index input_stream_id within the input +file. Both indices start at 0. If specified, +sync_file_id:stream_specifier sets which input stream +is used as a presentation sync reference. +
+The first -map option on the command line specifies the
+source for output stream 0, the second -map option specifies
+the source for output stream 1, etc.
+
A - character before the stream identifier creates a "negative" mapping.
+It disables matching streams from already created mappings.
+
For example, to map ALL streams from the first input file to output +
ffmpeg -i INPUT -map 0 output + |
For example, if you have two audio streams in the first input file,
+these streams are identified by "0:0" and "0:1". You can use
+-map to select which streams to place in an output file. For
+example:
+
ffmpeg -i INPUT -map 0:1 out.wav + |
will map the input stream in ‘INPUT’ identified by "0:1" to +the (single) output stream in ‘out.wav’. +
+For example, to select the stream with index 2 from input file +‘a.mov’ (specified by the identifier "0:2"), and stream with +index 6 from input ‘b.mov’ (specified by the identifier "1:6"), +and copy them to the output file ‘out.mov’: +
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov + |
To select all video and the third audio stream from an input file: +
ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT + |
To map all the streams except the second audio, use negative mappings +
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT + |
Note that using this option disables the default mappings for this output file. +
+Map an audio channel from a given input to an output. If +output_file_id.stream_specifier are not set, the audio channel will +be mapped on all the audio streams. +
+Using "-1" instead of +input_file_id.stream_specifier.channel_id will map a muted +channel. +
+For example, assuming INPUT is a stereo audio file, you can switch the +two audio channels with the following command: +
ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT + |
If you want to mute the first channel and keep the second: +
ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT + |
The order of the "-map_channel" option specifies the order of the channels in +the output stream. The output channel layout is guessed from the number of +channels mapped (mono if one "-map_channel", stereo if two, etc.). Using "-ac" +in combination of "-map_channel" makes the channel gain levels to be updated if +channel layouts don’t match (for instance two "-map_channel" options and "-ac +6"). +
+You can also extract each channel of an INPUT to specific outputs; the +following command extract each channel of the audio stream (file 0, stream 0) +to the respective OUTPUT_CH0 and OUTPUT_CH1: +
ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1 + |
The following example split the channels of a stereo input into streams: +
+ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg + |
Note that currently each output stream can only contain channels from a single +input stream; you can’t for example use "-map_channel" to pick multiple input +audio channels contained in different streams (from the same or different files) +and merge them into a single output stream. It is therefore not currently +possible, for example, to turn two separate mono streams into a single stereo +stream. However spliting a stereo stream into two single channel mono streams +is possible. +
+Set metadata information of the next output file from infile. Note that +those are file indices (zero-based), not filenames. +Optional metadata_spec_in/out parameters specify, which metadata to copy. +A metadata specifier can have the following forms: +
global metadata, i.e. metadata that applies to the whole file +
+per-stream metadata. stream_spec is a stream specifier as described +in the Stream specifiers chapter. In an input metadata specifier, the first +matching stream is copied from. In an output metadata specifier, all matching +streams are copied to. +
+per-chapter metadata. chapter_index is the zero-based chapter index. +
+per-program metadata. program_index is the zero-based program index. +
If metadata specifier is omitted, it defaults to global. +
+By default, global metadata is copied from the first input file, +per-stream and per-chapter metadata is copied along with streams/chapters. These +default mappings are disabled by creating any mapping of the relevant type. A negative +file index can be used to create a dummy mapping that just disables automatic copying. +
+For example to copy metadata from the first stream of the input file to global metadata +of the output file: +
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3 + |
To do the reverse, i.e. copy global metadata to all audio streams: +
ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv + |
Note that simple 0 would work as well in this example, since global
+metadata is assumed by default.
+
Copy chapters from input file with index input_file_index to the next +output file. If no chapter mapping is specified, then chapters are copied from +the first input file with at least one chapter. Use a negative file index to +disable any chapter copying. +
Print specific debug info. +category is a number or a string containing one of the following values: +
picture buffer allocations +
error recognition +
macroblock (MB) type +
memory management control operations (H.264) +
motion vector +
picture info +
per-block quantization parameter (QP) +
rate control +
threading operations +
visualize block types +
visualize quantization parameter (QP), lower QP are tinted greener +
Show benchmarking information at the end of an encode. +Shows CPU time used and maximum memory consumption. +Maximum memory consumption is not supported on all systems, +it will usually display as 0 if not supported. +
Exit after ffmpeg has been running for duration seconds. +
Dump each input packet to stderr. +
When dumping packets, also dump the payload. +
Set RTP payload size in bytes. +
Read input at native frame rate. Mainly used to simulate a grab device. +
Loop over the input stream. Currently it works only for image +streams. This option is used for automatic FFserver testing. +This option is deprecated, use -loop 1. +
Repeatedly loop output for formats that support looping such as animated GIF +(0 will loop the output infinitely). +This option is deprecated, use -loop. +
Thread count. +
Video sync method. +
+Each frame is passed with its timestamp from the demuxer to the muxer. +
Frames will be duplicated and dropped to achieve exactly the requested +constant framerate. +
Frames are passed through with their timestamp or dropped so as to +prevent 2 frames from having the same timestamp. +
Chooses between 1 and 2 depending on muxer capabilities. This is the +default method. +
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. +
+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. +
Copy timestamps from input to output. +
Copy input stream time base from input to output when stream copying. +
Finish encoding when the shortest input stream ends. +
Timestamp discontinuity delta threshold. +
Set the maximum demux-decode delay. +
Set the initial demux-decode delay. +
Assign a new stream-id value to an output stream. This option should be +specified prior to the output filename to which it applies. +For the situation where multiple output files exist, a streamid +may be reassigned to a different value. +
+For example, to set the stream 0 PID to 33 and the stream 1 PID to 36 for +an output mpegts file: +
ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts + |
Set bitstream filters for matching streams. bistream_filters is
+a comma-separated list of bitstream filters. Use the -bsfs option
+to get the list of bitstream filters.
+
ffmpeg -i h264.mp4 -c:v copy -vbsf h264_mp4toannexb -an out.h264 + |
ffmpeg -i file.mov -an -vn -sbsf mov2textsub -c:s copy -f rawvideo sub.txt + |
Force a tag/fourcc for matching streams. +
+Specify Timecode for writing. SEP is ’:’ for non drop timecode and ’;’ +(or ’.’) for drop. +
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg + |
A preset file contains a sequence of option=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 ‘presets’ directory in the FFmpeg source tree for examples. +
+Preset files are specified with the vpre, apre,
+spre, and fpre options. The fpre option takes the
+filename of the preset instead of a preset name as input and can be
+used for any kind of codec. For the vpre, apre, and
+spre options, the options specified in a preset file are
+applied to the currently selected codec of the same type as the preset
+option.
+
The argument passed to the vpre, apre, and spre
+preset options identifies the preset file to use according to the
+following rules:
+
First ffmpeg searches for a file named arg.ffpreset in the
+directories ‘$FFMPEG_DATADIR’ (if set), and ‘$HOME/.ffmpeg’, and in
+the datadir defined at configuration time (usually ‘PREFIX/share/ffmpeg’)
+or in a ‘ffpresets’ folder along the executable on win32,
+in that order. For example, if the argument is libx264-max, it will
+search for the file ‘libx264-max.ffpreset’.
+
If no such file is found, then ffmpeg will search for a file named
+codec_name-arg.ffpreset in the above-mentioned
+directories, where 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 -vcodec libx264 and use -vpre max,
+then it will search for the file ‘libx264-max.ffpreset’.
+
ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm + |
A preset file contains a sequence of option=value pairs, one for +each line, specifying a sequence of options which can be specified also on +the command line. Lines starting with the hash (’#’) character are ignored and +are used to provide comments. Empty lines are also ignored. Check the +‘presets’ directory in the FFmpeg source tree for examples. +
+Preset files are specified with the pre option, this option takes a
+preset name as input. FFmpeg searches for a file named preset_name.avpreset in
+the directories ‘$AVCONV_DATADIR’ (if set), and ‘$HOME/.ffmpeg’, and in
+the data directory defined at configuration time (usually ‘$PREFIX/share/ffmpeg’)
+in that order. For example, if the argument is libx264-max, it will
+search for the file ‘libx264-max.avpreset’.
+
If you specify the input format and device then ffmpeg can grab video +and audio directly. +
+ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg + |
Or with an ALSA audio source (mono input, card id 1) instead of OSS: +
ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg + |
Note that you must activate the right video source and channel before +launching ffmpeg with any TV viewer such as +xawtv by Gerd Knorr. You also +have to set the audio recording levels correctly with a +standard mixer. +
+ +Grab the X11 display with ffmpeg via +
+ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg + |
0.0 is display.screen number of your X11 server, same as +the DISPLAY environment variable. +
+ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg + |
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. +
+ +Any supported file format and protocol can serve as input to ffmpeg: +
+Examples: +
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg + |
It will use the files: +
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V, +/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc... + |
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 ‘-s’ option +if ffmpeg cannot guess it. +
+ffmpeg -i /tmp/test.yuv /tmp/out.avi + |
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 +horizontal resolution. +
+ffmpeg -i mydivx.avi hugefile.yuv + |
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg + |
Converts the audio file a.wav and the raw YUV video file a.yuv +to MPEG file a.mpg. +
+ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2 + |
Converts a.wav to MPEG audio at 22050 Hz sample rate. +
+ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2 + |
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 +stream, in the order of the definition of output streams. +
+ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi + |
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
+to enable LAME support by passing --enable-libmp3lame to configure.
+The mapping is particularly useful for DVD transcoding
+to get the desired audio language.
+
NOTE: To see the supported input formats, use ffmpeg -formats.
+
For extracting images from a video: +
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg + |
This will extract one video frame per second from the video and will +output them in files named ‘foo-001.jpeg’, ‘foo-002.jpeg’, +etc. Images will be rescaled to fit the new WxH values. +
+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: +
ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi + |
The syntax 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.
+
ffmpeg -i test1.avi -i test2.avi -map 0.3 -map 0.2 -map 0.1 -map 0.0 -c copy test12.nut + |
The resulting output file ‘test12.avi’ will contain first four streams from +the input file in reverse order. +
+When evaluating an arithmetic expression, FFmpeg uses an internal +formula evaluator, implemented through the ‘libavutil/eval.h’ +interface. +
+An expression may contain unary, binary operators, constants, and +functions. +
+Two expressions expr1 and expr2 can be combined to form +another expression "expr1;expr2". +expr1 and expr2 are evaluated in turn, and the new +expression evaluates to the value of expr2. +
+The following binary operators are available: +, -,
+*, /, ^.
+
The following unary operators are available: +, -.
+
The following functions are available: +
Return 1.0 if x is NAN, 0.0 otherwise. +
+Allow to store the value of the expression expr in an internal +variable. var specifies the number of the variable where to +store the value, and it is a value ranging from 0 to 9. The function +returns the value stored in the internal variable. +Note, Variables are currently not shared between expressions. +
+Allow to load the value of the internal variable with number +var, which was previously stored with st(var, expr). +The function returns the loaded value. +
+Evaluate expression expr while the expression cond is +non-zero, and returns the value of the last expr evaluation, or +NAN if cond was always false. +
+Round the value of expression expr upwards to the nearest +integer. For example, "ceil(1.5)" is "2.0". +
+Round the value of expression expr downwards to the nearest +integer. For example, "floor(-1.5)" is "-2.0". +
+Round the value of expression expr towards zero to the nearest +integer. For example, "trunc(-1.5)" is "-1.0". +
+Compute the square root of expr. This is equivalent to +"(expr)^.5". +
+Return 1.0 if expr is zero, 0.0 otherwise. +
+Compute the power of x elevated y, it is equivalent to +"(x)^(y)". +
+Return a pseudo random value between 0.0 and 1.0. x is the index of the +internal variable which will be used to save the seed/state. +
+This function is similar to the C function with the same name; it returns +"sqrt(x*x + y*y)", the length of the hypotenuse of a +right triangle with sides of length x and y, or the distance of the +point (x, y) from the origin. +
+Return the greatest common divisor of x and y. If both x and +y are 0 or either or both are less than zero then behavior is undefined. +
+Evaluate x, and if the result is non-zero return the result of +the evaluation of y, return 0 otherwise. +
+Evaluate x, and if the result is zero return the result of the +evaluation of y, return 0 otherwise. +
The following constants are available: +
area of the unit disc, approximately 3.14 +
exp(1) (Euler’s number), approximately 2.718 +
golden ratio (1+sqrt(5))/2, approximately 1.618 +
Assuming that an expression is considered "true" if it has a non-zero +value, note that: +
+* works like AND
+
+ works like OR
+
and the construct: +
if A then B else C + |
is equivalent to +
if(A,B) + ifnot(A,C) + |
In your C code, you can extend the list of unary and binary functions, +and define recognized constants, so that they are available for your +expressions. +
+The evaluator also recognizes the International System number +postfixes. If ’i’ is appended after the postfix, powers of 2 are used +instead of powers of 10. The ’B’ postfix multiplies the value for 8, +and can be appended after another postfix or used alone. This allows +using for example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +
+Follows the list of available International System postfixes, with +indication of the corresponding powers of 10 and of 2. +
-24 / -80 +
-21 / -70 +
-18 / -60 +
-15 / -50 +
-12 / -40 +
-9 / -30 +
-6 / -20 +
-3 / -10 +
-2 +
-1 +
2 +
3 / 10 +
3 / 10 +
6 / 20 +
9 / 30 +
12 / 40 +
15 / 40 +
18 / 50 +
21 / 60 +
24 / 70 +
Decoders are configured elements in FFmpeg which allow the decoding of +multimedia streams. +
+When you configure your FFmpeg build, all the supported native decoders
+are enabled by default. Decoders requiring an external library must be enabled
+manually via the corresponding --enable-lib option. You can list all
+available decoders using the configure option --list-decoders.
+
You can disable all the decoders with the configure option
+--disable-decoders and selectively enable / disable single decoders
+with the options --enable-decoder=DECODER /
+--disable-decoder=DECODER.
+
The option -codecs of the ff* tools will display the list of
+enabled decoders.
+
A description of some of the currently available video decoders +follows. +
+ +Raw video decoder. +
+This decoder decodes rawvideo streams. +
+ +Specify the assumed field type of the input video. +
the video is assumed to be progressive (default) +
bottom-field-first is assumed +
top-field-first is assumed +
Internal wave synthetizer. +
+This decoder generates wave patterns according to predefined sequences. Its +use is purely internal and the format of the data it accepts is not publicly +documented. +
+ +Encoders are configured elements in FFmpeg which allow the encoding of +multimedia streams. +
+When you configure your FFmpeg build, all the supported native encoders
+are enabled by default. Encoders requiring an external library must be enabled
+manually via the corresponding --enable-lib option. You can list all
+available encoders using the configure option --list-encoders.
+
You can disable all the encoders with the configure option
+--disable-encoders and selectively enable / disable single encoders
+with the options --enable-encoder=ENCODER /
+--disable-encoder=ENCODER.
+
The option -codecs of the ff* tools will display the list of
+enabled encoders.
+
A description of some of the currently available audio encoders +follows. +
+ +AC-3 audio encoders. +
+These encoders implement part of ATSC A/52:2010 and ETSI TS 102 366, as well as +the undocumented RealAudio 3 (a.k.a. dnet). +
+The ac3 encoder uses floating-point math, while the ac3_fixed
+encoder only uses fixed-point integer math. This does not mean that one is
+always faster, just that one or the other may be better suited to a
+particular system. The floating-point encoder will generally produce better
+quality audio for a given bitrate. The ac3_fixed encoder is not the
+default codec for any of the output formats, so it must be specified explicitly
+using the option -acodec ac3_fixed in order to use it.
+
The AC-3 metadata options are used to set parameters that describe the audio, +but in most cases do not affect the audio encoding itself. Some of the options +do directly affect or influence the decoding and playback of the resulting +bitstream, while others are just for informational purposes. A few of the +options will add bits to the output stream that could otherwise be used for +audio data, and will thus affect the quality of the output. Those will be +indicated accordingly with a note in the option list below. +
+These parameters are described in detail in several publicly-available +documents. +
Allow Per-Frame Metadata. Specifies if the encoder should check for changing +metadata for each frame. +
The metadata values set at initialization will be used for every frame in the +stream. (default) +
Metadata values can be changed before encoding each frame. +
Center Mix Level. The amount of gain the decoder should apply to the center +channel when downmixing to stereo. This field will only be written to the +bitstream if a center channel is present. The value is specified as a scale +factor. There are 3 valid values: +
Apply -3dB gain +
Apply -4.5dB gain (default) +
Apply -6dB gain +
Surround Mix Level. The amount of gain the decoder should apply to the surround +channel(s) when downmixing to stereo. This field will only be written to the +bitstream if one or more surround channels are present. The value is specified +as a scale factor. There are 3 valid values: +
Apply -3dB gain +
Apply -6dB gain (default) +
Silence Surround Channel(s) +
Audio Production Information is optional information describing the mixing +environment. Either none or both of the fields are written to the bitstream. +
+Mixing Level. Specifies peak sound pressure level (SPL) in the production
+environment when the mix was mastered. Valid values are 80 to 111, or -1 for
+unknown or not indicated. The default value is -1, but that value cannot be
+used if the Audio Production Information is written to the bitstream. Therefore,
+if the room_type option is not the default value, the mixing_level
+option must not be -1.
+
Room Type. Describes the equalization used during the final mixing session at
+the studio or on the dubbing stage. A large room is a dubbing stage with the
+industry standard X-curve equalization; a small room has flat equalization.
+This field will not be written to the bitstream if both the mixing_level
+option and the room_type option have the default values.
+
Not Indicated (default) +
Large Room +
Small Room +
Copyright Indicator. Specifies whether a copyright exists for this audio. +
No Copyright Exists (default) +
Copyright Exists +
Dialogue Normalization. Indicates how far the average dialogue level of the +program is below digital 100% full scale (0 dBFS). This parameter determines a +level shift during audio reproduction that sets the average volume of the +dialogue to a preset level. The goal is to match volume level between program +sources. A value of -31dB will result in no volume level change, relative to +the source volume, during audio reproduction. Valid values are whole numbers in +the range -31 to -1, with -31 being the default. +
+Dolby Surround Mode. Specifies whether the stereo signal uses Dolby Surround +(Pro Logic). This field will only be written to the bitstream if the audio +stream is stereo. Using this option does NOT mean the encoder will actually +apply Dolby Surround processing. +
Not Indicated (default) +
Not Dolby Surround Encoded +
Dolby Surround Encoded +
Original Bit Stream Indicator. Specifies whether this audio is from the +original source and not a copy. +
Not Original Source +
Original Source (default) +
The extended bitstream options are part of the Alternate Bit Stream Syntax as
+specified in Annex D of the A/52:2010 standard. It is grouped into 2 parts.
+If any one parameter in a group is specified, all values in that group will be
+written to the bitstream. Default values are used for those that are written
+but have not been specified. If the mixing levels are written, the decoder
+will use these values instead of the ones specified in the center_mixlev
+and surround_mixlev options if it supports the Alternate Bit Stream
+Syntax.
+
Preferred Stereo Downmix Mode. Allows the user to select either Lt/Rt +(Dolby Surround) or Lo/Ro (normal stereo) as the preferred stereo downmix mode. +
Not Indicated (default) +
Lt/Rt Downmix Preferred +
Lo/Ro Downmix Preferred +
Lt/Rt Center Mix Level. The amount of gain the decoder should apply to the +center channel when downmixing to stereo in Lt/Rt mode. +
Apply +3dB gain +
Apply +1.5dB gain +
Apply 0dB gain +
Apply -1.5dB gain +
Apply -3.0dB gain +
Apply -4.5dB gain (default) +
Apply -6.0dB gain +
Silence Center Channel +
Lt/Rt Surround Mix Level. The amount of gain the decoder should apply to the +surround channel(s) when downmixing to stereo in Lt/Rt mode. +
Apply -1.5dB gain +
Apply -3.0dB gain +
Apply -4.5dB gain +
Apply -6.0dB gain (default) +
Silence Surround Channel(s) +
Lo/Ro Center Mix Level. The amount of gain the decoder should apply to the +center channel when downmixing to stereo in Lo/Ro mode. +
Apply +3dB gain +
Apply +1.5dB gain +
Apply 0dB gain +
Apply -1.5dB gain +
Apply -3.0dB gain +
Apply -4.5dB gain (default) +
Apply -6.0dB gain +
Silence Center Channel +
Lo/Ro Surround Mix Level. The amount of gain the decoder should apply to the +surround channel(s) when downmixing to stereo in Lo/Ro mode. +
Apply -1.5dB gain +
Apply -3.0dB gain +
Apply -4.5dB gain +
Apply -6.0dB gain (default) +
Silence Surround Channel(s) +
Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX +(7.1 matrixed to 5.1). Using this option does NOT mean the encoder will actually +apply Dolby Surround EX processing. +
Not Indicated (default) +
Dolby Surround EX Off +
Dolby Surround EX On +
Dolby Headphone Mode. Indicates whether the stream uses Dolby Headphone +encoding (multi-channel matrixed to 2.0 for use with headphones). Using this +option does NOT mean the encoder will actually apply Dolby Headphone +processing. +
Not Indicated (default) +
Dolby Headphone Off +
Dolby Headphone On +
A/D Converter Type. Indicates whether the audio has passed through HDCD A/D +conversion. +
Standard A/D Converter (default) +
HDCD A/D Converter +
Stereo Rematrixing. Enables/Disables use of rematrixing for stereo input. This +is an optional AC-3 feature that increases quality by selectively encoding +the left/right channels as mid/side. This option is enabled by default, and it +is highly recommended that it be left as enabled except for testing purposes. +
+These options are only valid for the floating-point encoder and do not exist +for the fixed-point encoder due to the corresponding features not being +implemented in fixed-point. +
+Enables/Disables use of channel coupling, which is an optional AC-3 feature +that increases quality by combining high frequency information from multiple +channels into a single channel. The per-channel high frequency information is +sent with less accuracy in both the frequency and time domains. This allows +more bits to be used for lower frequencies while preserving enough information +to reconstruct the high frequencies. This option is enabled by default for the +floating-point encoder and should generally be left as enabled except for +testing purposes or to increase encoding speed. +
Selected by Encoder (default) +
Disable Channel Coupling +
Enable Channel Coupling +
Coupling Start Band. Sets the channel coupling start band, from 1 to 15. If a +value higher than the bandwidth is used, it will be reduced to 1 less than the +coupling end band. If auto is used, the start band will be determined by +the encoder based on the bit rate, sample rate, and channel layout. This option +has no effect if channel coupling is disabled. +
Selected by Encoder (default) +
A description of some of the currently available video encoders +follows. +
+ +VP8 format supported through libvpx. +
+Requires the presence of the libvpx headers and library during configuration.
+You need to explicitly configure the build with --enable-libvpx.
+
Mapping from FFmpeg to libvpx options with conversion notes in parentheses. +
+g_threads +
+g_profile +
+rc_target_bitrate +
+kf_max_dist +
+kf_min_dist +
+rc_min_quantizer +
+rc_max_quantizer +
+rc_buf_sz
+(bufsize * 1000 / vb)
+
rc_buf_optimal_sz
+(bufsize * 1000 / vb * 5 / 6)
+
rc_buf_initial_sz
+(rc_init_occupancy * 1000 / vb)
+
rc_undershoot_pct +
+rc_dropframe_thresh +
+rc_2pass_vbr_bias_pct +
+rc_2pass_vbr_maxsection_pct
+(maxrate * 100 / vb)
+
rc_2pass_vbr_minsection_pct
+(minrate * 100 / vb)
+
VPX_CBR
+(minrate == maxrate == vb)
+
VPX_CQ, VP8E_SET_CQ_LEVEL
+
VPX_DL_BEST_QUALITY
+
VPX_DL_GOOD_QUALITY
+
VPX_DL_REALTIME
+
VP8E_SET_CPUUSED
+
VP8E_SET_NOISE_SENSITIVITY
+
VP8E_SET_STATIC_THRESHOLD
+
VP8E_SET_TOKEN_PARTITIONS
+
VP8E_SET_ENABLEAUTOALTREF
+
VP8E_SET_ARNR_MAXFRAMES
+
VP8E_SET_ARNR_TYPE
+
VP8E_SET_ARNR_STRENGTH
+
g_lag_in_frames +
g_error_resilient +
+For more information about libvpx see: +http://www.webmproject.org/ +
+ +H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 format supported through +libx264. +
+Requires the presence of the libx264 headers and library during
+configuration. You need to explicitly configure the build with
+--enable-libx264.
+
Set the encoding preset. +
+Tune the encoding params. +
+Use fast settings when encoding first pass, default value is 1. +
+Set profile restrictions. +
+Specify level (as defined by Annex A). +Deprecated in favor of x264opts. +
+Specify filename for 2 pass stats. +Deprecated in favor of x264opts (see stats libx264 option). +
+Specify Weighted prediction for P-frames. +Deprecated in favor of x264opts (see weightp libx264 option). +
+Allow to set any x264 option, see x264 –fullhelp for a list. +
+options is a list of key=value couples separated by +":". +
For example to specify libx264 encoding options with ffmpeg:
+
ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv + |
For more information about libx264 and the supported options see: +http://www.videolan.org/developers/x264.html +
+ +Demuxers are configured elements in FFmpeg which allow to read the +multimedia streams from a particular type of file. +
+When you configure your FFmpeg build, all the supported demuxers +are enabled by default. You can list all available ones using the +configure option "–list-demuxers". +
+You can disable all the demuxers using the configure option +"–disable-demuxers", and selectively enable a single demuxer with +the option "–enable-demuxer=DEMUXER", or disable it +with the option "–disable-demuxer=DEMUXER". +
+The option "-formats" of the ff* tools will display the list of +enabled demuxers. +
+The description of some of the currently available demuxers follows. +
+ +Image file demuxer. +
+This demuxer reads from a list of image files specified by a pattern. +
+The pattern may contain the string "%d" or "%0Nd", which +specifies the position of the characters representing a sequential +number in each filename matched by the pattern. If the form +"%d0Nd" is used, the string representing the number in each +filename is 0-padded and N is the total number of 0-padded +digits representing the number. The literal character ’%’ can be +specified in the pattern with the string "%%". +
+If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified by the pattern must contain a number +inclusively contained between 0 and 4, all the following numbers must +be sequential. This limitation may be hopefully fixed. +
+The pattern may contain a suffix which is used to automatically +determine the format of the images contained in the files. +
+For example the pattern "img-%03d.bmp" will match a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a +sequence of filenames of the form ‘i%m%g-1.jpg’, +‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. +
+The size, the pixel format, and the format of each image must be the +same for all the files in the sequence. +
+The following example shows how to use ffmpeg for creating a
+video from the images in the file sequence ‘img-001.jpeg’,
+‘img-002.jpeg’, ..., assuming an input frame rate of 10 frames per
+second:
+
ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv + |
Note that the pattern must not necessarily contain "%d" or +"%0Nd", for example to convert a single image file +‘img.jpeg’ you can employ the command: +
ffmpeg -i img.jpeg img.png + |
Apple HTTP Live Streaming demuxer. +
+This demuxer presents all AVStreams from all variant streams. +The id field is set to the bitrate variant index number. By setting +the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), +the caller can decide which variant streams to actually receive. +The total bitrate of the variant that the stream belongs to is +available in a metadata key named "variant_bitrate". +
+ +SBaGen script demuxer. +
+This demuxer reads the script language used by SBaGen +http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG +script looks like that: +
-SE +a: 300-2.5/3 440+4.5/0 +b: 300-2.5/0 440+4.5/3 +off: - +NOW == a ++0:07:00 == b ++0:14:00 == a ++0:21:00 == b ++0:30:00 off + |
A SBG script can mix absolute and relative timestamps. If the script uses +either only absolute timestamps (including the script start time) or only +relative ones, then its layout is fixed, and the conversion is +straightforward. On the other hand, if the script mixes both kind of +timestamps, then the NOW reference for relative timestamps will be +taken from the current time of day at the time the script is read, and the +script layout will be frozen according to that reference. That means that if +the script is directly played, the actual times will match the absolute +timestamps up to the sound controller’s clock accuracy, but if the user +somehow pauses the playback or seeks, all times will be shifted accordingly. +
+ +Muxers are configured elements in FFmpeg which allow writing +multimedia streams to a particular type of file. +
+When you configure your FFmpeg build, all the supported muxers
+are enabled by default. You can list all available muxers using the
+configure option --list-muxers.
+
You can disable all the muxers with the configure option
+--disable-muxers and selectively enable / disable single muxers
+with the options --enable-muxer=MUXER /
+--disable-muxer=MUXER.
+
The option -formats of the ff* tools will display the list of
+enabled muxers.
+
A description of some of the currently available muxers follows. +
+ +CRC (Cyclic Redundancy Check) testing format. +
+This muxer computes and prints the Adler-32 CRC of all the input audio +and video frames. By default audio frames are converted to signed +16-bit raw audio and video frames to raw video before computing the +CRC. +
+The output of the muxer consists of a single line of the form: +CRC=0xCRC, where CRC is a hexadecimal number 0-padded to +8 digits containing the CRC for all the decoded input frames. +
+For example to compute the CRC of the input, and store it in the file +‘out.crc’: +
ffmpeg -i INPUT -f crc out.crc + |
You can print the CRC to stdout with the command: +
ffmpeg -i INPUT -f crc - + |
You can select the output format of each frame with ffmpeg by
+specifying the audio and video codec and format. For example to
+compute the CRC of the input audio converted to PCM unsigned 8-bit
+and the input video converted to MPEG-2 video, use the command:
+
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc - + |
See also the framecrc muxer. +
+ +Per-frame CRC (Cyclic Redundancy Check) testing format. +
+This muxer computes and prints the Adler-32 CRC for each decoded audio +and video frame. By default audio frames are converted to signed +16-bit raw audio and video frames to raw video before computing the +CRC. +
+The output of the muxer consists of a line for each audio and video +frame of the form: stream_index, frame_dts, +frame_size, 0xCRC, where CRC is a hexadecimal +number 0-padded to 8 digits containing the CRC of the decoded frame. +
+For example to compute the CRC of each decoded frame in the input, and +store it in the file ‘out.crc’: +
ffmpeg -i INPUT -f framecrc out.crc + |
You can print the CRC of each decoded frame to stdout with the command: +
ffmpeg -i INPUT -f framecrc - + |
You can select the output format of each frame with ffmpeg by
+specifying the audio and video codec and format. For example, to
+compute the CRC of each decoded input audio frame converted to PCM
+unsigned 8-bit and of each decoded input video frame converted to
+MPEG-2 video, use the command:
+
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc - + |
See also the crc muxer. +
+ +Image file muxer. +
+The image file muxer writes video frames to image files. +
+The output filenames are specified by a pattern, which can be used to +produce sequentially numbered series of files. +The pattern may contain the string "%d" or "%0Nd", this string +specifies the position of the characters representing a numbering in +the filenames. If the form "%0Nd" is used, the string +representing the number in each filename is 0-padded to N +digits. The literal character ’%’ can be specified in the pattern with +the string "%%". +
+If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified will contain the number 1, all the following +numbers will be sequential. +
+The pattern may contain a suffix which is used to automatically +determine the format of the image files to write. +
+For example the pattern "img-%03d.bmp" will specify a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc. +The pattern "img%%-%d.jpg" will specify a sequence of filenames of the +form ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, +etc. +
+The following example shows how to use ffmpeg for creating a
+sequence of files ‘img-001.jpeg’, ‘img-002.jpeg’, ...,
+taking one image every second from the input video:
+
ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg' + |
Note that with ffmpeg, if the format is not specified with the
+-f option and the output filename specifies an image file
+format, the image2 muxer is automatically selected, so the previous
+command can be written as:
+
ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg' + |
Note also that the pattern must not necessarily contain "%d" or +"%0Nd", for example to create a single image file +‘img.jpeg’ from the input video you can employ the command: +
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg + |
The image muxer supports the .Y.U.V image file format. This format is +special in that that each image frame consists of three files, for +each of the YUV420P components. To read or write this image file format, +specify the name of the ’.Y’ file. The muxer will automatically open the +’.U’ and ’.V’ files as required. +
+ +MOV / MP4 muxer +
+The muxer options are: +
+Reserves space for the moov atom at the beginning of the file instead of placing the +moov atom at the end. If the space reserved is insufficient, muxing will fail. +
MPEG transport stream muxer. +
+This muxer implements ISO 13818-1 and part of ETSI EN 300 468. +
+The muxer options are: +
+Set the original_network_id (default 0x0001). This is unique identifier +of a network in DVB. Its main use is in the unique identification of a +service through the path Original_Network_ID, Transport_Stream_ID. +
Set the transport_stream_id (default 0x0001). This identifies a +transponder in DVB. +
Set the service_id (default 0x0001) also known as program in DVB. +
Set the first PID for PMT (default 0x1000, max 0x1f00). +
Set the first PID for data packets (default 0x0100, max 0x0f00). +
The recognized metadata settings in mpegts muxer are service_provider
+and service_name. If they are not set the default for
+service_provider is "FFmpeg" and the default for
+service_name is "Service01".
+
ffmpeg -i file.mpg -c copy \ + -mpegts_original_network_id 0x1122 \ + -mpegts_transport_stream_id 0x3344 \ + -mpegts_service_id 0x5566 \ + -mpegts_pmt_start_pid 0x1500 \ + -mpegts_start_pid 0x150 \ + -metadata service_provider="Some provider" \ + -metadata service_name="Some Channel" \ + -y out.ts + |
Null muxer. +
+This muxer does not generate any output file, it is mainly useful for +testing or benchmarking purposes. +
+For example to benchmark decoding with ffmpeg you can use the
+command:
+
ffmpeg -benchmark -i INPUT -f null out.null + |
Note that the above command does not read or write the ‘out.null’
+file, but specifying the output file is required by the ffmpeg
+syntax.
+
Alternatively you can write the command as: +
ffmpeg -benchmark -i INPUT -f null - + |
Matroska container muxer. +
+This muxer implements the matroska and webm container specs. +
+The recognized metadata settings in this muxer are: +
+Name provided to a single track +
Specifies the language of the track in the Matroska languages form +
Stereo 3D video layout of two views in a single video track +
video is not stereo +
Both views are arranged side by side, Left-eye view is on the left +
Both views are arranged in top-bottom orientation, Left-eye view is at bottom +
Both views are arranged in top-bottom orientation, Left-eye view is on top +
Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first +
Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first +
Each view is constituted by a row based interleaving, Right-eye view is first row +
Each view is constituted by a row based interleaving, Left-eye view is first row +
Both views are arranged in a column based interleaving manner, Right-eye view is first column +
Both views are arranged in a column based interleaving manner, Left-eye view is first column +
All frames are in anaglyph format viewable through red-cyan filters +
Both views are arranged side by side, Right-eye view is on the left +
All frames are in anaglyph format viewable through green-magenta filters +
Both eyes laced in one Block, Left-eye view is first +
Both eyes laced in one Block, Right-eye view is first +
For example a 3D WebM clip can be created using the following command line: +
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm + |
Basic stream segmenter. +
+The segmenter muxer outputs streams to a number of separate files of nearly +fixed duration. Output filename pattern can be set in a fashion similar to +image2. +
+Every segment starts with a video keyframe, if a video stream is present. +The segment muxer works best with a single constant frame rate video. +
+Optionally it can generate a flat list of the created segments, one segment +per line. +
+Override the inner container format, by default it is guessed by the filename +extension. +
Set segment duration to t seconds. +
Generate also a listfile named name. +
Overwrite the listfile once it reaches size entries. +
ffmpeg -i in.mkv -c copy -map 0 -f segment -list out.list out%03d.nut + |
Input devices are configured elements in FFmpeg which allow to access +the data coming from a multimedia device attached to your system. +
+When you configure your FFmpeg build, all the supported input devices +are enabled by default. You can list all available ones using the +configure option "–list-indevs". +
+You can disable all the input devices using the configure option +"–disable-indevs", and selectively enable an input device using the +option "–enable-indev=INDEV", or you can disable a particular +input device using the option "–disable-indev=INDEV". +
+The option "-formats" of the ff* tools will display the list of +supported input devices (amongst the demuxers). +
+A description of the currently available input devices follows. +
+ +ALSA (Advanced Linux Sound Architecture) input device. +
+To enable this input device during configuration you need libasound +installed on your system. +
+This device allows capturing from an ALSA device. The name of the +device to capture has to be an ALSA card identifier. +
+An ALSA identifier has the syntax: +
hw:CARD[,DEV[,SUBDEV]] + |
where the DEV and SUBDEV components are optional. +
+The three arguments (in order: CARD,DEV,SUBDEV) +specify card number or identifier, device number and subdevice number +(-1 means any). +
+To see the list of cards currently recognized by your system check the +files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. +
+For example to capture with ffmpeg from an ALSA device with
+card id 0, you may run the command:
+
ffmpeg -f alsa -i hw:0 alsaout.wav + |
For more information see: +http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html +
+ +BSD video input device. +
+ +Windows DirectShow input device. +
+DirectShow support is enabled when FFmpeg is built with mingw-w64. +Currently only audio and video devices are supported. +
+Multiple devices may be opened as separate inputs, but they may also be +opened on the same input, which should improve synchronism between them. +
+The input name should be in the format: +
+TYPE=NAME[:TYPE=NAME] + |
where TYPE can be either audio or video, +and NAME is the device’s name. +
+ +If no options are specified, the device’s defaults are used. +If the device does not support the requested options, it will +fail to open. +
+Set the video size in the captured video. +
+Set the framerate in the captured video. +
+Set the sample rate (in Hz) of the captured audio. +
+Set the sample size (in bits) of the captured audio. +
+Set the number of channels in the captured audio. +
+If set to ‘true’, print a list of devices and exit. +
+If set to ‘true’, print a list of selected device’s options +and exit. +
+Set video device number for devices with same name (starts at 0, +defaults to 0). +
+Set audio device number for devices with same name (starts at 0, +defaults to 0). +
+$ ffmpeg -list_devices true -f dshow -i dummy + |
$ ffmpeg -f dshow -i video="Camera" + |
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera" + |
$ ffmpeg -f dshow -i video="Camera":audio="Microphone" + |
$ ffmpeg -list_options true -f dshow -i video="Camera" + |
Linux DV 1394 input device. +
+ +Linux framebuffer input device. +
+The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +
+For more detailed information read the file +Documentation/fb/framebuffer.txt included in the Linux source tree. +
+To record from the framebuffer device ‘/dev/fb0’ with
+ffmpeg:
+
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi + |
You can take a single screenshot image with the command: +
ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg + |
See also http://linux-fbdev.sourceforge.net/, and fbset(1). +
+ +JACK input device. +
+To enable this input device during configuration you need libjack +installed on your system. +
+A JACK input device creates one or more JACK writable clients, one for +each audio channel, with name client_name:input_N, where +client_name is the name provided by the application, and N +is a number which identifies the channel. +Each writable client will send the acquired data to the FFmpeg input +device. +
+Once you have created one or more JACK readable clients, you need to +connect them to one or more JACK writable clients. +
+To connect or disconnect JACK clients you can use the jack_connect
+and jack_disconnect programs, or do it through a graphical interface,
+for example with qjackctl.
+
To list the JACK clients and their properties you can invoke the command
+jack_lsp.
+
Follows an example which shows how to capture a JACK readable client
+with ffmpeg.
+
# Create a JACK writable client with name "ffmpeg". +$ ffmpeg -f jack -i ffmpeg -y out.wav + +# Start the sample jack_metro readable client. +$ jack_metro -b 120 -d 0.2 -f 4000 + +# List the current JACK clients. +$ jack_lsp -c +system:capture_1 +system:capture_2 +system:playback_1 +system:playback_2 +ffmpeg:input_1 +metro:120_bpm + +# Connect metro to the ffmpeg writable client. +$ jack_connect metro:120_bpm ffmpeg:input_1 + |
For more information read: +http://jackaudio.org/ +
+ +Libavfilter input virtual device. +
+This input device reads data from the open output pads of a libavfilter +filtergraph. +
+For each filtergraph open output, the input device will create a +corresponding stream which is mapped to the generated output. Currently +only video data is supported. The filtergraph is specified through the +option ‘graph’. +
+ +Specify the filtergraph to use as input. Each video open output must be +labelled by a unique string of the form "outN", where N is a +number starting from 0 corresponding to the mapped input stream +generated by the device. +The first unlabelled output is automatically assigned to the "out0" +label, but all the others need to be specified explicitly. +
+If not specified defaults to the filename specified for the input +device. +
ffplay:
+ffplay -f lavfi -graph "color=pink [out0]" dummy + |
ffplay -f lavfi color=pink + |
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3 + |
ffplay:
+ffplay -f lavfi "amovie=test.wav" + |
ffplay:
+ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]" + |
IIDC1394 input device, based on libdc1394 and libraw1394. +
+ +The OpenAL input device provides audio capture on all systems with a +working OpenAL 1.1 implementation. +
+To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with --enable-openal.
+
OpenAL headers and libraries should be provided as part of your OpenAL
+implementation, or as an additional download (an SDK). Depending on your
+installation you may need to specify additional flags via the
+--extra-cflags and --extra-ldflags for allowing the build
+system to locate the OpenAL headers and libraries.
+
An incomplete list of OpenAL implementations follows: +
+The official Windows implementation, providing hardware acceleration +with supported devices and software fallback. +See http://openal.org/. +
Portable, open source (LGPL) software implementation. Includes +backends for the most common sound APIs on the Windows, Linux, +Solaris, and BSD operating systems. +See http://kcat.strangesoft.net/openal.html. +
OpenAL is part of Core Audio, the official Mac OS X Audio interface. +See http://developer.apple.com/technologies/mac/audio-and-video.html +
This device allows to capture from an audio input device handled +through OpenAL. +
+You need to specify the name of the device to capture in the provided +filename. If the empty string is provided, the device will +automatically select the default device. You can get the list of the +supported devices by using the option list_devices. +
+ +Set the number of channels in the captured audio. Only the values +‘1’ (monaural) and ‘2’ (stereo) are currently supported. +Defaults to ‘2’. +
+Set the sample size (in bits) of the captured audio. Only the values +‘8’ and ‘16’ are currently supported. Defaults to +‘16’. +
+Set the sample rate (in Hz) of the captured audio. +Defaults to ‘44.1k’. +
+If set to ‘true’, print a list of devices and exit. +Defaults to ‘false’. +
+Print the list of OpenAL supported devices and exit: +
$ ffmpeg -list_devices true -f openal -i dummy out.ogg + |
Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: +
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg + |
Capture from the default device (note the empty string ” as filename): +
$ ffmpeg -f openal -i '' out.ogg + |
Capture from two devices simultaneously, writing to two different files,
+within the same ffmpeg command:
+
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg + |
Note: not all OpenAL implementations support multiple simultaneous capture - +try the latest OpenAL Soft if the above does not work. +
+ +Open Sound System input device. +
+The filename to provide to the input device is the device node +representing the OSS input device, and is usually set to +‘/dev/dsp’. +
+For example to grab from ‘/dev/dsp’ using ffmpeg use the
+command:
+
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav + |
For more information about OSS see: +http://manuals.opensound.com/usersguide/dsp.html +
+ +pulseaudio input device. +
+To enable this input device during configuration you need libpulse-simple +installed in your system. +
+The filename to provide to the input device is a source device or the +string "default" +
+To list the pulse source devices and their properties you can invoke
+the command pactl list sources.
+
ffmpeg -f pulse -i default /tmp/pulse.wav + |
The syntax is: +
-server server name + |
Connects to a specific server. +
+ +The syntax is: +
-name application name + |
Specify the application name pulse will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string +
+ +The syntax is: +
-stream_name stream name + |
Specify the stream name pulse will use when showing active streams, +by default it is "record" +
+ +The syntax is: +
-sample_rate samplerate + |
Specify the samplerate in Hz, by default 48kHz is used. +
+ +The syntax is: +
-channels N + |
Specify the channels in use, by default 2 (stereo) is set. +
+ +The syntax is: +
-frame_size bytes + |
Specify the number of byte per frame, by default it is set to 1024. +
+ +The syntax is: +
-fragment_size bytes + |
Specify the minimal buffering fragment in pulseaudio, it will affect the +audio latency. By default it is unset. +
+ +sndio input device. +
+To enable this input device during configuration you need libsndio +installed on your system. +
+The filename to provide to the input device is the device node +representing the sndio input device, and is usually set to +‘/dev/audio0’. +
+For example to grab from ‘/dev/audio0’ using ffmpeg use the
+command:
+
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav + |
Video4Linux and Video4Linux2 input video devices. +
+The name of the device to grab is a file device node, usually Linux +systems tend to automatically create such nodes when the device +(e.g. an USB webcam) is plugged into the system, and has a name of the +kind ‘/dev/videoN’, where N is a number associated to +the device. +
+Video4Linux and Video4Linux2 devices only support a limited set of
+widthxheight sizes and framerates. You can check which are
+supported for example with the command dov4l for Video4Linux
+devices and using -list_formats all for Video4Linux2 devices.
+
If the size for the device is set to 0x0, the input device will +try to auto-detect the size to use. +Only for the video4linux2 device, if the frame rate is set to 0/0 the +input device will use the frame rate value already set in the driver. +
+Video4Linux support is deprecated since Linux 2.6.30, and will be +dropped in later versions. +
+Note that if FFmpeg is build with v4l-utils support ("–enable-libv4l2" +option), it will always be used. +
+Follow some usage examples of the video4linux devices with the ff* +tools. +
# Grab and show the input of a video4linux device, frame rate is set +# to the default of 25/1. +ffplay -s 320x240 -f video4linux /dev/video0 + +# Grab and show the input of a video4linux2 device, auto-adjust size. +ffplay -f video4linux2 /dev/video0 + +# Grab and record the input of a video4linux2 device, auto-adjust size, +# frame rate value defaults to 0/0 so it is read from the video4linux2 +# driver. +ffmpeg -f video4linux2 -i /dev/video0 out.mpeg + |
"v4l" and "v4l2" can be used as aliases for the respective "video4linux" and +"video4linux2". +
+ +VfW (Video for Windows) capture input device. +
+The filename passed as input is the capture driver number, ranging from +0 to 9. You may use "list" as filename to print a list of drivers. Any +other filename will be interpreted as device number 0. +
+ +X11 video input device. +
+This device allows to capture a region of an X11 display. +
+The filename passed as input has the syntax: +
[hostname]:display_number.screen_number[+x_offset,y_offset] + |
hostname:display_number.screen_number specifies the
+X11 display name of the screen to grab from. hostname can be
+omitted, and defaults to "localhost". The environment variable
+DISPLAY contains the default display name.
+
x_offset and y_offset specify the offsets of the grabbed +area with respect to the top-left border of the X11 screen. They +default to 0. +
+Check the X11 documentation (e.g. man X) for more detailed information. +
+Use the dpyinfo program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+
For example to grab from ‘:0.0’ using ffmpeg:
+
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg + +# Grab at position 10,20. +ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg + |
The syntax is: +
-follow_mouse centered|PIXELS + |
When it is specified with "centered", the grabbing region follows the mouse +pointer and keeps the pointer at the center of region; otherwise, the region +follows only when the mouse pointer reaches within PIXELS (greater than +zero) to the edge of region. +
+For example: +
ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg + +# Follows only when the mouse pointer reaches within 100 pixels to edge +ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg + |
The syntax is: +
-show_region 1 + |
If show_region AVOption is specified with 1, then the grabbing +region will be indicated on screen. With this option, it’s easy to know what is +being grabbed if only a portion of the screen is grabbed. +
+For example: +
ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg + +# With follow_mouse +ffmpeg -f x11grab -follow_mouse centered -show_region 1 -r 25 -s cif -i :0.0 out.mpg + |
Output devices are configured elements in FFmpeg which allow to write +multimedia data to an output device attached to your system. +
+When you configure your FFmpeg build, all the supported output devices +are enabled by default. You can list all available ones using the +configure option "–list-outdevs". +
+You can disable all the output devices using the configure option +"–disable-outdevs", and selectively enable an output device using the +option "–enable-outdev=OUTDEV", or you can disable a particular +input device using the option "–disable-outdev=OUTDEV". +
+The option "-formats" of the ff* tools will display the list of +enabled output devices (amongst the muxers). +
+A description of the currently available output devices follows. +
+ +ALSA (Advanced Linux Sound Architecture) output device. +
+ +OSS (Open Sound System) output device. +
+ +SDL (Simple DirectMedia Layer) output device. +
+This output devices allows to show a video stream in an SDL +window. Only one SDL window is allowed per application, so you can +have only one instance of this output device in an application. +
+To enable this output device you need libsdl installed on your system +when configuring your build. +
+For more information about SDL, check: +http://www.libsdl.org/ +
+ +Set the SDL window title, if not specified default to the filename +specified for the output device. +
+Set the name of the iconified SDL window, if not specified it is set +to the same value of window_title. +
+Set the SDL window size, can be a string of the form +widthxheight or a video size abbreviation. +If not specified it defaults to the size of the input video. +
The following command shows the ffmpeg output is an
+SDL window, forcing its size to the qcif format:
+
ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output" + |
sndio audio output device. +
+ +Protocols are configured elements in FFmpeg which allow to access +resources which require the use of a particular protocol. +
+When you configure your FFmpeg build, all the supported protocols are +enabled by default. You can list all available ones using the +configure option "–list-protocols". +
+You can disable all the protocols using the configure option +"–disable-protocols", and selectively enable a protocol using the +option "–enable-protocol=PROTOCOL", or you can disable a +particular protocol using the option +"–disable-protocol=PROTOCOL". +
+The option "-protocols" of the ff* tools will display the list of +supported protocols. +
+A description of the currently available protocols follows. +
+ +Read Apple HTTP Live Streaming compliant segmented stream as +a uniform one. The M3U8 playlists describing the segments can be +remote HTTP resources or local files, accessed using the standard +file protocol. +HTTP is default, specific protocol can be declared by specifying +"+proto" after the applehttp URI scheme name, where proto +is either "file" or "http". +
+applehttp://host/path/to/remote/resource.m3u8 +applehttp+http://host/path/to/remote/resource.m3u8 +applehttp+file://path/to/local/resource.m3u8 + |
Physical concatenation protocol. +
+Allow to read and seek from many resource in sequence as if they were +a unique resource. +
+A URL accepted by this protocol has the syntax: +
concat:URL1|URL2|...|URLN + |
where URL1, URL2, ..., URLN are the urls of the +resource to be concatenated, each one possibly specifying a distinct +protocol. +
+For example to read a sequence of files ‘split1.mpeg’,
+‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the
+command:
+
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg + |
Note that you may need to escape the character "|" which is special for +many shells. +
+ +File access protocol. +
+Allow to read from or read to a file. +
+For example to read from a file ‘input.mpeg’ with ffmpeg
+use the command:
+
ffmpeg -i file:input.mpeg output.mpeg + |
The ff* tools default to the file protocol, that is a resource +specified with the name "FILE.mpeg" is interpreted as the URL +"file:FILE.mpeg". +
+ +Gopher protocol. +
+ +HTTP (Hyper Text Transfer Protocol). +
+ +MMS (Microsoft Media Server) protocol over TCP. +
+ +MMS (Microsoft Media Server) protocol over HTTP. +
+The required syntax is: +
mmsh://server[:port][/app][/playpath] + |
MD5 output protocol. +
+Computes the MD5 hash of the data to be written, and on close writes +this to the designated output or stdout if none is specified. It can +be used to test muxers without writing an actual file. +
+Some examples follow. +
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. +ffmpeg -i input.flv -f avi -y md5:output.avi.md5 + +# Write the MD5 hash of the encoded AVI file to stdout. +ffmpeg -i input.flv -f avi -y md5: + |
Note that some formats (typically MOV) require the output protocol to +be seekable, so they will fail with the MD5 output protocol. +
+ +UNIX pipe access protocol. +
+Allow to read and write from UNIX pipes. +
+The accepted syntax is: +
pipe:[number] + |
number is the number corresponding to the file descriptor of the +pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number +is not specified, by default the stdout file descriptor will be used +for writing, stdin for reading. +
+For example to read from stdin with ffmpeg:
+
cat test.wav | ffmpeg -i pipe:0 +# ...this is the same as... +cat test.wav | ffmpeg -i pipe: + |
For writing to stdout with ffmpeg:
+
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi +# ...this is the same as... +ffmpeg -i test.wav -f avi pipe: | cat > test.avi + |
Note that some formats (typically MOV), require the output protocol to +be seekable, so they will fail with the pipe output protocol. +
+ +Real-Time Messaging Protocol. +
+The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia +content across a TCP/IP network. +
+The required syntax is: +
rtmp://server[:port][/app][/playpath] + |
The accepted parameters are: +
The address of the RTMP server. +
+The number of the TCP port to use (by default is 1935). +
+It is the name of the application to access. It usually corresponds to +the path where the application is installed on the RTMP server +(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). +
+It is the path or name of the resource to play with reference to the +application specified in app, may be prefixed by "mp4:". +
+For example to read with ffplay a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+
ffplay rtmp://myserver/vod/sample + |
Real-Time Messaging Protocol and its variants supported through +librtmp. +
+Requires the presence of the librtmp headers and library during +configuration. You need to explicitly configure the build with +"–enable-librtmp". If enabled this will replace the native RTMP +protocol. +
+This protocol provides most client functions and a few server +functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), +encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled +variants of these encrypted types (RTMPTE, RTMPTS). +
+The required syntax is: +
rtmp_proto://server[:port][/app][/playpath] options + |
where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", +"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and +server, port, app and playpath have the same +meaning as specified for the RTMP native protocol. +options contains a list of space-separated options of the form +key=val. +
+See the librtmp manual page (man 3 librtmp) for more information. +
+For example, to stream a file in real-time to an RTMP server using
+ffmpeg:
+
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream + |
To play the same stream using ffplay:
+
ffplay "rtmp://myserver/live/mystream live=1" + |
Real-Time Protocol. +
+ +RTSP is not technically a protocol handler in libavformat, it is a demuxer +and muxer. The demuxer supports both normal RTSP (with data transferred +over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with +data transferred over RDT). +
+The muxer can be used to send a stream using RTSP ANNOUNCE to a server +supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s +RTSP server). +
+The required syntax for a RTSP url is: +
rtsp://hostname[:port]/path + |
The following options (set on the ffmpeg/ffplay command
+line, or set in code via AVOptions or in avformat_open_input),
+are supported:
+
Flags for rtsp_transport:
+
Use UDP as lower transport protocol. +
+Use TCP (interleaving within the RTSP control channel) as lower +transport protocol. +
+Use UDP multicast as lower transport protocol. +
+Use HTTP tunneling as lower transport protocol, which is useful for +passing proxies. +
Multiple lower transport protocols may be specified, in that case they are
+tried one at a time (if the setup of one fails, the next one is tried).
+For the muxer, only the tcp and udp options are supported.
+
Flags for rtsp_flags:
+
Accept packets only from negotiated peer address and port. +
When receiving data over UDP, the demuxer tries to reorder received packets
+(since they may arrive out of order, or packets may get lost totally). In
+order for this to be enabled, a maximum delay must be specified in the
+max_delay field of AVFormatContext.
+
When watching multi-bitrate Real-RTSP streams with ffplay, the
+streams to display can be chosen with -vst n and
+-ast n for video and audio respectively, and can be switched
+on the fly by pressing v and a.
+
Example command lines: +
+To watch a stream over UDP, with a max reordering delay of 0.5 seconds: +
+ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4 + |
To watch a stream tunneled over HTTP: +
+ffplay -rtsp_transport http rtsp://server/video.mp4 + |
To send a stream in realtime to a RTSP server, for others to watch: +
+ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp + |
Session Announcement Protocol (RFC 2974). This is not technically a +protocol handler in libavformat, it is a muxer and demuxer. +It is used for signalling of RTP streams, by announcing the SDP for the +streams regularly on a separate port. +
+ +The syntax for a SAP url given to the muxer is: +
sap://destination[:port][?options] + |
The RTP packets are sent to destination on port port,
+or to port 5004 if no port is specified.
+options is a &-separated list. The following options
+are supported:
+
Specify the destination IP address for sending the announcements to. +If omitted, the announcements are sent to the commonly used SAP +announcement multicast address 224.2.127.254 (sap.mcast.net), or +ff0e::2:7ffe if destination is an IPv6 address. +
+Specify the port to send the announcements on, defaults to +9875 if not specified. +
+Specify the time to live value for the announcements and RTP packets, +defaults to 255. +
+If set to 1, send all RTP streams on the same port pair. If zero (the +default), all streams are sent on unique ports, with each stream on a +port 2 numbers higher than the previous. +VLC/Live555 requires this to be set to 1, to be able to receive the stream. +The RTP stack in libavformat for receiving requires all streams to be sent +on unique ports. +
Example command lines follow. +
+To broadcast a stream on the local subnet, for watching in VLC: +
+ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1 + |
Similarly, for watching in ffplay:
+
ffmpeg -re -i input -f sap sap://224.0.0.255 + |
And for watching in ffplay, over IPv6:
+
ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4] + |
The syntax for a SAP url given to the demuxer is: +
sap://[address][:port] + |
address is the multicast address to listen for announcements on, +if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port +is the port that is listened on, 9875 if omitted. +
+The demuxers listens for announcements on the given address and port. +Once an announcement is received, it tries to receive that particular stream. +
+Example command lines follow. +
+To play back the first stream announced on the normal SAP multicast address: +
+ffplay sap:// + |
To play back the first stream announced on one the default IPv6 SAP multicast address: +
+ffplay sap://[ff0e::2:7ffe] + |
Trasmission Control Protocol. +
+The required syntax for a TCP url is: +
tcp://hostname:port[?options] + |
Listen for an incoming connection +
+ffmpeg -i input -f format tcp://hostname:port?listen +ffplay tcp://hostname:port + |
User Datagram Protocol. +
+The required syntax for a UDP url is: +
udp://hostname:port[?options] + |
options contains a list of &-seperated options of the form key=val. +Follow the list of supported options. +
+set the UDP buffer size in bytes +
+override the local UDP port to bind with +
+Choose the local IP address. This is useful e.g. if sending multicast +and the host has multiple interfaces, where the user can choose +which interface to send on by specifying the IP address of that interface. +
+set the size in bytes of UDP packets +
+explicitly allow or disallow reusing UDP sockets +
+set the time to live value (for multicast only) +
+Initialize the UDP socket with connect(). In this case, the
+destination address can’t be changed with ff_udp_set_remote_url later.
+If the destination address isn’t known at the start, this option can
+be specified in ff_udp_set_remote_url, too.
+This allows finding out the source address for the packets with getsockname,
+and makes writes return with AVERROR(ECONNREFUSED) if "destination
+unreachable" is received.
+For receiving, this gives the benefit of only receiving packets from
+the specified peer address/port.
+
Some usage examples of the udp protocol with ffmpeg follow.
+
To stream over UDP to a remote endpoint: +
ffmpeg -i input -f format udp://hostname:port + |
To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: +
ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535 + |
To receive over UDP from a remote endpoint: +
ffmpeg -i udp://[multicast-address]:port + |
When you configure your FFmpeg build, all the supported bitstream
+filters are enabled by default. You can list all available ones using
+the configure option --list-bsfs.
+
You can disable all the bitstream filters using the configure option
+--disable-bsfs, and selectively enable any bitstream filter using
+the option --enable-bsf=BSF, or you can disable a particular
+bitstream filter using the option --disable-bsf=BSF.
+
The option -bsfs of the ff* tools will display the list of
+all the supported bitstream filters included in your build.
+
Below is a description of the currently available bitstream filters. +
+ +Convert an H.264 bitstream from length prefixed mode to start code +prefixed mode (as defined in the Annex B of the ITU-T H.264 +specification). +
+This is required by some streaming formats, typically the MPEG-2 +transport stream format ("mpegts"). +
+For example to remux an MP4 file containing an H.264 stream to mpegts
+format with ffmpeg, you can use the command:
+
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts + |
Convert MJPEG/AVI1 packets to full JPEG/JFIF packets. +
+MJPEG is a video codec wherein each video frame is essentially a +JPEG image. The individual frames can be extracted without loss, +e.g. by +
+ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg + |
Unfortunately, these chunks are incomplete JPEG images, because +they lack the DHT segment required for decoding. Quoting from +http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml: +
+Avery Lee, writing in the rec.video.desktop newsgroup in 2001, +commented that "MJPEG, or at least the MJPEG in AVIs having the +MJPG fourcc, is restricted JPEG with a fixed – and *omitted* – +Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2, +and it must use basic Huffman encoding, not arithmetic or +progressive. . . . You can indeed extract the MJPEG frames and +decode them with a regular JPEG decoder, but you have to prepend +the DHT segment to them, or else the decoder won’t have any idea +how to decompress the data. The exact table necessary is given in +the OpenDML spec." +
+This bitstream filter patches the header of frames extracted from an MJPEG +stream (carrying the AVI1 header ID and lacking a DHT segment) to +produce fully qualified JPEG images. +
+ffmpeg -i mjpeg-movie.avi -c:v copy -vbsf mjpeg2jpeg frame_%d.jpg +exiftran -i -9 frame*.jpg +ffmpeg -i frame_%d.jpg -c:v copy rotated.avi + |
A filtergraph is a directed graph of connected filters. It can contain +cycles, and there can be multiple links between a pair of +filters. Each link has one input pad on one side connecting it to one +filter from which it takes its input, and one output pad on the other +side connecting it to the one filter accepting its output. +
+Each filter in a filtergraph is an instance of a filter class +registered in the application, which defines the features and the +number of input and output pads of the filter. +
+A filter with no input pads is called a "source", a filter with no +output pads is called a "sink". +
+ +A filtergraph can be represented using a textual representation, which
+is recognized by the -vf option of the ff*
+tools, and by the avfilter_graph_parse() function defined in
+‘libavfilter/avfiltergraph.h’.
+
A filterchain consists of a sequence of connected filters, each one +connected to the previous one in the sequence. A filterchain is +represented by a list of ","-separated filter descriptions. +
+A filtergraph consists of a sequence of filterchains. A sequence of +filterchains is represented by a list of ";"-separated filterchain +descriptions. +
+A filter is represented by a string of the form: +[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] +
+filter_name is the name of the filter class of which the +described filter is an instance of, and has to be the name of one of +the filter classes registered in the program. +The name of the filter class is optionally followed by a string +"=arguments". +
+arguments is a string which contains the parameters used to +initialize the filter instance, and are described in the filter +descriptions below. +
+The list of arguments can be quoted using the character "’" as initial +and ending mark, and the character ’\’ for escaping the characters +within the quoted text; otherwise the argument string is considered +terminated when the next special character (belonging to the set +"[]=;,") is encountered. +
+The name and arguments of the filter are optionally preceded and +followed by a list of link labels. +A link label allows to name a link and associate it to a filter output +or input pad. The preceding labels in_link_1 +... in_link_N, are associated to the filter input pads, +the following labels out_link_1 ... out_link_M, are +associated to the output pads. +
+When two link labels with the same name are found in the +filtergraph, a link between the corresponding input and output pad is +created. +
+If an output pad is not labelled, it is linked by default to the first +unlabelled input pad of the next filter in the filterchain. +For example in the filterchain: +
nullsrc, split[L1], [L2]overlay, nullsink + |
the split filter instance has two output pads, and the overlay filter +instance two input pads. The first output pad of split is labelled +"L1", the first input pad of overlay is labelled "L2", and the second +output pad of split is linked to the second input pad of overlay, +which are both unlabelled. +
+In a complete filterchain all the unlabelled filter input and output +pads must be connected. A filtergraph is considered valid if all the +filter input and output pads of all the filterchains are connected. +
+Follows a BNF description for the filtergraph syntax: +
NAME ::= sequence of alphanumeric characters and '_' +LINKLABEL ::= "[" NAME "]" +LINKLABELS ::= LINKLABEL [LINKLABELS] +FILTER_ARGUMENTS ::= sequence of chars (eventually quoted) +FILTER ::= [LINKNAMES] NAME ["=" ARGUMENTS] [LINKNAMES] +FILTERCHAIN ::= FILTER [,FILTERCHAIN] +FILTERGRAPH ::= FILTERCHAIN [;FILTERGRAPH] + |
When you configure your FFmpeg build, you can disable any of the
+existing filters using --disable-filters.
+The configure output will show the audio filters included in your
+build.
+
Below is a description of the currently available audio filters. +
+ +Convert the input audio format to the specified formats. +
+The filter accepts a string of the form: +"sample_format:channel_layout:packing_format". +
+sample_format specifies the sample format, and can be a string or +the corresponding numeric value defined in ‘libavutil/samplefmt.h’. +
+channel_layout specifies the channel layout, and can be a string +or the corresponding number value defined in ‘libavutil/audioconvert.h’. +
+packing_format specifies the type of packing in output, can be one +of "planar" or "packed", or the corresponding numeric values "0" or "1". +
+The special parameter "auto", signifies that the filter will +automatically select the output format depending on the output filter. +
+Some examples follow. +
+aconvert=u8:stereo:packed + |
aconvert=u8:auto:auto + |
Convert the input audio to one of the specified formats. The framework will +negotiate the most appropriate format to minimize conversions. +
+The filter accepts three lists of formats, separated by ":", in the form: +"sample_formats:channel_layouts:packing_formats". +
+Elements in each list are separated by "," which has to be escaped in the +filtergraph specification. +
+The special parameter "all", in place of a list of elements, signifies all +supported formats. +
+Some examples follow: +
aformat=u8\\,s16:mono:packed + +aformat=s16:mono\\,stereo:all + |
Merge two audio streams into a single multi-channel stream. +
+This filter does not need any argument. +
+If the channel layouts of the inputs are disjoint, and therefore compatible, +the channel layout of the output will be set accordingly and the channels +will be reordered as necessary. If the channel layouts of the inputs are not +disjoint, the output will have all the channels of the first input then all +the channels of the second input, in that order, and the channel layout of +the output will be the default value corresponding to the total number of +channels. +
+For example, if the first input is in 2.1 (FL+FR+LF) and the second input +is FC+BL+BR, then the output will be in 5.1, with the channels in the +following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the +first input, b1 is the first channel of the second input). +
+On the other hand, if both input are in stereo, the output channels will be +in the default order: a1, a2, b1, b2, and the channel layout will be +arbitrarily set to 4.0, which may or may not be the expected value. +
+Both inputs must have the same sample rate, format and packing. +
+If inputs do not have the same duration, the output will stop with the +shortest. +
+Example: merge two mono files into a stereo stream: +
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge + |
Pass the audio source unchanged to the output. +
+ +Resample the input audio to the specified sample rate. +
+The filter accepts exactly one parameter, the output sample rate. If not +specified then the filter will automatically convert between its input +and output sample rates. +
+For example, to resample the input audio to 44100Hz: +
aresample=44100 + |
Show a line containing various information for each input audio frame. +The input audio is not modified. +
+The shown line contains a sequence of key/value pairs of the form +key:value. +
+A description of each shown parameter follows: +
+sequential number of the input frame, starting from 0 +
+presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad, and +is usually 1/sample_rate. +
+presentation TimeStamp of the input frame, expressed as a number of +seconds +
+position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic audio) +
+sample format name +
+channel layout description +
+number of samples (per each channel) contained in the filtered frame +
+sample rate for the audio frame +
+if the packing format is planar, 0 if packed +
+Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +
+Adler-32 checksum (printed in hexadecimal) for each input frame plane, +expressed in the form "[c0 c1 c2 c3 c4 c5 +c6 c7]" +
Pass on the input audio to two outputs. Both outputs are identical to +the input audio. +
+For example: +
[in] asplit[out0], showaudio[out1] + |
will create two separate outputs from the same input, one cropped and +one padded. +
+ +Forward two audio streams and control the order the buffers are forwarded. +
+The argument to the filter is an expression deciding which stream should be +forwarded next: if the result is negative, the first stream is forwarded; if +the result is positive or zero, the second stream is forwarded. It can use +the following variables: +
+number of buffers forwarded so far on each stream +
number of samples forwarded so far on each stream +
current timestamp of each stream +
The default value is t1-t2, which means to always forward the stream
+that has a smaller timestamp.
+
Example: stress-test amerge by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+
amovie=file.ogg [a] ; amovie=file.mp3 [b] ; +[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ; +[a2] [b2] amerge + |
Make audio easier to listen to on headphones. +
+This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio +so that when listened to on headphones the stereo image is moved from +inside your head (standard for headphones) to outside and in front of +the listener (standard for speakers). +
+Ported from SoX. +
+ +Mix channels with specific gain levels. The filter accepts the output +channel layout followed by a set of channels definitions. +
+This filter is also designed to remap efficiently the channels of an audio +stream. +
+The filter accepts parameters of the form: +"l:outdef:outdef:..." +
+output channel layout or number of channels +
+output channel specification, of the form: +"out_name=[gain*]in_name[+[gain*]in_name...]" +
+output channel to define, either a channel name (FL, FR, etc.) or a channel +number (c0, c1, etc.) +
+multiplicative coefficient for the channel, 1 leaving the volume unchanged +
+input channel to use, see out_name for details; it is not possible to mix +named and numbered input channels +
If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for +that specification will be renormalized so that the total is 1, thus +avoiding clipping noise. +
+ +For example, if you want to down-mix from stereo to mono, but with a bigger +factor for the left channel: +
pan=1:c0=0.9*c0+0.1*c1 + |
A customized down-mix to stereo that works automatically for 3-, 4-, 5- and +7-channels surround: +
pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR + |
Note that ffmpeg integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+
The channel remapping will be effective if, and only if: +
+If all these conditions are satisfied, the filter will notify the user ("Pure +channel mapping detected"), and use an optimized and lossless method to do the +remapping. +
+For example, if you have a 5.1 source and want a stereo audio stream by +dropping the extra channels: +
pan="stereo: c0=FL : c1=FR" + |
Given the same source, you can also switch front left and front right channels +and keep the input channel layout: +
pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5" + |
If the input is a stereo audio stream, you can mute the front left channel (and +still keep the stereo channel layout) with: +
pan="stereo:c1=c1" + |
Still with a stereo audio stream input, you can copy the right channel in both +front left and right: +
pan="stereo: c0=FR : c1=FR" + |
Detect silence in an audio stream. +
+This filter logs a message when it detects that the input audio volume is less +or equal to a noise tolerance value for a duration greater or equal to the +minimum detected noise duration. +
+The printed times and duration are expressed in seconds. +
+Set silence duration until notification (default is 2 seconds). +
+Set noise tolerance. Can be specified in dB (in case "dB" is appended to the +specified value) or amplitude ratio. Default is -60dB, or 0.001. +
Detect 5 seconds of silence with -50dB noise tolerance: +
silencedetect=n=-50dB:d=5 + |
Complete example with ffmpeg to detect silence with 0.0001 noise
+tolerance in ‘silence.mp3’:
+
ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null - + |
Adjust the input audio volume. +
+The filter accepts exactly one parameter vol, which expresses +how the audio volume will be increased or decreased. +
+Output values are clipped to the maximum value. +
+If vol is expressed as a decimal number, the output audio +volume is given by the relation: +
output_volume = vol * input_volume + |
If vol is expressed as a decimal number followed by the string +"dB", the value represents the requested change in decibels of the +input audio power, and the output audio volume is given by the +relation: +
output_volume = 10^(vol/20) * input_volume + |
Otherwise vol is considered an expression and its evaluated +value is used for computing the output audio volume according to the +first relation. +
+Default value for vol is 1.0. +
+ +volume=0.5 + |
The above example is equivalent to: +
volume=1/2 + |
volume=-12dB + |
Below is a description of the currently available audio sources. +
+ +Buffer audio frames, and make them available to the filter chain. +
+This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/asrc_abuffer.h’. +
+It accepts the following mandatory parameters: +sample_rate:sample_fmt:channel_layout:packing +
+The sample rate of the incoming audio buffers. +
+The sample format of the incoming audio buffers. +Either a sample format name or its corresponging integer representation from +the enum AVSampleFormat in ‘libavutil/samplefmt.h’ +
+The channel layout of the incoming audio buffers. +Either a channel layout name from channel_layout_map in +‘libavutil/audioconvert.c’ or its corresponding integer representation +from the AV_CH_LAYOUT_* macros in ‘libavutil/audioconvert.h’ +
+Either "packed" or "planar", or their integer representation: 0 or 1 +respectively. +
+For example: +
abuffer=44100:s16:stereo:planar + |
will instruct the source to accept planar 16bit signed stereo at 44100Hz. +Since the sample format with name "s16" corresponds to the number +1 and the "stereo" channel layout corresponds to the value 3, this is +equivalent to: +
abuffer=44100:1:3:1 + |
Generate an audio signal specified by an expression. +
+This source accepts in input one or more expressions (one for each +channel), which are evaluated and used to generate a corresponding +audio signal. +
+It accepts the syntax: exprs[::options]. +exprs is a list of expressions separated by ":", one for each +separate channel. The output channel layout depends on the number of +provided expressions, up to 8 channels are supported. +
+options is an optional sequence of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Set the minimum duration of the sourced audio. See the function
+av_parse_time() for the accepted format.
+Note that the resulting duration may be greater than the specified
+duration, as the generated audio is always cut at the end of a
+complete frame.
+
If not specified, or the expressed duration is negative, the audio is +supposed to be generated forever. +
+Set the number of samples per channel per each output frame, +default to 1024. +
+Specify the sample rate, default to 44100. +
Each expression in exprs can contain the following constants: +
+number of the evaluated sample, starting from 0 +
+time of the evaluated sample expressed in seconds, starting from 0 +
+sample rate +
+aevalsrc=0 + |
aevalsrc="sin(440*2*PI*t)::s=8000" + |
aevalsrc="-2+random(0)" + |
aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)" + |
aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)" + |
Read an audio stream from a movie container. +
+It accepts the syntax: movie_name[:options] where +movie_name is the name of the resource to read (not necessarily +a file but also a device or a stream accessed through some protocol), +and options is an optional sequence of key=value +pairs, separated by ":". +
+The description of the accepted options follows. +
+Specify the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +
+Specify the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+av_strtod so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+
Specify the index of the audio stream to read. If the value is -1, +the best suited audio stream will be automatically selected. Default +value is "-1". +
+Null audio source, return unprocessed audio frames. It is mainly useful +as a template and to be employed in analysis / debugging tools, or as +the source for filters which ignore the input data (for example the sox +synth filter). +
+It accepts an optional sequence of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Specify the sample rate, and defaults to 44100. +
+Specify the channel layout, and can be either an integer or a string +representing a channel layout. The default value of channel_layout +is "stereo". +
+Check the channel_layout_map definition in +‘libavcodec/audioconvert.c’ for the mapping between strings and +channel layout values. +
+Set the number of samples per requested frames. +
+Follow some examples: +
# set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO. +anullsrc=r=48000:cl=4 + +# same as +anullsrc=r=48000:cl=mono + |
Below is a description of the currently available audio sinks. +
+ +Buffer audio frames, and make them available to the end of filter chain. +
+This sink is mainly intended for programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’. +
+It requires a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to avfilter_init_filter for initialization.
+
Null audio sink, do absolutely nothing with the input audio. It is +mainly useful as a template and to be employed in analysis / debugging +tools. +
+ + +When you configure your FFmpeg build, you can disable any of the
+existing filters using --disable-filters.
+The configure output will show the video filters included in your
+build.
+
Below is a description of the currently available video filters. +
+ +Draw ASS (Advanced Substation Alpha) subtitles on top of input video +using the libass library. +
+To enable compilation of this filter you need to configure FFmpeg with
+--enable-libass.
+
This filter accepts in input the name of the ass file to render. +
+For example, to render the file ‘sub.ass’ on top of the input +video, use the command: +
ass=sub.ass + |
Detect frames that are (almost) completely black. Can be useful to +detect chapter transitions or commercials. Output lines consist of +the frame number of the detected frame, the percentage of blackness, +the position in the file if known or -1 and the timestamp in seconds. +
+In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +
+The filter accepts the syntax: +
blackframe[=amount:[threshold]] + |
amount is the percentage of the pixels that have to be below the +threshold, and defaults to 98. +
+threshold is the threshold below which a pixel value is +considered black, and defaults to 32. +
+ +Apply boxblur algorithm to the input video. +
+This filter accepts the parameters: +luma_radius:luma_power:chroma_radius:chroma_power:alpha_radius:alpha_power +
+Chroma and alpha parameters are optional, if not specified they default +to the corresponding values set for luma_radius and +luma_power. +
+luma_radius, chroma_radius, and alpha_radius represent +the radius in pixels of the box used for blurring the corresponding +input plane. They are expressions, and can contain the following +constants: +
the input width and height in pixels +
+the input chroma image width and height in pixels +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
The radius must be a non-negative number, and must not be greater than
+the value of the expression min(w,h)/2 for the luma and alpha planes,
+and of min(cw,ch)/2 for the chroma planes.
+
luma_power, chroma_power, and alpha_power represent +how many times the boxblur filter is applied to the corresponding +plane. +
+Some examples follow: +
+boxblur=2:1 + |
boxblur=2:1:0:0:0:0 + |
boxblur=min(h\,w)/10:1:min(cw\,ch)/10:1 + |
Copy the input source unchanged to the output. Mainly useful for +testing purposes. +
+ +Crop the input video to out_w:out_h:x:y. +
+The parameters are expressions containing the following constants: +
+the computed values for x and y. They are evaluated for +each new frame. +
+the input width and height +
+same as in_w and in_h +
+the output (cropped) width and height +
+same as out_w and out_h +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
+the number of input frame, starting from 0 +
+the position in the file of the input frame, NAN if unknown +
+timestamp expressed in seconds, NAN if the input timestamp is unknown +
+The out_w and out_h parameters specify the expressions for +the width and height of the output (cropped) video. They are +evaluated just at the configuration of the filter. +
+The default value of out_w is "in_w", and the default value of +out_h is "in_h". +
+The expression for out_w may depend on the value of out_h, +and the expression for out_h may depend on out_w, but they +cannot depend on x and y, as x and y are +evaluated after out_w and out_h. +
+The x and y parameters specify the expressions for the +position of the top-left corner of the output (non-cropped) area. They +are evaluated for each frame. If the evaluated value is not valid, it +is approximated to the nearest valid value. +
+The default value of x is "(in_w-out_w)/2", and the default +value for y is "(in_h-out_h)/2", which set the cropped area at +the center of the input image. +
+The expression for x may depend on y, and the expression +for y may depend on x. +
+Follow some examples: +
# crop the central input area with size 100x100 +crop=100:100 + +# crop the central input area with size 2/3 of the input video +"crop=2/3*in_w:2/3*in_h" + +# crop the input video central square +crop=in_h + +# delimit the rectangle with the top-left corner placed at position +# 100:100 and the right-bottom corner corresponding to the right-bottom +# corner of the input image. +crop=in_w-100:in_h-100:100:100 + +# crop 10 pixels from the left and right borders, and 20 pixels from +# the top and bottom borders +"crop=in_w-2*10:in_h-2*20" + +# keep only the bottom right quarter of the input image +"crop=in_w/2:in_h/2:in_w/2:in_h/2" + +# crop height for getting Greek harmony +"crop=in_w:1/PHI*in_w" + +# trembling effect +"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" + +# erratic camera effect depending on timestamp +"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)" + +# set x depending on the value of y +"crop=in_w/2:in_h/2:y:10+10*sin(n/10)" + |
Auto-detect crop size. +
+Calculate necessary cropping parameters and prints the recommended +parameters through the logging system. The detected dimensions +correspond to the non-black area of the input video. +
+It accepts the syntax: +
cropdetect[=limit[:round[:reset]]] + |
Threshold, which can be optionally specified from nothing (0) to +everything (255), defaults to 24. +
+Value which the width/height should be divisible by, defaults to +16. The offset is automatically adjusted to center the video. Use 2 to +get only even dimensions (needed for 4:2:2 video). 16 is best when +encoding to most video codecs. +
+Counter that determines after how many frames cropdetect will reset +the previously detected largest video area and start over to detect +the current optimal crop area. Defaults to 0. +
+This can be useful when channel logos distort the video area. 0 +indicates never reset and return the largest area encountered during +playback. +
Suppress a TV station logo by a simple interpolation of the surrounding +pixels. Just set a rectangle covering the logo and watch it disappear +(and sometimes something even uglier appear - your mileage may vary). +
+The filter accepts parameters as a string of the form +"x:y:w:h:band", or as a list of +key=value pairs, separated by ":". +
+The description of the accepted parameters follows. +
+Specify the top left corner coordinates of the logo. They must be +specified. +
+Specify the width and height of the logo to clear. They must be +specified. +
+Specify the thickness of the fuzzy edge of the rectangle (added to +w and h). The default value is 4. +
+When set to 1, a green rectangle is drawn on the screen to simplify +finding the right x, y, w, h parameters, and +band is set to 4. The default value is 0. +
+Some examples follow. +
+delogo=0:0:100:77:10 + |
delogo=x=0:y=0:w=100:h=77:band=10 + |
Attempt to fix small changes in horizontal and/or vertical shift. This +filter helps remove camera shake from hand-holding a camera, bumping a +tripod, moving on a vehicle, etc. +
+The filter accepts parameters as a string of the form +"x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename" +
+A description of the accepted parameters follows. +
+Specify a rectangular area where to limit the search for motion +vectors. +If desired the search for motion vectors can be limited to a +rectangular area of the frame defined by its top left corner, width +and height. These parameters have the same meaning as the drawbox +filter which can be used to visualise the position of the bounding +box. +
+This is useful when simultaneous movement of subjects within the frame +might be confused for camera motion by the motion vector search. +
+If any or all of x, y, w and h are set to -1 +then the full frame is used. This allows later options to be set +without specifying the bounding box for the motion vector search. +
+Default - search the whole frame. +
+Specify the maximum extent of movement in x and y directions in the +range 0-64 pixels. Default 16. +
+Specify how to generate pixels to fill blanks at the edge of the +frame. An integer from 0 to 3 as follows: +
Fill zeroes at blank locations +
Original image at blank locations +
Extruded edge value at blank locations +
Mirrored edge at blank locations +
The default setting is mirror edge at blank locations. +
+Specify the blocksize to use for motion search. Range 4-128 pixels, +default 8. +
+Specify the contrast threshold for blocks. Only blocks with more than +the specified contrast (difference between darkest and lightest +pixels) will be considered. Range 1-255, default 125. +
+Specify the search strategy 0 = exhaustive search, 1 = less exhaustive +search. Default - exhaustive search. +
+If set then a detailed log of the motion search is written to the +specified file. +
+Draw a colored box on the input image. +
+It accepts the syntax: +
drawbox=x:y:width:height:color + |
Specify the top left corner coordinates of the box. Default to 0. +
+Specify the width and height of the box, if 0 they are interpreted as +the input width and height. Default to 0. +
+Specify the color of the box to write, it can be the name of a color +(case insensitive match) or a 0xRRGGBB[AA] sequence. +
Follow some examples: +
# draw a black box around the edge of the input image +drawbox + +# draw a box with color red and an opacity of 50% +drawbox=10:20:200:60:red@0.5" + |
Draw text string or text from specified file on top of video using the +libfreetype library. +
+To enable compilation of this filter you need to configure FFmpeg with
+--enable-libfreetype.
+
The filter also recognizes strftime() sequences in the provided text +and expands them accordingly. Check the documentation of strftime(). +
+The filter accepts parameters as a list of key=value pairs, +separated by ":". +
+The description of the accepted parameters follows. +
+The font file to be used for drawing text. Path must be included. +This parameter is mandatory. +
+The text string to be drawn. The text must be a sequence of UTF-8 +encoded characters. +This parameter is mandatory if no file is specified with the parameter +textfile. +
+A text file containing text to be drawn. The text must be a sequence +of UTF-8 encoded characters. +
+This parameter is mandatory if no text string is specified with the +parameter text. +
+If both text and textfile are specified, an error is thrown. +
+The expressions which specify the offsets where text will be drawn +within the video frame. They are relative to the top/left border of the +output image. +
+The default value of x and y is "0". +
+See below for the list of accepted constants. +
+The font size to be used for drawing text. +The default value of fontsize is 16. +
+The color to be used for drawing fonts. +Either a string (e.g. "red") or in 0xRRGGBB[AA] format +(e.g. "0xff000033"), possibly followed by an alpha specifier. +The default value of fontcolor is "black". +
+The color to be used for drawing box around text. +Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format +(e.g. "0xff00ff"), possibly followed by an alpha specifier. +The default value of boxcolor is "white". +
+Used to draw a box around text using background color. +Value should be either 1 (enable) or 0 (disable). +The default value of box is 0. +
+The x and y offsets for the text shadow position with respect to the +position of the text. They can be either positive or negative +values. Default value for both is "0". +
+The color to be used for drawing a shadow behind the drawn text. It +can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] +form (e.g. "0xff00ff"), possibly followed by an alpha specifier. +The default value of shadowcolor is "black". +
+Flags to be used for loading the fonts. +
+The flags map the corresponding flags supported by libfreetype, and are +a combination of the following values: +
Default value is "render". +
+For more information consult the documentation for the FT_LOAD_* +libfreetype flags. +
+The size in number of spaces to use for rendering the tab. +Default value is 4. +
The parameters for x and y are expressions containing the +following constants: +
+the input width and height +
+the width of the rendered text +
+the height of the rendered text +
+the height of each text line +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (w / h) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
+maximum glyph width, that is the maximum width for all the glyphs +contained in the rendered text +
+maximum glyph height, that is the maximum height for all the glyphs +contained in the rendered text, it is equivalent to ascent - +descent. +
+the maximum distance from the baseline to the highest/upper grid +coordinate used to place a glyph outline point, for all the rendered +glyphs. +It is a positive value, due to the grid’s orientation with the Y axis +upwards. +
+the maximum distance from the baseline to the lowest grid coordinate +used to place a glyph outline point, for all the rendered glyphs. +This is a negative value, due to the grid’s orientation, with the Y axis +upwards. +
+the number of input frame, starting from 0 +
+timestamp expressed in seconds, NAN if the input timestamp is unknown +
+initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used
+with or without text parameter. rate option must be specified.
+Note that timecode options are not effective if FFmpeg is build with
+--disable-avcodec.
+
frame rate (timecode only) +
Some examples follow. +
+drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'" + |
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\ + x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2" + |
Note that the double quotes are not necessary if spaces are not used +within the parameter list. +
+drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2" + |
drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t + |
drawtext=fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t" + |
drawtext=fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent + |
For more information about libfreetype, check: +http://www.freetype.org/. +
+ +Apply fade-in/out effect to input video. +
+It accepts the parameters: +type:start_frame:nb_frames[:options] +
+type specifies if the effect type, can be either "in" for +fade-in, or "out" for a fade-out effect. +
+start_frame specifies the number of the start frame for starting +to apply the fade effect. +
+nb_frames specifies the number of frames for which the fade +effect has to last. At the end of the fade-in effect the output video +will have the same intensity as the input video, at the end of the +fade-out transition the output video will be completely black. +
+options is an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+See type. +
+See start_frame. +
+See nb_frames. +
+If set to 1, fade only alpha channel, if one exists on the input. +Default value is 0. +
A few usage examples follow, usable too as test scenarios. +
# fade in first 30 frames of video +fade=in:0:30 + +# fade out last 45 frames of a 200-frame video +fade=out:155:45 + +# fade in first 25 frames and fade out last 25 frames of a 1000-frame video +fade=in:0:25, fade=out:975:25 + +# make first 5 frames black, then fade in from frame 5-24 +fade=in:5:20 + +# fade in alpha over first 25 frames of video +fade=in:0:25:alpha=1 + |
Transform the field order of the input video. +
+It accepts one parameter which specifies the required field order that +the input interlaced video will be transformed to. The parameter can +assume one of the following values: +
+output bottom field first +
output top field first +
Default value is "tff". +
+Transformation is achieved by shifting the picture content up or down +by one line, and filling the remaining line with appropriate picture content. +This method is consistent with most broadcast field order converters. +
+If the input video is not flagged as being interlaced, or it is already +flagged as being of the required output field order then this filter does +not alter the incoming video. +
+This filter is very useful when converting to or from PAL DV material, +which is bottom field first. +
+For example: +
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv + |
Buffer input images and send them when they are requested. +
+This filter is mainly useful when auto-inserted by the libavfilter +framework. +
+The filter does not take parameters. +
+ +Convert the input video to one of the specified pixel formats. +Libavfilter will try to pick one that is supported for the input to +the next filter. +
+The filter accepts a list of pixel format names, separated by ":", +for example "yuv420p:monow:rgb24". +
+Some examples follow: +
# convert the input video to the format "yuv420p" +format=yuv420p + +# convert the input video to any of the formats in the list +format=yuv420p:yuv444p:yuv410p + |
Apply a frei0r effect to the input video. +
+To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with --enable-frei0r.
+
The filter supports the syntax: +
filter_name[{:|=}param1:param2:...:paramN]
+ |
filter_name is the name to the frei0r effect to load. If the
+environment variable FREI0R_PATH is defined, the frei0r effect
+is searched in each one of the directories specified by the colon
+separated list in FREIOR_PATH, otherwise in the standard frei0r
+paths, which are in this order: ‘HOME/.frei0r-1/lib/’,
+‘/usr/local/lib/frei0r-1/’, ‘/usr/lib/frei0r-1/’.
+
param1, param2, ... , paramN specify the parameters +for the frei0r effect. +
+A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+R/G/B, R, G, and B being float
+numbers from 0.0 to 1.0) or by an av_parse_color() color
+description), a position (specified by the syntax X/Y,
+X and Y being float numbers) and a string.
+
The number and kind of parameters depend on the loaded effect. If an +effect parameter is not specified the default value is set. +
+Some examples follow: +
# apply the distort0r effect, set the first two double parameters +frei0r=distort0r:0.5:0.01 + +# apply the colordistance effect, takes a color as first parameter +frei0r=colordistance:0.2/0.3/0.4 +frei0r=colordistance:violet +frei0r=colordistance:0x112233 + +# apply the perspective effect, specify the top left and top right +# image positions +frei0r=perspective:0.2/0.2:0.8/0.2 + |
For more information see: +http://piksel.org/frei0r +
+ +Fix the banding artifacts that are sometimes introduced into nearly flat +regions by truncation to 8bit color depth. +Interpolate the gradients that should go where the bands are, and +dither them. +
+This filter is designed for playback only. Do not use it prior to +lossy compression, because compression tends to lose the dither and +bring back the bands. +
+The filter takes two optional parameters, separated by ’:’: +strength:radius +
+strength is the maximum amount by which the filter will change +any one pixel. Also the threshold for detecting nearly flat +regions. Acceptable values range from .51 to 255, default value is +1.2, out-of-range values will be clipped to the valid range. +
+radius is the neighborhood to fit the gradient to. A larger +radius makes for smoother gradients, but also prevents the filter from +modifying the pixels near detailed regions. Acceptable values are +8-32, default value is 16, out-of-range values will be clipped to the +valid range. +
+# default parameters +gradfun=1.2:16 + +# omitting radius +gradfun=1.2 + |
Flip the input video horizontally. +
+For example to horizontally flip the input video with ffmpeg:
+
ffmpeg -i in.avi -vf "hflip" out.avi + |
High precision/quality 3d denoise filter. This filter aims to reduce +image noise producing smooth images and making still images really +still. It should enhance compressibility. +
+It accepts the following optional parameters: +luma_spatial:chroma_spatial:luma_tmp:chroma_tmp +
+a non-negative float number which specifies spatial luma strength, +defaults to 4.0 +
+a non-negative float number which specifies spatial chroma strength, +defaults to 3.0*luma_spatial/4.0 +
+a float number which specifies luma temporal strength, defaults to +6.0*luma_spatial/4.0 +
+a float number which specifies chroma temporal strength, defaults to +luma_tmp*chroma_spatial/luma_spatial +
Compute a look-up table for binding each pixel component input value +to an output value, and apply it to input video. +
+lutyuv applies a lookup table to a YUV input video, lutrgb +to an RGB input video. +
+These filters accept in input a ":"-separated list of options, which +specify the expressions used for computing the lookup table for the +corresponding pixel component values. +
+The lut filter requires either YUV or RGB pixel formats in +input, and accepts the options: +
first pixel component +
second pixel component +
third pixel component +
fourth pixel component, corresponds to the alpha component +
The exact component associated to each option depends on the format in +input. +
+The lutrgb filter requires RGB pixel formats in input, and +accepts the options: +
red component +
green component +
blue component +
alpha component +
The lutyuv filter requires YUV pixel formats in input, and +accepts the options: +
Y/luminance component +
U/Cb component +
V/Cr component +
alpha component +
The expressions can contain the following constants and functions: +
+the input width and height +
+input value for the pixel component +
+the input value clipped in the minval-maxval range +
+maximum value for the pixel component +
+minimum value for the pixel component +
+the negated value for the pixel component value clipped in the +minval-maxval range , it corresponds to the expression +"maxval-clipval+minval" +
+the computed value in val clipped in the +minval-maxval range +
+the computed gamma correction value of the pixel component value +clipped in the minval-maxval range, corresponds to the +expression +"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" +
+All expressions default to "val". +
+Some examples follow: +
# negate input video +lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val" +lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" + +# the above is the same as +lutrgb="r=negval:g=negval:b=negval" +lutyuv="y=negval:u=negval:v=negval" + +# negate luminance +lutyuv=y=negval + +# remove chroma components, turns the video into a graytone image +lutyuv="u=128:v=128" + +# apply a luma burning effect +lutyuv="y=2*val" + +# remove green and blue components +lutrgb="g=0:b=0" + +# set a constant alpha channel value on input +format=rgba,lutrgb=a="maxval-minval/2" + +# correct luminance gamma by a 0.5 factor +lutyuv=y=gammaval(0.5) + |
Apply an MPlayer filter to the input video. +
+This filter provides a wrapper around most of the filters of +MPlayer/MEncoder. +
+This wrapper is considered experimental. Some of the wrapped filters +may not work properly and we may drop support for them, as they will +be implemented natively into FFmpeg. Thus you should avoid +depending on them when writing portable scripts. +
+The filters accepts the parameters: +filter_name[:=]filter_params +
+filter_name is the name of a supported MPlayer filter, +filter_params is a string containing the parameters accepted by +the named filter. +
+The list of the currently supported filters follows: +
The parameter syntax and behavior for the listed filters are the same +of the corresponding MPlayer filters. For detailed instructions check +the "VIDEO FILTERS" section in the MPlayer manual. +
+Some examples follow: +
# remove a logo by interpolating the surrounding pixels +mp=delogo=200:200:80:20:1 + +# adjust gamma, brightness, contrast +mp=eq2=1.0:2:0.5 + +# tweak hue and saturation +mp=hue=100:-10 + |
See also mplayer(1), http://www.mplayerhq.hu/. +
+ +Negate input video. +
+This filter accepts an integer in input, if non-zero it negates the +alpha component (if available). The default value in input is 0. +
+ +Force libavfilter not to use any of the specified pixel formats for the +input to the next filter. +
+The filter accepts a list of pixel format names, separated by ":", +for example "yuv420p:monow:rgb24". +
+Some examples follow: +
# force libavfilter to use a format different from "yuv420p" for the +# input to the vflip filter +noformat=yuv420p,vflip + +# convert the input video to any of the formats not contained in the list +noformat=yuv420p:yuv444p:yuv410p + |
Pass the video source unchanged to the output. +
+ +Apply video transform using libopencv. +
+To enable this filter install libopencv library and headers and
+configure FFmpeg with --enable-libopencv.
+
The filter takes the parameters: filter_name{:=}filter_params. +
+filter_name is the name of the libopencv filter to apply. +
+filter_params specifies the parameters to pass to the libopencv +filter. If not specified the default values are assumed. +
+Refer to the official libopencv documentation for more precise +information: +http://opencv.willowgarage.com/documentation/c/image_filtering.html +
+Follows the list of supported libopencv filters. +
+ +Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function cvDilate.
+
It accepts the parameters: struct_el:nb_iterations. +
+struct_el represents a structuring element, and has the syntax: +colsxrows+anchor_xxanchor_y/shape +
+cols and rows represent the number of columns and rows of +the structuring element, anchor_x and anchor_y the anchor +point, and shape the shape for the structuring element, and +can be one of the values "rect", "cross", "ellipse", "custom". +
+If the value for shape is "custom", it must be followed by a +string of the form "=filename". The file with name +filename is assumed to represent a binary image, with each +printable character corresponding to a bright pixel. When a custom +shape is used, cols and rows are ignored, the number +or columns and rows of the read file are assumed instead. +
+The default value for struct_el is "3x3+0x0/rect". +
+nb_iterations specifies the number of times the transform is +applied to the image, and defaults to 1. +
+Follow some example: +
# use the default values +ocv=dilate + +# dilate using a structuring element with a 5x5 cross, iterate two times +ocv=dilate=5x5+2x2/cross:2 + +# read the shape from the file diamond.shape, iterate two times +# the file diamond.shape may contain a pattern of characters like this: +# * +# *** +# ***** +# *** +# * +# the specified cols and rows are ignored (but not the anchor point coordinates) +ocv=0x0+2x2/custom=diamond.shape:2 + |
Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function cvErode.
+
The filter accepts the parameters: struct_el:nb_iterations, +with the same syntax and semantics as the dilate filter. +
+ +Smooth the input video. +
+The filter takes the following parameters: +type:param1:param2:param3:param4. +
+type is the type of smooth filter to apply, and can be one of +the following values: "blur", "blur_no_scale", "median", "gaussian", +"bilateral". The default value is "gaussian". +
+param1, param2, param3, and param4 are +parameters whose meanings depend on smooth type. param1 and +param2 accept integer positive values or 0, param3 and +param4 accept float values. +
+The default value for param1 is 3, the default value for the +other parameters is 0. +
+These parameters correspond to the parameters assigned to the
+libopencv function cvSmooth.
+
Overlay one video on top of another. +
+It takes two inputs and one output, the first input is the "main" +video on which the second input is overlayed. +
+It accepts the parameters: x:y[:options]. +
+x is the x coordinate of the overlayed video on the main video, +y is the y coordinate. x and y are expressions containing +the following parameters: +
+main input width and height +
+same as main_w and main_h +
+overlay input width and height +
+same as overlay_w and overlay_h +
options is an optional list of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+If set to 1, force the filter to accept inputs in the RGB +color space. Default value is 0. +
Be aware that frames are taken from each input video in timestamp +order, hence, if their initial timestamps differ, it is a a good idea +to pass the two inputs through a setpts=PTS-STARTPTS filter to +have them begin in the same zero timestamp, as it does the example for +the movie filter. +
+Follow some examples: +
# draw the overlay at 10 pixels from the bottom right +# corner of the main video. +overlay=main_w-overlay_w-10:main_h-overlay_h-10 + +# insert a transparent PNG logo in the bottom left corner of the input +movie=logo.png [logo]; +[in][logo] overlay=10:main_h-overlay_h-10 [out] + +# insert 2 different transparent PNG logos (second logo on bottom +# right corner): +movie=logo1.png [logo1]; +movie=logo2.png [logo2]; +[in][logo1] overlay=10:H-h-10 [in+logo1]; +[in+logo1][logo2] overlay=W-w-10:H-h-10 [out] + +# add a transparent color layer on top of the main video, +# WxH specifies the size of the main input to the overlay filter +color=red.3:WxH [over]; [in][over] overlay [out] + |
You can chain together more overlays but the efficiency of such +approach is yet to be tested. +
+ +Add paddings to the input image, and places the original input at the +given coordinates x, y. +
+It accepts the following parameters: +width:height:x:y:color. +
+The parameters width, height, x, and y are +expressions containing the following constants: +
+the input video width and height +
+same as in_w and in_h +
+the output width and height, that is the size of the padded area as +specified by the width and height expressions +
+same as out_w and out_h +
+x and y offsets as specified by the x and y +expressions, or NAN if not yet specified +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
Follows the description of the accepted parameters. +
+Specify the size of the output image with the paddings added. If the +value for width or height is 0, the corresponding input size +is used for the output. +
+The width expression can reference the value set by the +height expression, and vice versa. +
+The default value of width and height is 0. +
+Specify the offsets where to place the input image in the padded area +with respect to the top/left border of the output image. +
+The x expression can reference the value set by the y +expression, and vice versa. +
+The default value of x and y is 0. +
+Specify the color of the padded area, it can be the name of a color +(case insensitive match) or a 0xRRGGBB[AA] sequence. +
+The default value of color is "black". +
+Some examples follow: +
+# Add paddings with color "violet" to the input video. Output video +# size is 640x480, the top-left corner of the input video is placed at +# column 0, row 40. +pad=640:480:0:40:violet + +# pad the input to get an output with dimensions increased bt 3/2, +# and put the input video at the center of the padded area +pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2" + +# pad the input to get a squared output with size equal to the maximum +# value between the input width and height, and put the input video at +# the center of the padded area +pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2" + +# pad the input to get a final w/h ratio of 16:9 +pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" + +# for anamorphic video, in order to set the output display aspect ratio, +# it is necessary to use sar in the expression, according to the relation: +# (ih * X / ih) * sar = output_dar +# X = output_dar / sar +pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2" + +# double output size and put the input video in the bottom-right +# corner of the output padded area +pad="2*iw:2*ih:ow-iw:oh-ih" + |
Pixel format descriptor test filter, mainly useful for internal +testing. The output video should be equal to the input video. +
+For example: +
format=monow, pixdesctest + |
can be used to test the monowhite pixel format descriptor definition. +
+ +Scale the input video to width:height[:interl={1|-1}] and/or convert the image format. +
+The parameters width and height are expressions containing +the following constants: +
+the input width and height +
+same as in_w and in_h +
+the output (cropped) width and height +
+same as out_w and out_h +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
If the input image format is different from the format requested by +the next filter, the scale filter will convert the input to the +requested format. +
+If the value for width or height is 0, the respective input +size is used for the output. +
+If the value for width or height is -1, the scale filter will +use, for the respective output size, a value that maintains the aspect +ratio of the input image. +
+The default value of width and height is 0. +
+Valid values for the optional parameter interl are: +
+force interlaced aware scaling +
+select interlaced aware scaling depending on whether the source frames +are flagged as interlaced or not +
Some examples follow: +
# scale the input video to a size of 200x100. +scale=200:100 + +# scale the input to 2x +scale=2*iw:2*ih +# the above is the same as +scale=2*in_w:2*in_h + +# scale the input to half size +scale=iw/2:ih/2 + +# increase the width, and set the height to the same size +scale=3/2*iw:ow + +# seek for Greek harmony +scale=iw:1/PHI*iw +scale=ih*PHI:ih + +# increase the height, and set the width to 3/2 of the height +scale=3/2*oh:3/5*ih + +# increase the size, but make the size a multiple of the chroma +scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub" + +# increase the width to a maximum of 500 pixels, keep the same input aspect ratio +scale='min(500\, iw*3/2):-1' + |
Select frames to pass in output. +
+It accepts in input an expression, which is evaluated for each input +frame. If the expression is evaluated to a non-zero value, the frame +is selected and passed to the output, otherwise it is discarded. +
+The expression can contain the following constants: +
+the sequential number of the filtered frame, starting from 0 +
+the sequential number of the selected frame, starting from 0 +
+the sequential number of the last selected frame, NAN if undefined +
+timebase of the input timestamps +
+the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in TB units, NAN if undefined +
+the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +
+the PTS of the previously filtered video frame, NAN if undefined +
+the PTS of the last previously filtered video frame, NAN if undefined +
+the PTS of the last previously selected video frame, NAN if undefined +
+the PTS of the first video frame in the video, NAN if undefined +
+the time of the first video frame in the video, NAN if undefined +
+the type of the filtered frame, can assume one of the following +values: +
the frame interlace type, can assume one of the following values: +
the frame is progressive (not interlaced) +
the frame is top-field-first +
the frame is bottom-field-first +
1 if the filtered frame is a key-frame, 0 otherwise +
+the position in the file of the filtered frame, -1 if the information +is not available (e.g. for synthetic video) +
The default value of the select expression is "1". +
+Some examples follow: +
+# select all frames in input +select + +# the above is the same as: +select=1 + +# skip all frames: +select=0 + +# select only I-frames +select='eq(pict_type\,I)' + +# select one frame every 100 +select='not(mod(n\,100))' + +# select only frames contained in the 10-20 time interval +select='gte(t\,10)*lte(t\,20)' + +# select only I frames contained in the 10-20 time interval +select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)' + +# select frames with a minimum distance of 10 seconds +select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)' + |
Set the Display Aspect Ratio for the filter output video. +
+This is done by changing the specified Sample (aka Pixel) Aspect +Ratio, according to the following equation: +DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR +
+Keep in mind that this filter does not modify the pixel dimensions of +the video frame. Also the display aspect ratio set by this filter may +be changed by later filters in the filterchain, e.g. in case of +scaling or if another "setdar" or a "setsar" filter is applied. +
+The filter accepts a parameter string which represents the wanted +display aspect ratio. +The parameter can be a floating point number string, or an expression +of the form num:den, where num and den are the +numerator and denominator of the aspect ratio. +If the parameter is not specified, it is assumed the value "0:1". +
+For example to change the display aspect ratio to 16:9, specify: +
setdar=16:9 +# the above is equivalent to +setdar=1.77777 + |
See also the setsar filter documentation. +
+ +Change the PTS (presentation timestamp) of the input video frames. +
+Accept in input an expression evaluated through the eval API, which +can contain the following constants: +
+the presentation timestamp in input +
+the count of the input frame, starting from 0. +
+the PTS of the first video frame +
+tell if the current frame is interlaced +
+original position in the file of the frame, or undefined if undefined +for the current frame +
+previous input PTS +
+previous output PTS +
+Some examples follow: +
+# start counting PTS from zero +setpts=PTS-STARTPTS + +# fast motion +setpts=0.5*PTS + +# slow motion +setpts=2.0*PTS + +# fixed rate 25 fps +setpts=N/(25*TB) + +# fixed rate 25 fps with some jitter +setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))' + |
Set the Sample (aka Pixel) Aspect Ratio for the filter output video. +
+Note that as a consequence of the application of this filter, the +output display aspect ratio will change according to the following +equation: +DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR +
+Keep in mind that the sample aspect ratio set by this filter may be +changed by later filters in the filterchain, e.g. if another "setsar" +or a "setdar" filter is applied. +
+The filter accepts a parameter string which represents the wanted +sample aspect ratio. +The parameter can be a floating point number string, or an expression +of the form num:den, where num and den are the +numerator and denominator of the aspect ratio. +If the parameter is not specified, it is assumed the value "0:1". +
+For example to change the sample aspect ratio to 10:11, specify: +
setsar=10:11 + |
Set the timebase to use for the output frames timestamps. +It is mainly useful for testing timebase configuration. +
+It accepts in input an arithmetic expression representing a rational. +The expression can contain the constants "AVTB" (the +default timebase), and "intb" (the input timebase). +
+The default value for the input is "intb". +
+Follow some examples. +
+# set the timebase to 1/25 +settb=1/25 + +# set the timebase to 1/10 +settb=0.1 + +#set the timebase to 1001/1000 +settb=1+0.001 + +#set the timebase to 2*intb +settb=2*intb + +#set the default timebase value +settb=AVTB + |
Show a line containing various information for each input video frame. +The input video is not modified. +
+The shown line contains a sequence of key/value pairs of the form +key:value. +
+A description of each shown parameter follows: +
+sequential number of the input frame, starting from 0 +
+Presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad. +
+Presentation TimeStamp of the input frame, expressed as a number of +seconds +
+position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic video) +
+pixel format name +
+sample aspect ratio of the input frame, expressed in the form +num/den +
+size of the input frame, expressed in the form +widthxheight +
+interlaced mode ("P" for "progressive", "T" for top field first, "B" +for bottom field first) +
+1 if the frame is a key frame, 0 otherwise +
+picture type of the input frame ("I" for an I-frame, "P" for a
+P-frame, "B" for a B-frame, "?" for unknown type).
+Check also the documentation of the AVPictureType enum and of
+the av_get_picture_type_char function defined in
+‘libavutil/avutil.h’.
+
Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +
+Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, +expressed in the form "[c0 c1 c2 c3]" +
Pass the images of input video on to next video filter as multiple +slices. +
+ffmpeg -i in.avi -vf "slicify=32" out.avi + |
The filter accepts the slice height as parameter. If the parameter is +not specified it will use the default value of 16. +
+Adding this in the beginning of filter chains should make filtering +faster due to better use of the memory cache. +
+ +Pass on the input video to two outputs. Both outputs are identical to +the input video. +
+For example: +
[in] split [splitout1][splitout2]; +[splitout1] crop=100:100:0:0 [cropout]; +[splitout2] pad=200:200:100:100 [padout]; + |
will create two separate outputs from the same input, one cropped and +one padded. +
+ +Select the most representative frame in a given sequence of consecutive frames. +
+It accepts as argument the frames batch size to analyze (default N=100); +in a set of N frames, the filter will pick one of them, and then handle +the next batch of N frames until the end. +
+Since the filter keeps track of the whole frames sequence, a bigger N +value will result in a higher memory usage, so a high value is not recommended. +
+The following example extract one picture each 50 frames: +
thumbnail=50 + |
Complete example of a thumbnail creation with ffmpeg:
+
ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png + |
Perform various types of temporal field interlacing. +
+Frames are counted starting from 1, so the first input frame is +considered odd. +
+This filter accepts a single parameter specifying the mode. Available +modes are: +
+Move odd frames into the upper field, even into the lower field, +generating a double height frame at half framerate. +
+Only output even frames, odd frames are dropped, generating a frame with +unchanged height at half framerate. +
+Only output odd frames, even frames are dropped, generating a frame with +unchanged height at half framerate. +
+Expand each frame to full height, but pad alternate lines with black, +generating a frame with double height at the same input framerate. +
+Interleave the upper field from odd frames with the lower field from +even frames, generating a frame with unchanged height at half framerate. +
+Interleave the lower field from odd frames with the upper field from +even frames, generating a frame with unchanged height at half framerate. +
Default mode is 0. +
+ +Transpose rows with columns in the input video and optionally flip it. +
+It accepts a parameter representing an integer, which can assume the +values: +
+Rotate by 90 degrees counterclockwise and vertically flip (default), that is: +
L.R L.l +. . -> . . +l.r R.r + |
Rotate by 90 degrees clockwise, that is: +
L.R l.L +. . -> . . +l.r r.R + |
Rotate by 90 degrees counterclockwise, that is: +
L.R R.r +. . -> . . +l.r L.l + |
Rotate by 90 degrees clockwise and vertically flip, that is: +
L.R r.R +. . -> . . +l.r l.L + |
Sharpen or blur the input video. +
+It accepts the following parameters: +luma_msize_x:luma_msize_y:luma_amount:chroma_msize_x:chroma_msize_y:chroma_amount +
+Negative values for the amount will blur the input video, while positive +values will sharpen. All parameters are optional and default to the +equivalent of the string ’5:5:1.0:5:5:0.0’. +
+Set the luma matrix horizontal size. It can be an integer between 3 +and 13, default value is 5. +
+Set the luma matrix vertical size. It can be an integer between 3 +and 13, default value is 5. +
+Set the luma effect strength. It can be a float number between -2.0 +and 5.0, default value is 1.0. +
+Set the chroma matrix horizontal size. It can be an integer between 3 +and 13, default value is 5. +
+Set the chroma matrix vertical size. It can be an integer between 3 +and 13, default value is 5. +
+Set the chroma effect strength. It can be a float number between -2.0 +and 5.0, default value is 0.0. +
+# Strong luma sharpen effect parameters
+unsharp=7:7:2.5
+
+# Strong blur of both luma and chroma parameters
+unsharp=7:7:-2:7:7:-2
+
+# Use the default values with |
Flip the input video vertically. +
+ffmpeg -i in.avi -vf "vflip" out.avi + |
Deinterlace the input video ("yadif" means "yet another deinterlacing +filter"). +
+It accepts the optional parameters: mode:parity:auto. +
+mode specifies the interlacing mode to adopt, accepts one of the +following values: +
+output 1 frame for each frame +
output 1 frame for each field +
like 0 but skips spatial interlacing check +
like 1 but skips spatial interlacing check +
Default value is 0. +
+parity specifies the picture field parity assumed for the input +interlaced video, accepts one of the following values: +
+assume top field first +
assume bottom field first +
enable automatic detection +
Default value is -1. +If interlacing is unknown or decoder does not export this information, +top field first will be assumed. +
+auto specifies if deinterlacer should trust the interlaced flag +and only deinterlace frames marked as interlaced +
+deinterlace all frames +
only deinterlace frames marked as interlaced +
Default value is 0. +
+ + +Below is a description of the currently available video sources. +
+ +Buffer video frames, and make them available to the filter chain. +
+This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/vsrc_buffer.h’. +
+It accepts the following parameters: +width:height:pix_fmt_string:timebase_num:timebase_den:sample_aspect_ratio_num:sample_aspect_ratio.den:scale_params +
+All the parameters but scale_params need to be explicitly +defined. +
+Follows the list of the accepted parameters. +
+Specify the width and height of the buffered video frames. +
+A string representing the pixel format of the buffered video frames. +It may be a number corresponding to a pixel format, or a pixel format +name. +
+Specify numerator and denomitor of the timebase assumed by the +timestamps of the buffered frames. +
+Specify numerator and denominator of the sample aspect ratio assumed +by the video frames. +
+Specify the optional parameters to be used for the scale filter which +is automatically inserted when an input change is detected in the +input size or format. +
For example: +
buffer=320:240:yuv410p:1:24:1:1 + |
will instruct the source to accept video frames with size 320x240 and +with format "yuv410p", assuming 1/24 as the timestamps timebase and +square pixels (1:1 sample aspect ratio). +Since the pixel format with name "yuv410p" corresponds to the number 6 +(check the enum PixelFormat definition in ‘libavutil/pixfmt.h’), +this example corresponds to: +
buffer=320:240:6:1:24:1:1 + |
Create a pattern generated by an elementary cellular automaton. +
+The initial state of the cellular automaton can be defined through the +‘filename’, and ‘pattern’ options. If such options are +not specified an initial state is created randomly. +
+At each new frame a new row in the video is filled with the result of +the cellular automaton next generation. The behavior when the whole +frame is filled is defined by the ‘scroll’ option. +
+This source accepts a list of options in the form of +key=value pairs separated by ":". A description of the +accepted options follows. +
+Read the initial cellular automaton state, i.e. the starting row, from +the specified file. +In the file, each non-whitespace character is considered an alive +cell, a newline will terminate the row, and further characters in the +file will be ignored. +
+Read the initial cellular automaton state, i.e. the starting row, from +the specified string. +
+Each non-whitespace character in the string is considered an alive +cell, a newline will terminate the row, and further characters in the +string will be ignored. +
+Set the video rate, that is the number of frames generated per second. +Default is 25. +
+Set the random fill ratio for the initial cellular automaton row. It +is a floating point number value ranging from 0 to 1, defaults to +1/PHI. +
+This option is ignored when a file or a pattern is specified. +
+Set the seed for filling randomly the initial row, must be an integer +included between 0 and UINT32_MAX. If not specified, or if explicitly +set to -1, the filter will try to use a good random seed on a best +effort basis. +
+Set the cellular automaton rule, it is a number ranging from 0 to 255. +Default value is 110. +
+Set the size of the output video. +
+If ‘filename’ or ‘pattern’ is specified, the size is set +by default to the width of the specified initial state row, and the +height is set to width * PHI. +
+If ‘size’ is set, it must contain the width of the specified +pattern string, and the specified pattern will be centered in the +larger row. +
+If a filename or a pattern string is not specified, the size value +defaults to "320x518" (used for a randomly generated initial state). +
+If set to 1, scroll the output upward when all the rows in the output +have been already filled. If set to 0, the new generated row will be +written over the top row just after the bottom row is filled. +Defaults to 1. +
+If set to 1, completely fill the output with generated rows before +outputting the first frame. +This is the default behavior, for disabling set the value to 0. +
+If set to 1, stitch the left and right row edges together. +This is the default behavior, for disabling set the value to 0. +
cellauto=f=pattern:s=200x400 + |
cellauto=ratio=2/3:s=200x200 + |
cellauto=p=@:s=100x400:full=0:rule=18 + |
cellauto=p='@@ @ @@':s=100x400:full=0:rule=18 + |
Provide an uniformly colored input. +
+It accepts the following parameters: +color:frame_size:frame_rate +
+Follows the description of the accepted parameters. +
+Specify the color of the source. It can be the name of a color (case +insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an +alpha specifier. The default value is "black". +
+Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. The +default value is "320x240". +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+For example the following graph description will generate a red source +with an opacity of 0.2, with size "qcif" and a frame rate of 10 +frames per second, which will be overlayed over the source connected +to the pad with identifier "in". +
+"color=red@0.2:qcif:10 [color]; [in][color] overlay [out]" + |
Read a video stream from a movie container. +
+It accepts the syntax: movie_name[:options] where +movie_name is the name of the resource to read (not necessarily +a file but also a device or a stream accessed through some protocol), +and options is an optional sequence of key=value +pairs, separated by ":". +
+The description of the accepted options follows. +
+Specifies the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +
+Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+av_strtod so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+
Specifies the index of the video stream to read. If the value is -1, +the best suited video stream will be automatically selected. Default +value is "-1". +
+This filter allows to overlay a second video on top of main input of +a filtergraph as shown in this graph: +
input -----------> deltapts0 --> overlay --> output + ^ + | +movie --> scale--> deltapts1 -------+ + |
Some examples follow: +
# skip 3.2 seconds from the start of the avi file in.avi, and overlay it +# on top of the input labelled as "in". +movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [movie]; +[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out] + +# read from a video4linux2 device, and overlay it on top of the input +# labelled as "in" +movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [movie]; +[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out] + + |
Generate various test patterns, as generated by the MPlayer test filter. +
+The size of the generated video is fixed, and is 256x256. +This source is useful in particular for testing encoding features. +
+This source accepts an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+Set the video duration of the sourced video. The accepted syntax is: +
[-]HH[:MM[:SS[.m...]]] +[-]S+[.m...] + |
See also the function av_parse_time().
+
If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +
+Set the number or the name of the test to perform. Supported tests are: +
Default value is "all", which will cycle through the list of all tests. +
For example the following: +
testsrc=t=dc_luma + |
will generate a "dc_luma" test pattern. +
+ +Provide a frei0r source. +
+To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with --enable-frei0r.
+
The source supports the syntax: +
size:rate:src_name[{=|:}param1:param2:...:paramN]
+ |
size is the size of the video to generate, may be a string of the +form widthxheight or a frame size abbreviation. +rate is the rate of the video to generate, may be a string of +the form num/den or a frame rate abbreviation. +src_name is the name to the frei0r source to load. For more +information regarding frei0r and how to set the parameters read the +section frei0r in the description of the video filters. +
+Some examples follow: +
# generate a frei0r partik0l source with size 200x200 and frame rate 10 +# which is overlayed on the overlay filter main input +frei0r_src=200x200:10:partik0l=1234 [overlay]; [in][overlay] overlay + |
Generate a life pattern. +
+This source is based on a generalization of John Conway’s life game. +
+The sourced input represents a life grid, each pixel represents a cell +which can be in one of two possible states, alive or dead. Every cell +interacts with its eight neighbours, which are the cells that are +horizontally, vertically, or diagonally adjacent. +
+At each interaction the grid evolves according to the adopted rule, +which specifies the number of neighbor alive cells which will make a +cell stay alive or born. The ‘rule’ option allows to specify +the rule to adopt. +
+This source accepts a list of options in the form of +key=value pairs separated by ":". A description of the +accepted options follows. +
+Set the file from which to read the initial grid state. In the file, +each non-whitespace character is considered an alive cell, and newline +is used to delimit the end of each row. +
+If this option is not specified, the initial grid is generated +randomly. +
+Set the video rate, that is the number of frames generated per second. +Default is 25. +
+Set the random fill ratio for the initial random grid. It is a +floating point number value ranging from 0 to 1, defaults to 1/PHI. +It is ignored when a file is specified. +
+Set the seed for filling the initial random grid, must be an integer +included between 0 and UINT32_MAX. If not specified, or if explicitly +set to -1, the filter will try to use a good random seed on a best +effort basis. +
+Set the life rule. +
+A rule can be specified with a code of the kind "SNS/BNB", +where NS and NB are sequences of numbers in the range 0-8, +NS specifies the number of alive neighbor cells which make a +live cell stay alive, and NB the number of alive neighbor cells +which make a dead cell to become alive (i.e. to "born"). +"s" and "b" can be used in place of "S" and "B", respectively. +
+Alternatively a rule can be specified by an 18-bits integer. The 9
+high order bits are used to encode the next cell state if it is alive
+for each number of neighbor alive cells, the low order bits specify
+the rule for "borning" new cells. Higher order bits encode for an
+higher number of neighbor cells.
+For example the number 6153 = (12<<9)+9 specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+
Default value is "S23/B3", which is the original Conway’s game of life +rule, and will keep a cell alive if it has 2 or 3 neighbor alive +cells, and will born a new cell if there are three alive cells around +a dead cell. +
+Set the size of the output video. +
+If ‘filename’ is specified, the size is set by default to the +same size of the input file. If ‘size’ is set, it must contain +the size specified in the input file, and the initial grid defined in +that file is centered in the larger resulting area. +
+If a filename is not specified, the size value defaults to "320x240" +(used for a randomly generated initial grid). +
+If set to 1, stitch the left and right grid edges together, and the +top and bottom edges also. Defaults to 1. +
+Set cell mold speed. If set, a dead cell will go from ‘death_color’ to +‘mold_color’ with a step of ‘mold’. ‘mold’ can have a +value from 0 to 255. +
+Set the color of living (or new born) cells. +
+Set the color of dead cells. If ‘mold’ is set, this is the first color +used to represent a dead cell. +
+Set mold color, for definitely dead and moldy cells. +
life=f=pattern:s=300x300 + |
life=ratio=2/3:s=200x200 + |
life=rule=S14/B34 + |
ffplay:
+ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16 + |
The nullsrc source returns unprocessed video frames. It is
+mainly useful to be employed in analysis / debugging tools, or as the
+source for filters which ignore the input data.
+
The rgbtestsrc source generates an RGB test pattern useful for
+detecting RGB vs BGR issues. You should see a red, green and blue
+stripe from top to bottom.
+
The testsrc source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+
These sources accept an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. The +default value is "320x240". +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+Set the sample aspect ratio of the sourced video. +
+Set the video duration of the sourced video. The accepted syntax is: +
[-]HH[:MM[:SS[.m...]]] +[-]S+[.m...] + |
See also the function av_parse_time().
+
If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +
+Set the number of decimals to show in the timestamp, only used in the
+testsrc source.
+
The displayed timestamp value will correspond to the original +timestamp value multiplied by the power of 10 of the specified +value. Default value is 0. +
For example the following: +
testsrc=duration=5.3:size=qcif:rate=10 + |
will generate a video with a duration of 5.3 seconds, with size +176x144 and a frame rate of 10 frames per second. +
+If the input content is to be ignored, nullsrc can be used. The
+following command generates noise in the luminance plane by employing
+the mp=geq filter:
+
nullsrc=s=256x256, mp=geq=random(1)*255:128:128 + |
Below is a description of the currently available video sinks. +
+ +Buffer video frames, and make them available to the end of the filter +graph. +
+This sink is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’. +
+It does not require a string parameter in input, but you need to
+specify a pointer to a list of supported pixel formats terminated by
+-1 in the opaque parameter provided to avfilter_init_filter
+when initializing this sink.
+
Null video sink, do absolutely nothing with the input video. It is +mainly useful as a template and to be employed in analysis / debugging +tools. +
+ + +FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded +INI-like text file and then load it back using the metadata muxer/demuxer. +
+The file format is as follows: +
A ffmetadata file might look like this: +
;FFMETADATA1 +title=bike\\shed +;this is a comment +artist=FFmpeg troll team + +[CHAPTER] +TIMEBASE=1/1000 +START=0 +#chapter ends at 0:01:00 +END=60000 +title=chapter \#1 +[STREAM] +title=multi\ +line + |
ffplay [options] [‘input_file’] + |
FFplay is a very simple and portable media player using the FFmpeg +libraries and the SDL library. It is mostly used as a testbed for the +various FFmpeg APIs. +
+ +All the numerical options, if not specified otherwise, accept in input +a string representing a number, which may contain one of the +International System number postfixes, for example ’K’, ’M’, ’G’. +If ’i’ is appended after the postfix, powers of 2 are used instead of +powers of 10. The ’B’ postfix multiplies the value for 8, and can be +appended after another postfix or used alone. This allows using for +example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +
+Options which do not take arguments are boolean options, and set the +corresponding value to true. They can be set to false by prefixing +with "no" the option name, for example using "-nofoo" in the +command line will set to false the boolean option with name "foo". +
+ +Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers +are used to precisely specify which stream(s) does a given option belong to. +
+A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. -codec:a:1 ac3 option contains
+a:1 stream specifer, which matches the second audio stream. Therefore it
+would select the ac3 codec for the second audio stream.
+
A stream specifier can match several stream, the option is then applied to all
+of them. E.g. the stream specifier in -b:a 128k matches all audio
+streams.
+
An empty stream specifier matches all streams, for example -codec copy
+or -codec: copy would copy all the streams without reencoding.
+
Possible forms of stream specifiers are: +
Matches the stream with this index. E.g. -threads:1 4 would set the
+thread count for the second stream to 4.
+
stream_type is one of: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data and ’t’ for attachments. If stream_index is given, then +matches stream number stream_index of this type. Otherwise matches all +streams of this type. +
If stream_index is given, then matches stream number stream_index in +program with id program_id. Otherwise matches all streams in this program. +
These options are shared amongst the av* tools. +
+Show license. +
+Show help. +
+Show version. +
+Show available formats. +
+The fields preceding the format names have the following meanings: +
Decoding available +
Encoding available +
Show available codecs. +
+The fields preceding the codec names have the following meanings: +
Decoding available +
Encoding available +
Video/audio/subtitle codec +
Codec supports slices +
Codec supports direct rendering +
Codec can handle input truncated at random locations instead of only at frame boundaries +
Show available bitstream filters. +
+Show available protocols. +
+Show available libavfilter filters. +
+Show available pixel formats. +
+Show available sample formats. +
+Set the logging level used by the library. +loglevel is a number or a string containing one of the following values: +
By default the program logs to stderr, if coloring is supported by the
+terminal, colors are used to mark errors and warnings. Log coloring
+can be disabled setting the environment variable
+AV_LOG_FORCE_NOCOLOR or NO_COLOR, or can be forced setting
+the environment variable AV_LOG_FORCE_COLOR.
+The use of the environment variable NO_COLOR is deprecated and
+will be dropped in a following FFmpeg version.
+
Dump full command line and console output to a file named
+program-YYYYMMDD-HHMMSS.log in the current
+directory.
+This file can be useful for bug reports.
+It also implies -loglevel verbose.
+
Note: setting the environment variable FFREPORT to any value has the
+same effect.
+
These options are provided directly by the libavformat, libavdevice and +libavcodec libraries. To see the list of available AVOptions, use the +‘-help’ option. They are separated into two categories: +
These options can be set for any container, codec or device. Generic options +are listed under AVFormatContext options for containers/devices and under +AVCodecContext options for codecs. +
These options are specific to the given container, device or codec. Private +options are listed under their corresponding containers/devices/codecs. +
For example to write an ID3v2.3 header instead of a default ID3v2.4 to +an MP3 file, use the ‘id3v2_version’ private option of the MP3 +muxer: +
ffmpeg -i input.flac -id3v2_version 3 out.mp3 + |
All codec AVOptions are obviously per-stream, so the chapter on stream +specifiers applies to them +
+Note ‘-nooption’ syntax cannot be used for boolean AVOptions, +use ‘-option 0’/‘-option 1’. +
+Note2 old undocumented way of specifying per-stream AVOptions by prepending +v/a/s to the options name is now obsolete and will be removed soon. +
+ +Force displayed width. +
Force displayed height. +
Set frame size (WxH or abbreviation), needed for videos which do +not contain a header with the frame size like raw YUV. This option +has been deprecated in favor of private options, try -video_size. +
Disable audio. +
Disable video. +
Seek to a given position in seconds. +
play <duration> seconds of audio/video +
Seek by bytes. +
Disable graphical display. +
Force format. +
Set window title (default is the input filename). +
Loops movie playback <number> times. 0 means forever. +
Set the show mode to use. +Available values for mode are: +
show video +
show audio waves +
show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform) +
Default value is "video", if video is not present or cannot be played +"rdft" is automatically selected. +
+You can interactively cycle through the available show modes by +pressing the key <w>. +
+filter_graph is a description of the filter graph to apply to +the input video. +Use the option "-filters" to show all the available filters (including +also sources and sinks). +
+Read input_file. +
Set pixel format. +This option has been deprecated in favor of private options, try -pixel_format. +
Show the stream duration, the codec parameters, the current position in +the stream and the audio/video synchronisation drift. +
Work around bugs. +
Non-spec-compliant optimizations. +
Generate pts. +
Force RTP/TCP protocol usage instead of RTP/UDP. It is only meaningful +if you are streaming with the RTSP protocol. +
Set the master clock to audio (type=audio), video
+(type=video) or external (type=ext). Default is audio. The
+master clock is used to control audio-video synchronization. Most media
+players use audio as master clock, but in some cases (streaming or high
+quality broadcast) it is necessary to change that. This option is mainly
+used for debugging purposes.
+
Set the thread count. +
Select the desired audio stream number, counting from 0. The number +refers to the list of all the input audio streams. If it is greater +than the number of audio streams minus one, then the last one is +selected, if it is negative the audio playback is disabled. +
Select the desired video stream number, counting from 0. The number +refers to the list of all the input video streams. If it is greater +than the number of video streams minus one, then the last one is +selected, if it is negative the video playback is disabled. +
Select the desired subtitle stream number, counting from 0. The number +refers to the list of all the input subtitle streams. If it is greater +than the number of subtitle streams minus one, then the last one is +selected, if it is negative the subtitle rendering is disabled. +
Exit when video is done playing. +
Exit if any key is pressed. +
Exit if any mouse button is pressed. +
Force a specific decoder implementation +
Quit. +
+Toggle full screen. +
+Pause. +
+Cycle audio channel. +
+Cycle video channel. +
+Cycle subtitle channel. +
+Show audio waves. +
+Seek backward/forward 10 seconds. +
+Seek backward/forward 1 minute. +
+Seek backward/forward 10 minutes. +
+Seek to percentage in file corresponding to fraction of width. +
+When evaluating an arithmetic expression, FFmpeg uses an internal +formula evaluator, implemented through the ‘libavutil/eval.h’ +interface. +
+An expression may contain unary, binary operators, constants, and +functions. +
+Two expressions expr1 and expr2 can be combined to form +another expression "expr1;expr2". +expr1 and expr2 are evaluated in turn, and the new +expression evaluates to the value of expr2. +
+The following binary operators are available: +, -,
+*, /, ^.
+
The following unary operators are available: +, -.
+
The following functions are available: +
Return 1.0 if x is NAN, 0.0 otherwise. +
+Allow to store the value of the expression expr in an internal +variable. var specifies the number of the variable where to +store the value, and it is a value ranging from 0 to 9. The function +returns the value stored in the internal variable. +Note, Variables are currently not shared between expressions. +
+Allow to load the value of the internal variable with number +var, which was previously stored with st(var, expr). +The function returns the loaded value. +
+Evaluate expression expr while the expression cond is +non-zero, and returns the value of the last expr evaluation, or +NAN if cond was always false. +
+Round the value of expression expr upwards to the nearest +integer. For example, "ceil(1.5)" is "2.0". +
+Round the value of expression expr downwards to the nearest +integer. For example, "floor(-1.5)" is "-2.0". +
+Round the value of expression expr towards zero to the nearest +integer. For example, "trunc(-1.5)" is "-1.0". +
+Compute the square root of expr. This is equivalent to +"(expr)^.5". +
+Return 1.0 if expr is zero, 0.0 otherwise. +
+Compute the power of x elevated y, it is equivalent to +"(x)^(y)". +
+Return a pseudo random value between 0.0 and 1.0. x is the index of the +internal variable which will be used to save the seed/state. +
+This function is similar to the C function with the same name; it returns +"sqrt(x*x + y*y)", the length of the hypotenuse of a +right triangle with sides of length x and y, or the distance of the +point (x, y) from the origin. +
+Return the greatest common divisor of x and y. If both x and +y are 0 or either or both are less than zero then behavior is undefined. +
+Evaluate x, and if the result is non-zero return the result of +the evaluation of y, return 0 otherwise. +
+Evaluate x, and if the result is zero return the result of the +evaluation of y, return 0 otherwise. +
The following constants are available: +
area of the unit disc, approximately 3.14 +
exp(1) (Euler’s number), approximately 2.718 +
golden ratio (1+sqrt(5))/2, approximately 1.618 +
Assuming that an expression is considered "true" if it has a non-zero +value, note that: +
+* works like AND
+
+ works like OR
+
and the construct: +
if A then B else C + |
is equivalent to +
if(A,B) + ifnot(A,C) + |
In your C code, you can extend the list of unary and binary functions, +and define recognized constants, so that they are available for your +expressions. +
+The evaluator also recognizes the International System number +postfixes. If ’i’ is appended after the postfix, powers of 2 are used +instead of powers of 10. The ’B’ postfix multiplies the value for 8, +and can be appended after another postfix or used alone. This allows +using for example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +
+Follows the list of available International System postfixes, with +indication of the corresponding powers of 10 and of 2. +
-24 / -80 +
-21 / -70 +
-18 / -60 +
-15 / -50 +
-12 / -40 +
-9 / -30 +
-6 / -20 +
-3 / -10 +
-2 +
-1 +
2 +
3 / 10 +
3 / 10 +
6 / 20 +
9 / 30 +
12 / 40 +
15 / 40 +
18 / 50 +
21 / 60 +
24 / 70 +
Decoders are configured elements in FFmpeg which allow the decoding of +multimedia streams. +
+When you configure your FFmpeg build, all the supported native decoders
+are enabled by default. Decoders requiring an external library must be enabled
+manually via the corresponding --enable-lib option. You can list all
+available decoders using the configure option --list-decoders.
+
You can disable all the decoders with the configure option
+--disable-decoders and selectively enable / disable single decoders
+with the options --enable-decoder=DECODER /
+--disable-decoder=DECODER.
+
The option -codecs of the ff* tools will display the list of
+enabled decoders.
+
A description of some of the currently available video decoders +follows. +
+ +Raw video decoder. +
+This decoder decodes rawvideo streams. +
+ +Specify the assumed field type of the input video. +
the video is assumed to be progressive (default) +
bottom-field-first is assumed +
top-field-first is assumed +
Internal wave synthetizer. +
+This decoder generates wave patterns according to predefined sequences. Its +use is purely internal and the format of the data it accepts is not publicly +documented. +
+ +Demuxers are configured elements in FFmpeg which allow to read the +multimedia streams from a particular type of file. +
+When you configure your FFmpeg build, all the supported demuxers +are enabled by default. You can list all available ones using the +configure option "–list-demuxers". +
+You can disable all the demuxers using the configure option +"–disable-demuxers", and selectively enable a single demuxer with +the option "–enable-demuxer=DEMUXER", or disable it +with the option "–disable-demuxer=DEMUXER". +
+The option "-formats" of the ff* tools will display the list of +enabled demuxers. +
+The description of some of the currently available demuxers follows. +
+ +Image file demuxer. +
+This demuxer reads from a list of image files specified by a pattern. +
+The pattern may contain the string "%d" or "%0Nd", which +specifies the position of the characters representing a sequential +number in each filename matched by the pattern. If the form +"%d0Nd" is used, the string representing the number in each +filename is 0-padded and N is the total number of 0-padded +digits representing the number. The literal character ’%’ can be +specified in the pattern with the string "%%". +
+If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified by the pattern must contain a number +inclusively contained between 0 and 4, all the following numbers must +be sequential. This limitation may be hopefully fixed. +
+The pattern may contain a suffix which is used to automatically +determine the format of the images contained in the files. +
+For example the pattern "img-%03d.bmp" will match a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a +sequence of filenames of the form ‘i%m%g-1.jpg’, +‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. +
+The size, the pixel format, and the format of each image must be the +same for all the files in the sequence. +
+The following example shows how to use ffmpeg for creating a
+video from the images in the file sequence ‘img-001.jpeg’,
+‘img-002.jpeg’, ..., assuming an input frame rate of 10 frames per
+second:
+
ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv + |
Note that the pattern must not necessarily contain "%d" or +"%0Nd", for example to convert a single image file +‘img.jpeg’ you can employ the command: +
ffmpeg -i img.jpeg img.png + |
Apple HTTP Live Streaming demuxer. +
+This demuxer presents all AVStreams from all variant streams. +The id field is set to the bitrate variant index number. By setting +the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), +the caller can decide which variant streams to actually receive. +The total bitrate of the variant that the stream belongs to is +available in a metadata key named "variant_bitrate". +
+ +SBaGen script demuxer. +
+This demuxer reads the script language used by SBaGen +http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG +script looks like that: +
-SE +a: 300-2.5/3 440+4.5/0 +b: 300-2.5/0 440+4.5/3 +off: - +NOW == a ++0:07:00 == b ++0:14:00 == a ++0:21:00 == b ++0:30:00 off + |
A SBG script can mix absolute and relative timestamps. If the script uses +either only absolute timestamps (including the script start time) or only +relative ones, then its layout is fixed, and the conversion is +straightforward. On the other hand, if the script mixes both kind of +timestamps, then the NOW reference for relative timestamps will be +taken from the current time of day at the time the script is read, and the +script layout will be frozen according to that reference. That means that if +the script is directly played, the actual times will match the absolute +timestamps up to the sound controller’s clock accuracy, but if the user +somehow pauses the playback or seeks, all times will be shifted accordingly. +
+ +Muxers are configured elements in FFmpeg which allow writing +multimedia streams to a particular type of file. +
+When you configure your FFmpeg build, all the supported muxers
+are enabled by default. You can list all available muxers using the
+configure option --list-muxers.
+
You can disable all the muxers with the configure option
+--disable-muxers and selectively enable / disable single muxers
+with the options --enable-muxer=MUXER /
+--disable-muxer=MUXER.
+
The option -formats of the ff* tools will display the list of
+enabled muxers.
+
A description of some of the currently available muxers follows. +
+ +CRC (Cyclic Redundancy Check) testing format. +
+This muxer computes and prints the Adler-32 CRC of all the input audio +and video frames. By default audio frames are converted to signed +16-bit raw audio and video frames to raw video before computing the +CRC. +
+The output of the muxer consists of a single line of the form: +CRC=0xCRC, where CRC is a hexadecimal number 0-padded to +8 digits containing the CRC for all the decoded input frames. +
+For example to compute the CRC of the input, and store it in the file +‘out.crc’: +
ffmpeg -i INPUT -f crc out.crc + |
You can print the CRC to stdout with the command: +
ffmpeg -i INPUT -f crc - + |
You can select the output format of each frame with ffmpeg by
+specifying the audio and video codec and format. For example to
+compute the CRC of the input audio converted to PCM unsigned 8-bit
+and the input video converted to MPEG-2 video, use the command:
+
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc - + |
See also the framecrc muxer. +
+ +Per-frame CRC (Cyclic Redundancy Check) testing format. +
+This muxer computes and prints the Adler-32 CRC for each decoded audio +and video frame. By default audio frames are converted to signed +16-bit raw audio and video frames to raw video before computing the +CRC. +
+The output of the muxer consists of a line for each audio and video +frame of the form: stream_index, frame_dts, +frame_size, 0xCRC, where CRC is a hexadecimal +number 0-padded to 8 digits containing the CRC of the decoded frame. +
+For example to compute the CRC of each decoded frame in the input, and +store it in the file ‘out.crc’: +
ffmpeg -i INPUT -f framecrc out.crc + |
You can print the CRC of each decoded frame to stdout with the command: +
ffmpeg -i INPUT -f framecrc - + |
You can select the output format of each frame with ffmpeg by
+specifying the audio and video codec and format. For example, to
+compute the CRC of each decoded input audio frame converted to PCM
+unsigned 8-bit and of each decoded input video frame converted to
+MPEG-2 video, use the command:
+
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc - + |
See also the crc muxer. +
+ +Image file muxer. +
+The image file muxer writes video frames to image files. +
+The output filenames are specified by a pattern, which can be used to +produce sequentially numbered series of files. +The pattern may contain the string "%d" or "%0Nd", this string +specifies the position of the characters representing a numbering in +the filenames. If the form "%0Nd" is used, the string +representing the number in each filename is 0-padded to N +digits. The literal character ’%’ can be specified in the pattern with +the string "%%". +
+If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified will contain the number 1, all the following +numbers will be sequential. +
+The pattern may contain a suffix which is used to automatically +determine the format of the image files to write. +
+For example the pattern "img-%03d.bmp" will specify a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc. +The pattern "img%%-%d.jpg" will specify a sequence of filenames of the +form ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, +etc. +
+The following example shows how to use ffmpeg for creating a
+sequence of files ‘img-001.jpeg’, ‘img-002.jpeg’, ...,
+taking one image every second from the input video:
+
ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg' + |
Note that with ffmpeg, if the format is not specified with the
+-f option and the output filename specifies an image file
+format, the image2 muxer is automatically selected, so the previous
+command can be written as:
+
ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg' + |
Note also that the pattern must not necessarily contain "%d" or +"%0Nd", for example to create a single image file +‘img.jpeg’ from the input video you can employ the command: +
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg + |
The image muxer supports the .Y.U.V image file format. This format is +special in that that each image frame consists of three files, for +each of the YUV420P components. To read or write this image file format, +specify the name of the ’.Y’ file. The muxer will automatically open the +’.U’ and ’.V’ files as required. +
+ +MOV / MP4 muxer +
+The muxer options are: +
+Reserves space for the moov atom at the beginning of the file instead of placing the +moov atom at the end. If the space reserved is insufficient, muxing will fail. +
MPEG transport stream muxer. +
+This muxer implements ISO 13818-1 and part of ETSI EN 300 468. +
+The muxer options are: +
+Set the original_network_id (default 0x0001). This is unique identifier +of a network in DVB. Its main use is in the unique identification of a +service through the path Original_Network_ID, Transport_Stream_ID. +
Set the transport_stream_id (default 0x0001). This identifies a +transponder in DVB. +
Set the service_id (default 0x0001) also known as program in DVB. +
Set the first PID for PMT (default 0x1000, max 0x1f00). +
Set the first PID for data packets (default 0x0100, max 0x0f00). +
The recognized metadata settings in mpegts muxer are service_provider
+and service_name. If they are not set the default for
+service_provider is "FFmpeg" and the default for
+service_name is "Service01".
+
ffmpeg -i file.mpg -c copy \ + -mpegts_original_network_id 0x1122 \ + -mpegts_transport_stream_id 0x3344 \ + -mpegts_service_id 0x5566 \ + -mpegts_pmt_start_pid 0x1500 \ + -mpegts_start_pid 0x150 \ + -metadata service_provider="Some provider" \ + -metadata service_name="Some Channel" \ + -y out.ts + |
Null muxer. +
+This muxer does not generate any output file, it is mainly useful for +testing or benchmarking purposes. +
+For example to benchmark decoding with ffmpeg you can use the
+command:
+
ffmpeg -benchmark -i INPUT -f null out.null + |
Note that the above command does not read or write the ‘out.null’
+file, but specifying the output file is required by the ffmpeg
+syntax.
+
Alternatively you can write the command as: +
ffmpeg -benchmark -i INPUT -f null - + |
Matroska container muxer. +
+This muxer implements the matroska and webm container specs. +
+The recognized metadata settings in this muxer are: +
+Name provided to a single track +
Specifies the language of the track in the Matroska languages form +
Stereo 3D video layout of two views in a single video track +
video is not stereo +
Both views are arranged side by side, Left-eye view is on the left +
Both views are arranged in top-bottom orientation, Left-eye view is at bottom +
Both views are arranged in top-bottom orientation, Left-eye view is on top +
Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first +
Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first +
Each view is constituted by a row based interleaving, Right-eye view is first row +
Each view is constituted by a row based interleaving, Left-eye view is first row +
Both views are arranged in a column based interleaving manner, Right-eye view is first column +
Both views are arranged in a column based interleaving manner, Left-eye view is first column +
All frames are in anaglyph format viewable through red-cyan filters +
Both views are arranged side by side, Right-eye view is on the left +
All frames are in anaglyph format viewable through green-magenta filters +
Both eyes laced in one Block, Left-eye view is first +
Both eyes laced in one Block, Right-eye view is first +
For example a 3D WebM clip can be created using the following command line: +
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm + |
Basic stream segmenter. +
+The segmenter muxer outputs streams to a number of separate files of nearly +fixed duration. Output filename pattern can be set in a fashion similar to +image2. +
+Every segment starts with a video keyframe, if a video stream is present. +The segment muxer works best with a single constant frame rate video. +
+Optionally it can generate a flat list of the created segments, one segment +per line. +
+Override the inner container format, by default it is guessed by the filename +extension. +
Set segment duration to t seconds. +
Generate also a listfile named name. +
Overwrite the listfile once it reaches size entries. +
ffmpeg -i in.mkv -c copy -map 0 -f segment -list out.list out%03d.nut + |
Input devices are configured elements in FFmpeg which allow to access +the data coming from a multimedia device attached to your system. +
+When you configure your FFmpeg build, all the supported input devices +are enabled by default. You can list all available ones using the +configure option "–list-indevs". +
+You can disable all the input devices using the configure option +"–disable-indevs", and selectively enable an input device using the +option "–enable-indev=INDEV", or you can disable a particular +input device using the option "–disable-indev=INDEV". +
+The option "-formats" of the ff* tools will display the list of +supported input devices (amongst the demuxers). +
+A description of the currently available input devices follows. +
+ +ALSA (Advanced Linux Sound Architecture) input device. +
+To enable this input device during configuration you need libasound +installed on your system. +
+This device allows capturing from an ALSA device. The name of the +device to capture has to be an ALSA card identifier. +
+An ALSA identifier has the syntax: +
hw:CARD[,DEV[,SUBDEV]] + |
where the DEV and SUBDEV components are optional. +
+The three arguments (in order: CARD,DEV,SUBDEV) +specify card number or identifier, device number and subdevice number +(-1 means any). +
+To see the list of cards currently recognized by your system check the +files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. +
+For example to capture with ffmpeg from an ALSA device with
+card id 0, you may run the command:
+
ffmpeg -f alsa -i hw:0 alsaout.wav + |
For more information see: +http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html +
+ +BSD video input device. +
+ +Windows DirectShow input device. +
+DirectShow support is enabled when FFmpeg is built with mingw-w64. +Currently only audio and video devices are supported. +
+Multiple devices may be opened as separate inputs, but they may also be +opened on the same input, which should improve synchronism between them. +
+The input name should be in the format: +
+TYPE=NAME[:TYPE=NAME] + |
where TYPE can be either audio or video, +and NAME is the device’s name. +
+ +If no options are specified, the device’s defaults are used. +If the device does not support the requested options, it will +fail to open. +
+Set the video size in the captured video. +
+Set the framerate in the captured video. +
+Set the sample rate (in Hz) of the captured audio. +
+Set the sample size (in bits) of the captured audio. +
+Set the number of channels in the captured audio. +
+If set to ‘true’, print a list of devices and exit. +
+If set to ‘true’, print a list of selected device’s options +and exit. +
+Set video device number for devices with same name (starts at 0, +defaults to 0). +
+Set audio device number for devices with same name (starts at 0, +defaults to 0). +
+$ ffmpeg -list_devices true -f dshow -i dummy + |
$ ffmpeg -f dshow -i video="Camera" + |
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera" + |
$ ffmpeg -f dshow -i video="Camera":audio="Microphone" + |
$ ffmpeg -list_options true -f dshow -i video="Camera" + |
Linux DV 1394 input device. +
+ +Linux framebuffer input device. +
+The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +
+For more detailed information read the file +Documentation/fb/framebuffer.txt included in the Linux source tree. +
+To record from the framebuffer device ‘/dev/fb0’ with
+ffmpeg:
+
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi + |
You can take a single screenshot image with the command: +
ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg + |
See also http://linux-fbdev.sourceforge.net/, and fbset(1). +
+ +JACK input device. +
+To enable this input device during configuration you need libjack +installed on your system. +
+A JACK input device creates one or more JACK writable clients, one for +each audio channel, with name client_name:input_N, where +client_name is the name provided by the application, and N +is a number which identifies the channel. +Each writable client will send the acquired data to the FFmpeg input +device. +
+Once you have created one or more JACK readable clients, you need to +connect them to one or more JACK writable clients. +
+To connect or disconnect JACK clients you can use the jack_connect
+and jack_disconnect programs, or do it through a graphical interface,
+for example with qjackctl.
+
To list the JACK clients and their properties you can invoke the command
+jack_lsp.
+
Follows an example which shows how to capture a JACK readable client
+with ffmpeg.
+
# Create a JACK writable client with name "ffmpeg". +$ ffmpeg -f jack -i ffmpeg -y out.wav + +# Start the sample jack_metro readable client. +$ jack_metro -b 120 -d 0.2 -f 4000 + +# List the current JACK clients. +$ jack_lsp -c +system:capture_1 +system:capture_2 +system:playback_1 +system:playback_2 +ffmpeg:input_1 +metro:120_bpm + +# Connect metro to the ffmpeg writable client. +$ jack_connect metro:120_bpm ffmpeg:input_1 + |
For more information read: +http://jackaudio.org/ +
+ +Libavfilter input virtual device. +
+This input device reads data from the open output pads of a libavfilter +filtergraph. +
+For each filtergraph open output, the input device will create a +corresponding stream which is mapped to the generated output. Currently +only video data is supported. The filtergraph is specified through the +option ‘graph’. +
+ +Specify the filtergraph to use as input. Each video open output must be +labelled by a unique string of the form "outN", where N is a +number starting from 0 corresponding to the mapped input stream +generated by the device. +The first unlabelled output is automatically assigned to the "out0" +label, but all the others need to be specified explicitly. +
+If not specified defaults to the filename specified for the input +device. +
ffplay:
+ffplay -f lavfi -graph "color=pink [out0]" dummy + |
ffplay -f lavfi color=pink + |
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3 + |
ffplay:
+ffplay -f lavfi "amovie=test.wav" + |
ffplay:
+ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]" + |
IIDC1394 input device, based on libdc1394 and libraw1394. +
+ +The OpenAL input device provides audio capture on all systems with a +working OpenAL 1.1 implementation. +
+To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with --enable-openal.
+
OpenAL headers and libraries should be provided as part of your OpenAL
+implementation, or as an additional download (an SDK). Depending on your
+installation you may need to specify additional flags via the
+--extra-cflags and --extra-ldflags for allowing the build
+system to locate the OpenAL headers and libraries.
+
An incomplete list of OpenAL implementations follows: +
+The official Windows implementation, providing hardware acceleration +with supported devices and software fallback. +See http://openal.org/. +
Portable, open source (LGPL) software implementation. Includes +backends for the most common sound APIs on the Windows, Linux, +Solaris, and BSD operating systems. +See http://kcat.strangesoft.net/openal.html. +
OpenAL is part of Core Audio, the official Mac OS X Audio interface. +See http://developer.apple.com/technologies/mac/audio-and-video.html +
This device allows to capture from an audio input device handled +through OpenAL. +
+You need to specify the name of the device to capture in the provided +filename. If the empty string is provided, the device will +automatically select the default device. You can get the list of the +supported devices by using the option list_devices. +
+ +Set the number of channels in the captured audio. Only the values +‘1’ (monaural) and ‘2’ (stereo) are currently supported. +Defaults to ‘2’. +
+Set the sample size (in bits) of the captured audio. Only the values +‘8’ and ‘16’ are currently supported. Defaults to +‘16’. +
+Set the sample rate (in Hz) of the captured audio. +Defaults to ‘44.1k’. +
+If set to ‘true’, print a list of devices and exit. +Defaults to ‘false’. +
+Print the list of OpenAL supported devices and exit: +
$ ffmpeg -list_devices true -f openal -i dummy out.ogg + |
Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: +
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg + |
Capture from the default device (note the empty string ” as filename): +
$ ffmpeg -f openal -i '' out.ogg + |
Capture from two devices simultaneously, writing to two different files,
+within the same ffmpeg command:
+
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg + |
Note: not all OpenAL implementations support multiple simultaneous capture - +try the latest OpenAL Soft if the above does not work. +
+ +Open Sound System input device. +
+The filename to provide to the input device is the device node +representing the OSS input device, and is usually set to +‘/dev/dsp’. +
+For example to grab from ‘/dev/dsp’ using ffmpeg use the
+command:
+
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav + |
For more information about OSS see: +http://manuals.opensound.com/usersguide/dsp.html +
+ +pulseaudio input device. +
+To enable this input device during configuration you need libpulse-simple +installed in your system. +
+The filename to provide to the input device is a source device or the +string "default" +
+To list the pulse source devices and their properties you can invoke
+the command pactl list sources.
+
ffmpeg -f pulse -i default /tmp/pulse.wav + |
The syntax is: +
-server server name + |
Connects to a specific server. +
+ +The syntax is: +
-name application name + |
Specify the application name pulse will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string +
+ +The syntax is: +
-stream_name stream name + |
Specify the stream name pulse will use when showing active streams, +by default it is "record" +
+ +The syntax is: +
-sample_rate samplerate + |
Specify the samplerate in Hz, by default 48kHz is used. +
+ +The syntax is: +
-channels N + |
Specify the channels in use, by default 2 (stereo) is set. +
+ +The syntax is: +
-frame_size bytes + |
Specify the number of byte per frame, by default it is set to 1024. +
+ +The syntax is: +
-fragment_size bytes + |
Specify the minimal buffering fragment in pulseaudio, it will affect the +audio latency. By default it is unset. +
+ +sndio input device. +
+To enable this input device during configuration you need libsndio +installed on your system. +
+The filename to provide to the input device is the device node +representing the sndio input device, and is usually set to +‘/dev/audio0’. +
+For example to grab from ‘/dev/audio0’ using ffmpeg use the
+command:
+
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav + |
Video4Linux and Video4Linux2 input video devices. +
+The name of the device to grab is a file device node, usually Linux +systems tend to automatically create such nodes when the device +(e.g. an USB webcam) is plugged into the system, and has a name of the +kind ‘/dev/videoN’, where N is a number associated to +the device. +
+Video4Linux and Video4Linux2 devices only support a limited set of
+widthxheight sizes and framerates. You can check which are
+supported for example with the command dov4l for Video4Linux
+devices and using -list_formats all for Video4Linux2 devices.
+
If the size for the device is set to 0x0, the input device will +try to auto-detect the size to use. +Only for the video4linux2 device, if the frame rate is set to 0/0 the +input device will use the frame rate value already set in the driver. +
+Video4Linux support is deprecated since Linux 2.6.30, and will be +dropped in later versions. +
+Note that if FFmpeg is build with v4l-utils support ("–enable-libv4l2" +option), it will always be used. +
+Follow some usage examples of the video4linux devices with the ff* +tools. +
# Grab and show the input of a video4linux device, frame rate is set +# to the default of 25/1. +ffplay -s 320x240 -f video4linux /dev/video0 + +# Grab and show the input of a video4linux2 device, auto-adjust size. +ffplay -f video4linux2 /dev/video0 + +# Grab and record the input of a video4linux2 device, auto-adjust size, +# frame rate value defaults to 0/0 so it is read from the video4linux2 +# driver. +ffmpeg -f video4linux2 -i /dev/video0 out.mpeg + |
"v4l" and "v4l2" can be used as aliases for the respective "video4linux" and +"video4linux2". +
+ +VfW (Video for Windows) capture input device. +
+The filename passed as input is the capture driver number, ranging from +0 to 9. You may use "list" as filename to print a list of drivers. Any +other filename will be interpreted as device number 0. +
+ +X11 video input device. +
+This device allows to capture a region of an X11 display. +
+The filename passed as input has the syntax: +
[hostname]:display_number.screen_number[+x_offset,y_offset] + |
hostname:display_number.screen_number specifies the
+X11 display name of the screen to grab from. hostname can be
+omitted, and defaults to "localhost". The environment variable
+DISPLAY contains the default display name.
+
x_offset and y_offset specify the offsets of the grabbed +area with respect to the top-left border of the X11 screen. They +default to 0. +
+Check the X11 documentation (e.g. man X) for more detailed information. +
+Use the dpyinfo program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+
For example to grab from ‘:0.0’ using ffmpeg:
+
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg + +# Grab at position 10,20. +ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg + |
The syntax is: +
-follow_mouse centered|PIXELS + |
When it is specified with "centered", the grabbing region follows the mouse +pointer and keeps the pointer at the center of region; otherwise, the region +follows only when the mouse pointer reaches within PIXELS (greater than +zero) to the edge of region. +
+For example: +
ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg + +# Follows only when the mouse pointer reaches within 100 pixels to edge +ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg + |
The syntax is: +
-show_region 1 + |
If show_region AVOption is specified with 1, then the grabbing +region will be indicated on screen. With this option, it’s easy to know what is +being grabbed if only a portion of the screen is grabbed. +
+For example: +
ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg + +# With follow_mouse +ffmpeg -f x11grab -follow_mouse centered -show_region 1 -r 25 -s cif -i :0.0 out.mpg + |
Output devices are configured elements in FFmpeg which allow to write +multimedia data to an output device attached to your system. +
+When you configure your FFmpeg build, all the supported output devices +are enabled by default. You can list all available ones using the +configure option "–list-outdevs". +
+You can disable all the output devices using the configure option +"–disable-outdevs", and selectively enable an output device using the +option "–enable-outdev=OUTDEV", or you can disable a particular +input device using the option "–disable-outdev=OUTDEV". +
+The option "-formats" of the ff* tools will display the list of +enabled output devices (amongst the muxers). +
+A description of the currently available output devices follows. +
+ +ALSA (Advanced Linux Sound Architecture) output device. +
+ +OSS (Open Sound System) output device. +
+ +SDL (Simple DirectMedia Layer) output device. +
+This output devices allows to show a video stream in an SDL +window. Only one SDL window is allowed per application, so you can +have only one instance of this output device in an application. +
+To enable this output device you need libsdl installed on your system +when configuring your build. +
+For more information about SDL, check: +http://www.libsdl.org/ +
+ +Set the SDL window title, if not specified default to the filename +specified for the output device. +
+Set the name of the iconified SDL window, if not specified it is set +to the same value of window_title. +
+Set the SDL window size, can be a string of the form +widthxheight or a video size abbreviation. +If not specified it defaults to the size of the input video. +
The following command shows the ffmpeg output is an
+SDL window, forcing its size to the qcif format:
+
ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output" + |
sndio audio output device. +
+ +Protocols are configured elements in FFmpeg which allow to access +resources which require the use of a particular protocol. +
+When you configure your FFmpeg build, all the supported protocols are +enabled by default. You can list all available ones using the +configure option "–list-protocols". +
+You can disable all the protocols using the configure option +"–disable-protocols", and selectively enable a protocol using the +option "–enable-protocol=PROTOCOL", or you can disable a +particular protocol using the option +"–disable-protocol=PROTOCOL". +
+The option "-protocols" of the ff* tools will display the list of +supported protocols. +
+A description of the currently available protocols follows. +
+ +Read Apple HTTP Live Streaming compliant segmented stream as +a uniform one. The M3U8 playlists describing the segments can be +remote HTTP resources or local files, accessed using the standard +file protocol. +HTTP is default, specific protocol can be declared by specifying +"+proto" after the applehttp URI scheme name, where proto +is either "file" or "http". +
+applehttp://host/path/to/remote/resource.m3u8 +applehttp+http://host/path/to/remote/resource.m3u8 +applehttp+file://path/to/local/resource.m3u8 + |
Physical concatenation protocol. +
+Allow to read and seek from many resource in sequence as if they were +a unique resource. +
+A URL accepted by this protocol has the syntax: +
concat:URL1|URL2|...|URLN + |
where URL1, URL2, ..., URLN are the urls of the +resource to be concatenated, each one possibly specifying a distinct +protocol. +
+For example to read a sequence of files ‘split1.mpeg’,
+‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the
+command:
+
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg + |
Note that you may need to escape the character "|" which is special for +many shells. +
+ +File access protocol. +
+Allow to read from or read to a file. +
+For example to read from a file ‘input.mpeg’ with ffmpeg
+use the command:
+
ffmpeg -i file:input.mpeg output.mpeg + |
The ff* tools default to the file protocol, that is a resource +specified with the name "FILE.mpeg" is interpreted as the URL +"file:FILE.mpeg". +
+ +Gopher protocol. +
+ +HTTP (Hyper Text Transfer Protocol). +
+ +MMS (Microsoft Media Server) protocol over TCP. +
+ +MMS (Microsoft Media Server) protocol over HTTP. +
+The required syntax is: +
mmsh://server[:port][/app][/playpath] + |
MD5 output protocol. +
+Computes the MD5 hash of the data to be written, and on close writes +this to the designated output or stdout if none is specified. It can +be used to test muxers without writing an actual file. +
+Some examples follow. +
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. +ffmpeg -i input.flv -f avi -y md5:output.avi.md5 + +# Write the MD5 hash of the encoded AVI file to stdout. +ffmpeg -i input.flv -f avi -y md5: + |
Note that some formats (typically MOV) require the output protocol to +be seekable, so they will fail with the MD5 output protocol. +
+ +UNIX pipe access protocol. +
+Allow to read and write from UNIX pipes. +
+The accepted syntax is: +
pipe:[number] + |
number is the number corresponding to the file descriptor of the +pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number +is not specified, by default the stdout file descriptor will be used +for writing, stdin for reading. +
+For example to read from stdin with ffmpeg:
+
cat test.wav | ffmpeg -i pipe:0 +# ...this is the same as... +cat test.wav | ffmpeg -i pipe: + |
For writing to stdout with ffmpeg:
+
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi +# ...this is the same as... +ffmpeg -i test.wav -f avi pipe: | cat > test.avi + |
Note that some formats (typically MOV), require the output protocol to +be seekable, so they will fail with the pipe output protocol. +
+ +Real-Time Messaging Protocol. +
+The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia +content across a TCP/IP network. +
+The required syntax is: +
rtmp://server[:port][/app][/playpath] + |
The accepted parameters are: +
The address of the RTMP server. +
+The number of the TCP port to use (by default is 1935). +
+It is the name of the application to access. It usually corresponds to +the path where the application is installed on the RTMP server +(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). +
+It is the path or name of the resource to play with reference to the +application specified in app, may be prefixed by "mp4:". +
+For example to read with ffplay a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+
ffplay rtmp://myserver/vod/sample + |
Real-Time Messaging Protocol and its variants supported through +librtmp. +
+Requires the presence of the librtmp headers and library during +configuration. You need to explicitly configure the build with +"–enable-librtmp". If enabled this will replace the native RTMP +protocol. +
+This protocol provides most client functions and a few server +functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), +encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled +variants of these encrypted types (RTMPTE, RTMPTS). +
+The required syntax is: +
rtmp_proto://server[:port][/app][/playpath] options + |
where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", +"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and +server, port, app and playpath have the same +meaning as specified for the RTMP native protocol. +options contains a list of space-separated options of the form +key=val. +
+See the librtmp manual page (man 3 librtmp) for more information. +
+For example, to stream a file in real-time to an RTMP server using
+ffmpeg:
+
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream + |
To play the same stream using ffplay:
+
ffplay "rtmp://myserver/live/mystream live=1" + |
Real-Time Protocol. +
+ +RTSP is not technically a protocol handler in libavformat, it is a demuxer +and muxer. The demuxer supports both normal RTSP (with data transferred +over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with +data transferred over RDT). +
+The muxer can be used to send a stream using RTSP ANNOUNCE to a server +supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s +RTSP server). +
+The required syntax for a RTSP url is: +
rtsp://hostname[:port]/path + |
The following options (set on the ffmpeg/ffplay command
+line, or set in code via AVOptions or in avformat_open_input),
+are supported:
+
Flags for rtsp_transport:
+
Use UDP as lower transport protocol. +
+Use TCP (interleaving within the RTSP control channel) as lower +transport protocol. +
+Use UDP multicast as lower transport protocol. +
+Use HTTP tunneling as lower transport protocol, which is useful for +passing proxies. +
Multiple lower transport protocols may be specified, in that case they are
+tried one at a time (if the setup of one fails, the next one is tried).
+For the muxer, only the tcp and udp options are supported.
+
Flags for rtsp_flags:
+
Accept packets only from negotiated peer address and port. +
When receiving data over UDP, the demuxer tries to reorder received packets
+(since they may arrive out of order, or packets may get lost totally). In
+order for this to be enabled, a maximum delay must be specified in the
+max_delay field of AVFormatContext.
+
When watching multi-bitrate Real-RTSP streams with ffplay, the
+streams to display can be chosen with -vst n and
+-ast n for video and audio respectively, and can be switched
+on the fly by pressing v and a.
+
Example command lines: +
+To watch a stream over UDP, with a max reordering delay of 0.5 seconds: +
+ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4 + |
To watch a stream tunneled over HTTP: +
+ffplay -rtsp_transport http rtsp://server/video.mp4 + |
To send a stream in realtime to a RTSP server, for others to watch: +
+ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp + |
Session Announcement Protocol (RFC 2974). This is not technically a +protocol handler in libavformat, it is a muxer and demuxer. +It is used for signalling of RTP streams, by announcing the SDP for the +streams regularly on a separate port. +
+ +The syntax for a SAP url given to the muxer is: +
sap://destination[:port][?options] + |
The RTP packets are sent to destination on port port,
+or to port 5004 if no port is specified.
+options is a &-separated list. The following options
+are supported:
+
Specify the destination IP address for sending the announcements to. +If omitted, the announcements are sent to the commonly used SAP +announcement multicast address 224.2.127.254 (sap.mcast.net), or +ff0e::2:7ffe if destination is an IPv6 address. +
+Specify the port to send the announcements on, defaults to +9875 if not specified. +
+Specify the time to live value for the announcements and RTP packets, +defaults to 255. +
+If set to 1, send all RTP streams on the same port pair. If zero (the +default), all streams are sent on unique ports, with each stream on a +port 2 numbers higher than the previous. +VLC/Live555 requires this to be set to 1, to be able to receive the stream. +The RTP stack in libavformat for receiving requires all streams to be sent +on unique ports. +
Example command lines follow. +
+To broadcast a stream on the local subnet, for watching in VLC: +
+ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1 + |
Similarly, for watching in ffplay:
+
ffmpeg -re -i input -f sap sap://224.0.0.255 + |
And for watching in ffplay, over IPv6:
+
ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4] + |
The syntax for a SAP url given to the demuxer is: +
sap://[address][:port] + |
address is the multicast address to listen for announcements on, +if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port +is the port that is listened on, 9875 if omitted. +
+The demuxers listens for announcements on the given address and port. +Once an announcement is received, it tries to receive that particular stream. +
+Example command lines follow. +
+To play back the first stream announced on the normal SAP multicast address: +
+ffplay sap:// + |
To play back the first stream announced on one the default IPv6 SAP multicast address: +
+ffplay sap://[ff0e::2:7ffe] + |
Trasmission Control Protocol. +
+The required syntax for a TCP url is: +
tcp://hostname:port[?options] + |
Listen for an incoming connection +
+ffmpeg -i input -f format tcp://hostname:port?listen +ffplay tcp://hostname:port + |
User Datagram Protocol. +
+The required syntax for a UDP url is: +
udp://hostname:port[?options] + |
options contains a list of &-seperated options of the form key=val. +Follow the list of supported options. +
+set the UDP buffer size in bytes +
+override the local UDP port to bind with +
+Choose the local IP address. This is useful e.g. if sending multicast +and the host has multiple interfaces, where the user can choose +which interface to send on by specifying the IP address of that interface. +
+set the size in bytes of UDP packets +
+explicitly allow or disallow reusing UDP sockets +
+set the time to live value (for multicast only) +
+Initialize the UDP socket with connect(). In this case, the
+destination address can’t be changed with ff_udp_set_remote_url later.
+If the destination address isn’t known at the start, this option can
+be specified in ff_udp_set_remote_url, too.
+This allows finding out the source address for the packets with getsockname,
+and makes writes return with AVERROR(ECONNREFUSED) if "destination
+unreachable" is received.
+For receiving, this gives the benefit of only receiving packets from
+the specified peer address/port.
+
Some usage examples of the udp protocol with ffmpeg follow.
+
To stream over UDP to a remote endpoint: +
ffmpeg -i input -f format udp://hostname:port + |
To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: +
ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535 + |
To receive over UDP from a remote endpoint: +
ffmpeg -i udp://[multicast-address]:port + |
A filtergraph is a directed graph of connected filters. It can contain +cycles, and there can be multiple links between a pair of +filters. Each link has one input pad on one side connecting it to one +filter from which it takes its input, and one output pad on the other +side connecting it to the one filter accepting its output. +
+Each filter in a filtergraph is an instance of a filter class +registered in the application, which defines the features and the +number of input and output pads of the filter. +
+A filter with no input pads is called a "source", a filter with no +output pads is called a "sink". +
+ +A filtergraph can be represented using a textual representation, which
+is recognized by the -vf option of the ff*
+tools, and by the avfilter_graph_parse() function defined in
+‘libavfilter/avfiltergraph.h’.
+
A filterchain consists of a sequence of connected filters, each one +connected to the previous one in the sequence. A filterchain is +represented by a list of ","-separated filter descriptions. +
+A filtergraph consists of a sequence of filterchains. A sequence of +filterchains is represented by a list of ";"-separated filterchain +descriptions. +
+A filter is represented by a string of the form: +[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] +
+filter_name is the name of the filter class of which the +described filter is an instance of, and has to be the name of one of +the filter classes registered in the program. +The name of the filter class is optionally followed by a string +"=arguments". +
+arguments is a string which contains the parameters used to +initialize the filter instance, and are described in the filter +descriptions below. +
+The list of arguments can be quoted using the character "’" as initial +and ending mark, and the character ’\’ for escaping the characters +within the quoted text; otherwise the argument string is considered +terminated when the next special character (belonging to the set +"[]=;,") is encountered. +
+The name and arguments of the filter are optionally preceded and +followed by a list of link labels. +A link label allows to name a link and associate it to a filter output +or input pad. The preceding labels in_link_1 +... in_link_N, are associated to the filter input pads, +the following labels out_link_1 ... out_link_M, are +associated to the output pads. +
+When two link labels with the same name are found in the +filtergraph, a link between the corresponding input and output pad is +created. +
+If an output pad is not labelled, it is linked by default to the first +unlabelled input pad of the next filter in the filterchain. +For example in the filterchain: +
nullsrc, split[L1], [L2]overlay, nullsink + |
the split filter instance has two output pads, and the overlay filter +instance two input pads. The first output pad of split is labelled +"L1", the first input pad of overlay is labelled "L2", and the second +output pad of split is linked to the second input pad of overlay, +which are both unlabelled. +
+In a complete filterchain all the unlabelled filter input and output +pads must be connected. A filtergraph is considered valid if all the +filter input and output pads of all the filterchains are connected. +
+Follows a BNF description for the filtergraph syntax: +
NAME ::= sequence of alphanumeric characters and '_' +LINKLABEL ::= "[" NAME "]" +LINKLABELS ::= LINKLABEL [LINKLABELS] +FILTER_ARGUMENTS ::= sequence of chars (eventually quoted) +FILTER ::= [LINKNAMES] NAME ["=" ARGUMENTS] [LINKNAMES] +FILTERCHAIN ::= FILTER [,FILTERCHAIN] +FILTERGRAPH ::= FILTERCHAIN [;FILTERGRAPH] + |
When you configure your FFmpeg build, you can disable any of the
+existing filters using --disable-filters.
+The configure output will show the audio filters included in your
+build.
+
Below is a description of the currently available audio filters. +
+ +Convert the input audio format to the specified formats. +
+The filter accepts a string of the form: +"sample_format:channel_layout:packing_format". +
+sample_format specifies the sample format, and can be a string or +the corresponding numeric value defined in ‘libavutil/samplefmt.h’. +
+channel_layout specifies the channel layout, and can be a string +or the corresponding number value defined in ‘libavutil/audioconvert.h’. +
+packing_format specifies the type of packing in output, can be one +of "planar" or "packed", or the corresponding numeric values "0" or "1". +
+The special parameter "auto", signifies that the filter will +automatically select the output format depending on the output filter. +
+Some examples follow. +
+aconvert=u8:stereo:packed + |
aconvert=u8:auto:auto + |
Convert the input audio to one of the specified formats. The framework will +negotiate the most appropriate format to minimize conversions. +
+The filter accepts three lists of formats, separated by ":", in the form: +"sample_formats:channel_layouts:packing_formats". +
+Elements in each list are separated by "," which has to be escaped in the +filtergraph specification. +
+The special parameter "all", in place of a list of elements, signifies all +supported formats. +
+Some examples follow: +
aformat=u8\\,s16:mono:packed + +aformat=s16:mono\\,stereo:all + |
Merge two audio streams into a single multi-channel stream. +
+This filter does not need any argument. +
+If the channel layouts of the inputs are disjoint, and therefore compatible, +the channel layout of the output will be set accordingly and the channels +will be reordered as necessary. If the channel layouts of the inputs are not +disjoint, the output will have all the channels of the first input then all +the channels of the second input, in that order, and the channel layout of +the output will be the default value corresponding to the total number of +channels. +
+For example, if the first input is in 2.1 (FL+FR+LF) and the second input +is FC+BL+BR, then the output will be in 5.1, with the channels in the +following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the +first input, b1 is the first channel of the second input). +
+On the other hand, if both input are in stereo, the output channels will be +in the default order: a1, a2, b1, b2, and the channel layout will be +arbitrarily set to 4.0, which may or may not be the expected value. +
+Both inputs must have the same sample rate, format and packing. +
+If inputs do not have the same duration, the output will stop with the +shortest. +
+Example: merge two mono files into a stereo stream: +
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge + |
Pass the audio source unchanged to the output. +
+ +Resample the input audio to the specified sample rate. +
+The filter accepts exactly one parameter, the output sample rate. If not +specified then the filter will automatically convert between its input +and output sample rates. +
+For example, to resample the input audio to 44100Hz: +
aresample=44100 + |
Show a line containing various information for each input audio frame. +The input audio is not modified. +
+The shown line contains a sequence of key/value pairs of the form +key:value. +
+A description of each shown parameter follows: +
+sequential number of the input frame, starting from 0 +
+presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad, and +is usually 1/sample_rate. +
+presentation TimeStamp of the input frame, expressed as a number of +seconds +
+position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic audio) +
+sample format name +
+channel layout description +
+number of samples (per each channel) contained in the filtered frame +
+sample rate for the audio frame +
+if the packing format is planar, 0 if packed +
+Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +
+Adler-32 checksum (printed in hexadecimal) for each input frame plane, +expressed in the form "[c0 c1 c2 c3 c4 c5 +c6 c7]" +
Pass on the input audio to two outputs. Both outputs are identical to +the input audio. +
+For example: +
[in] asplit[out0], showaudio[out1] + |
will create two separate outputs from the same input, one cropped and +one padded. +
+ +Forward two audio streams and control the order the buffers are forwarded. +
+The argument to the filter is an expression deciding which stream should be +forwarded next: if the result is negative, the first stream is forwarded; if +the result is positive or zero, the second stream is forwarded. It can use +the following variables: +
+number of buffers forwarded so far on each stream +
number of samples forwarded so far on each stream +
current timestamp of each stream +
The default value is t1-t2, which means to always forward the stream
+that has a smaller timestamp.
+
Example: stress-test amerge by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+
amovie=file.ogg [a] ; amovie=file.mp3 [b] ; +[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ; +[a2] [b2] amerge + |
Make audio easier to listen to on headphones. +
+This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio +so that when listened to on headphones the stereo image is moved from +inside your head (standard for headphones) to outside and in front of +the listener (standard for speakers). +
+Ported from SoX. +
+ +Mix channels with specific gain levels. The filter accepts the output +channel layout followed by a set of channels definitions. +
+This filter is also designed to remap efficiently the channels of an audio +stream. +
+The filter accepts parameters of the form: +"l:outdef:outdef:..." +
+output channel layout or number of channels +
+output channel specification, of the form: +"out_name=[gain*]in_name[+[gain*]in_name...]" +
+output channel to define, either a channel name (FL, FR, etc.) or a channel +number (c0, c1, etc.) +
+multiplicative coefficient for the channel, 1 leaving the volume unchanged +
+input channel to use, see out_name for details; it is not possible to mix +named and numbered input channels +
If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for +that specification will be renormalized so that the total is 1, thus +avoiding clipping noise. +
+ +For example, if you want to down-mix from stereo to mono, but with a bigger +factor for the left channel: +
pan=1:c0=0.9*c0+0.1*c1 + |
A customized down-mix to stereo that works automatically for 3-, 4-, 5- and +7-channels surround: +
pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR + |
Note that ffmpeg integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+
The channel remapping will be effective if, and only if: +
+If all these conditions are satisfied, the filter will notify the user ("Pure +channel mapping detected"), and use an optimized and lossless method to do the +remapping. +
+For example, if you have a 5.1 source and want a stereo audio stream by +dropping the extra channels: +
pan="stereo: c0=FL : c1=FR" + |
Given the same source, you can also switch front left and front right channels +and keep the input channel layout: +
pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5" + |
If the input is a stereo audio stream, you can mute the front left channel (and +still keep the stereo channel layout) with: +
pan="stereo:c1=c1" + |
Still with a stereo audio stream input, you can copy the right channel in both +front left and right: +
pan="stereo: c0=FR : c1=FR" + |
Detect silence in an audio stream. +
+This filter logs a message when it detects that the input audio volume is less +or equal to a noise tolerance value for a duration greater or equal to the +minimum detected noise duration. +
+The printed times and duration are expressed in seconds. +
+Set silence duration until notification (default is 2 seconds). +
+Set noise tolerance. Can be specified in dB (in case "dB" is appended to the +specified value) or amplitude ratio. Default is -60dB, or 0.001. +
Detect 5 seconds of silence with -50dB noise tolerance: +
silencedetect=n=-50dB:d=5 + |
Complete example with ffmpeg to detect silence with 0.0001 noise
+tolerance in ‘silence.mp3’:
+
ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null - + |
Adjust the input audio volume. +
+The filter accepts exactly one parameter vol, which expresses +how the audio volume will be increased or decreased. +
+Output values are clipped to the maximum value. +
+If vol is expressed as a decimal number, the output audio +volume is given by the relation: +
output_volume = vol * input_volume + |
If vol is expressed as a decimal number followed by the string +"dB", the value represents the requested change in decibels of the +input audio power, and the output audio volume is given by the +relation: +
output_volume = 10^(vol/20) * input_volume + |
Otherwise vol is considered an expression and its evaluated +value is used for computing the output audio volume according to the +first relation. +
+Default value for vol is 1.0. +
+ +volume=0.5 + |
The above example is equivalent to: +
volume=1/2 + |
volume=-12dB + |
Below is a description of the currently available audio sources. +
+ +Buffer audio frames, and make them available to the filter chain. +
+This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/asrc_abuffer.h’. +
+It accepts the following mandatory parameters: +sample_rate:sample_fmt:channel_layout:packing +
+The sample rate of the incoming audio buffers. +
+The sample format of the incoming audio buffers. +Either a sample format name or its corresponging integer representation from +the enum AVSampleFormat in ‘libavutil/samplefmt.h’ +
+The channel layout of the incoming audio buffers. +Either a channel layout name from channel_layout_map in +‘libavutil/audioconvert.c’ or its corresponding integer representation +from the AV_CH_LAYOUT_* macros in ‘libavutil/audioconvert.h’ +
+Either "packed" or "planar", or their integer representation: 0 or 1 +respectively. +
+For example: +
abuffer=44100:s16:stereo:planar + |
will instruct the source to accept planar 16bit signed stereo at 44100Hz. +Since the sample format with name "s16" corresponds to the number +1 and the "stereo" channel layout corresponds to the value 3, this is +equivalent to: +
abuffer=44100:1:3:1 + |
Generate an audio signal specified by an expression. +
+This source accepts in input one or more expressions (one for each +channel), which are evaluated and used to generate a corresponding +audio signal. +
+It accepts the syntax: exprs[::options]. +exprs is a list of expressions separated by ":", one for each +separate channel. The output channel layout depends on the number of +provided expressions, up to 8 channels are supported. +
+options is an optional sequence of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Set the minimum duration of the sourced audio. See the function
+av_parse_time() for the accepted format.
+Note that the resulting duration may be greater than the specified
+duration, as the generated audio is always cut at the end of a
+complete frame.
+
If not specified, or the expressed duration is negative, the audio is +supposed to be generated forever. +
+Set the number of samples per channel per each output frame, +default to 1024. +
+Specify the sample rate, default to 44100. +
Each expression in exprs can contain the following constants: +
+number of the evaluated sample, starting from 0 +
+time of the evaluated sample expressed in seconds, starting from 0 +
+sample rate +
+aevalsrc=0 + |
aevalsrc="sin(440*2*PI*t)::s=8000" + |
aevalsrc="-2+random(0)" + |
aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)" + |
aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)" + |
Read an audio stream from a movie container. +
+It accepts the syntax: movie_name[:options] where +movie_name is the name of the resource to read (not necessarily +a file but also a device or a stream accessed through some protocol), +and options is an optional sequence of key=value +pairs, separated by ":". +
+The description of the accepted options follows. +
+Specify the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +
+Specify the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+av_strtod so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+
Specify the index of the audio stream to read. If the value is -1, +the best suited audio stream will be automatically selected. Default +value is "-1". +
+Null audio source, return unprocessed audio frames. It is mainly useful +as a template and to be employed in analysis / debugging tools, or as +the source for filters which ignore the input data (for example the sox +synth filter). +
+It accepts an optional sequence of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Specify the sample rate, and defaults to 44100. +
+Specify the channel layout, and can be either an integer or a string +representing a channel layout. The default value of channel_layout +is "stereo". +
+Check the channel_layout_map definition in +‘libavcodec/audioconvert.c’ for the mapping between strings and +channel layout values. +
+Set the number of samples per requested frames. +
+Follow some examples: +
# set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO. +anullsrc=r=48000:cl=4 + +# same as +anullsrc=r=48000:cl=mono + |
Below is a description of the currently available audio sinks. +
+ +Buffer audio frames, and make them available to the end of filter chain. +
+This sink is mainly intended for programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’. +
+It requires a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to avfilter_init_filter for initialization.
+
Null audio sink, do absolutely nothing with the input audio. It is +mainly useful as a template and to be employed in analysis / debugging +tools. +
+ + +When you configure your FFmpeg build, you can disable any of the
+existing filters using --disable-filters.
+The configure output will show the video filters included in your
+build.
+
Below is a description of the currently available video filters. +
+ +Draw ASS (Advanced Substation Alpha) subtitles on top of input video +using the libass library. +
+To enable compilation of this filter you need to configure FFmpeg with
+--enable-libass.
+
This filter accepts in input the name of the ass file to render. +
+For example, to render the file ‘sub.ass’ on top of the input +video, use the command: +
ass=sub.ass + |
Detect frames that are (almost) completely black. Can be useful to +detect chapter transitions or commercials. Output lines consist of +the frame number of the detected frame, the percentage of blackness, +the position in the file if known or -1 and the timestamp in seconds. +
+In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +
+The filter accepts the syntax: +
blackframe[=amount:[threshold]] + |
amount is the percentage of the pixels that have to be below the +threshold, and defaults to 98. +
+threshold is the threshold below which a pixel value is +considered black, and defaults to 32. +
+ +Apply boxblur algorithm to the input video. +
+This filter accepts the parameters: +luma_radius:luma_power:chroma_radius:chroma_power:alpha_radius:alpha_power +
+Chroma and alpha parameters are optional, if not specified they default +to the corresponding values set for luma_radius and +luma_power. +
+luma_radius, chroma_radius, and alpha_radius represent +the radius in pixels of the box used for blurring the corresponding +input plane. They are expressions, and can contain the following +constants: +
the input width and height in pixels +
+the input chroma image width and height in pixels +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
The radius must be a non-negative number, and must not be greater than
+the value of the expression min(w,h)/2 for the luma and alpha planes,
+and of min(cw,ch)/2 for the chroma planes.
+
luma_power, chroma_power, and alpha_power represent +how many times the boxblur filter is applied to the corresponding +plane. +
+Some examples follow: +
+boxblur=2:1 + |
boxblur=2:1:0:0:0:0 + |
boxblur=min(h\,w)/10:1:min(cw\,ch)/10:1 + |
Copy the input source unchanged to the output. Mainly useful for +testing purposes. +
+ +Crop the input video to out_w:out_h:x:y. +
+The parameters are expressions containing the following constants: +
+the computed values for x and y. They are evaluated for +each new frame. +
+the input width and height +
+same as in_w and in_h +
+the output (cropped) width and height +
+same as out_w and out_h +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
+the number of input frame, starting from 0 +
+the position in the file of the input frame, NAN if unknown +
+timestamp expressed in seconds, NAN if the input timestamp is unknown +
+The out_w and out_h parameters specify the expressions for +the width and height of the output (cropped) video. They are +evaluated just at the configuration of the filter. +
+The default value of out_w is "in_w", and the default value of +out_h is "in_h". +
+The expression for out_w may depend on the value of out_h, +and the expression for out_h may depend on out_w, but they +cannot depend on x and y, as x and y are +evaluated after out_w and out_h. +
+The x and y parameters specify the expressions for the +position of the top-left corner of the output (non-cropped) area. They +are evaluated for each frame. If the evaluated value is not valid, it +is approximated to the nearest valid value. +
+The default value of x is "(in_w-out_w)/2", and the default +value for y is "(in_h-out_h)/2", which set the cropped area at +the center of the input image. +
+The expression for x may depend on y, and the expression +for y may depend on x. +
+Follow some examples: +
# crop the central input area with size 100x100 +crop=100:100 + +# crop the central input area with size 2/3 of the input video +"crop=2/3*in_w:2/3*in_h" + +# crop the input video central square +crop=in_h + +# delimit the rectangle with the top-left corner placed at position +# 100:100 and the right-bottom corner corresponding to the right-bottom +# corner of the input image. +crop=in_w-100:in_h-100:100:100 + +# crop 10 pixels from the left and right borders, and 20 pixels from +# the top and bottom borders +"crop=in_w-2*10:in_h-2*20" + +# keep only the bottom right quarter of the input image +"crop=in_w/2:in_h/2:in_w/2:in_h/2" + +# crop height for getting Greek harmony +"crop=in_w:1/PHI*in_w" + +# trembling effect +"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" + +# erratic camera effect depending on timestamp +"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)" + +# set x depending on the value of y +"crop=in_w/2:in_h/2:y:10+10*sin(n/10)" + |
Auto-detect crop size. +
+Calculate necessary cropping parameters and prints the recommended +parameters through the logging system. The detected dimensions +correspond to the non-black area of the input video. +
+It accepts the syntax: +
cropdetect[=limit[:round[:reset]]] + |
Threshold, which can be optionally specified from nothing (0) to +everything (255), defaults to 24. +
+Value which the width/height should be divisible by, defaults to +16. The offset is automatically adjusted to center the video. Use 2 to +get only even dimensions (needed for 4:2:2 video). 16 is best when +encoding to most video codecs. +
+Counter that determines after how many frames cropdetect will reset +the previously detected largest video area and start over to detect +the current optimal crop area. Defaults to 0. +
+This can be useful when channel logos distort the video area. 0 +indicates never reset and return the largest area encountered during +playback. +
Suppress a TV station logo by a simple interpolation of the surrounding +pixels. Just set a rectangle covering the logo and watch it disappear +(and sometimes something even uglier appear - your mileage may vary). +
+The filter accepts parameters as a string of the form +"x:y:w:h:band", or as a list of +key=value pairs, separated by ":". +
+The description of the accepted parameters follows. +
+Specify the top left corner coordinates of the logo. They must be +specified. +
+Specify the width and height of the logo to clear. They must be +specified. +
+Specify the thickness of the fuzzy edge of the rectangle (added to +w and h). The default value is 4. +
+When set to 1, a green rectangle is drawn on the screen to simplify +finding the right x, y, w, h parameters, and +band is set to 4. The default value is 0. +
+Some examples follow. +
+delogo=0:0:100:77:10 + |
delogo=x=0:y=0:w=100:h=77:band=10 + |
Attempt to fix small changes in horizontal and/or vertical shift. This +filter helps remove camera shake from hand-holding a camera, bumping a +tripod, moving on a vehicle, etc. +
+The filter accepts parameters as a string of the form +"x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename" +
+A description of the accepted parameters follows. +
+Specify a rectangular area where to limit the search for motion +vectors. +If desired the search for motion vectors can be limited to a +rectangular area of the frame defined by its top left corner, width +and height. These parameters have the same meaning as the drawbox +filter which can be used to visualise the position of the bounding +box. +
+This is useful when simultaneous movement of subjects within the frame +might be confused for camera motion by the motion vector search. +
+If any or all of x, y, w and h are set to -1 +then the full frame is used. This allows later options to be set +without specifying the bounding box for the motion vector search. +
+Default - search the whole frame. +
+Specify the maximum extent of movement in x and y directions in the +range 0-64 pixels. Default 16. +
+Specify how to generate pixels to fill blanks at the edge of the +frame. An integer from 0 to 3 as follows: +
Fill zeroes at blank locations +
Original image at blank locations +
Extruded edge value at blank locations +
Mirrored edge at blank locations +
The default setting is mirror edge at blank locations. +
+Specify the blocksize to use for motion search. Range 4-128 pixels, +default 8. +
+Specify the contrast threshold for blocks. Only blocks with more than +the specified contrast (difference between darkest and lightest +pixels) will be considered. Range 1-255, default 125. +
+Specify the search strategy 0 = exhaustive search, 1 = less exhaustive +search. Default - exhaustive search. +
+If set then a detailed log of the motion search is written to the +specified file. +
+Draw a colored box on the input image. +
+It accepts the syntax: +
drawbox=x:y:width:height:color + |
Specify the top left corner coordinates of the box. Default to 0. +
+Specify the width and height of the box, if 0 they are interpreted as +the input width and height. Default to 0. +
+Specify the color of the box to write, it can be the name of a color +(case insensitive match) or a 0xRRGGBB[AA] sequence. +
Follow some examples: +
# draw a black box around the edge of the input image +drawbox + +# draw a box with color red and an opacity of 50% +drawbox=10:20:200:60:red@0.5" + |
Draw text string or text from specified file on top of video using the +libfreetype library. +
+To enable compilation of this filter you need to configure FFmpeg with
+--enable-libfreetype.
+
The filter also recognizes strftime() sequences in the provided text +and expands them accordingly. Check the documentation of strftime(). +
+The filter accepts parameters as a list of key=value pairs, +separated by ":". +
+The description of the accepted parameters follows. +
+The font file to be used for drawing text. Path must be included. +This parameter is mandatory. +
+The text string to be drawn. The text must be a sequence of UTF-8 +encoded characters. +This parameter is mandatory if no file is specified with the parameter +textfile. +
+A text file containing text to be drawn. The text must be a sequence +of UTF-8 encoded characters. +
+This parameter is mandatory if no text string is specified with the +parameter text. +
+If both text and textfile are specified, an error is thrown. +
+The expressions which specify the offsets where text will be drawn +within the video frame. They are relative to the top/left border of the +output image. +
+The default value of x and y is "0". +
+See below for the list of accepted constants. +
+The font size to be used for drawing text. +The default value of fontsize is 16. +
+The color to be used for drawing fonts. +Either a string (e.g. "red") or in 0xRRGGBB[AA] format +(e.g. "0xff000033"), possibly followed by an alpha specifier. +The default value of fontcolor is "black". +
+The color to be used for drawing box around text. +Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format +(e.g. "0xff00ff"), possibly followed by an alpha specifier. +The default value of boxcolor is "white". +
+Used to draw a box around text using background color. +Value should be either 1 (enable) or 0 (disable). +The default value of box is 0. +
+The x and y offsets for the text shadow position with respect to the +position of the text. They can be either positive or negative +values. Default value for both is "0". +
+The color to be used for drawing a shadow behind the drawn text. It +can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] +form (e.g. "0xff00ff"), possibly followed by an alpha specifier. +The default value of shadowcolor is "black". +
+Flags to be used for loading the fonts. +
+The flags map the corresponding flags supported by libfreetype, and are +a combination of the following values: +
Default value is "render". +
+For more information consult the documentation for the FT_LOAD_* +libfreetype flags. +
+The size in number of spaces to use for rendering the tab. +Default value is 4. +
The parameters for x and y are expressions containing the +following constants: +
+the input width and height +
+the width of the rendered text +
+the height of the rendered text +
+the height of each text line +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (w / h) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
+maximum glyph width, that is the maximum width for all the glyphs +contained in the rendered text +
+maximum glyph height, that is the maximum height for all the glyphs +contained in the rendered text, it is equivalent to ascent - +descent. +
+the maximum distance from the baseline to the highest/upper grid +coordinate used to place a glyph outline point, for all the rendered +glyphs. +It is a positive value, due to the grid’s orientation with the Y axis +upwards. +
+the maximum distance from the baseline to the lowest grid coordinate +used to place a glyph outline point, for all the rendered glyphs. +This is a negative value, due to the grid’s orientation, with the Y axis +upwards. +
+the number of input frame, starting from 0 +
+timestamp expressed in seconds, NAN if the input timestamp is unknown +
+initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used
+with or without text parameter. rate option must be specified.
+Note that timecode options are not effective if FFmpeg is build with
+--disable-avcodec.
+
frame rate (timecode only) +
Some examples follow. +
+drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'" + |
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\ + x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2" + |
Note that the double quotes are not necessary if spaces are not used +within the parameter list. +
+drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2" + |
drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t + |
drawtext=fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t" + |
drawtext=fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent + |
For more information about libfreetype, check: +http://www.freetype.org/. +
+ +Apply fade-in/out effect to input video. +
+It accepts the parameters: +type:start_frame:nb_frames[:options] +
+type specifies if the effect type, can be either "in" for +fade-in, or "out" for a fade-out effect. +
+start_frame specifies the number of the start frame for starting +to apply the fade effect. +
+nb_frames specifies the number of frames for which the fade +effect has to last. At the end of the fade-in effect the output video +will have the same intensity as the input video, at the end of the +fade-out transition the output video will be completely black. +
+options is an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+See type. +
+See start_frame. +
+See nb_frames. +
+If set to 1, fade only alpha channel, if one exists on the input. +Default value is 0. +
A few usage examples follow, usable too as test scenarios. +
# fade in first 30 frames of video +fade=in:0:30 + +# fade out last 45 frames of a 200-frame video +fade=out:155:45 + +# fade in first 25 frames and fade out last 25 frames of a 1000-frame video +fade=in:0:25, fade=out:975:25 + +# make first 5 frames black, then fade in from frame 5-24 +fade=in:5:20 + +# fade in alpha over first 25 frames of video +fade=in:0:25:alpha=1 + |
Transform the field order of the input video. +
+It accepts one parameter which specifies the required field order that +the input interlaced video will be transformed to. The parameter can +assume one of the following values: +
+output bottom field first +
output top field first +
Default value is "tff". +
+Transformation is achieved by shifting the picture content up or down +by one line, and filling the remaining line with appropriate picture content. +This method is consistent with most broadcast field order converters. +
+If the input video is not flagged as being interlaced, or it is already +flagged as being of the required output field order then this filter does +not alter the incoming video. +
+This filter is very useful when converting to or from PAL DV material, +which is bottom field first. +
+For example: +
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv + |
Buffer input images and send them when they are requested. +
+This filter is mainly useful when auto-inserted by the libavfilter +framework. +
+The filter does not take parameters. +
+ +Convert the input video to one of the specified pixel formats. +Libavfilter will try to pick one that is supported for the input to +the next filter. +
+The filter accepts a list of pixel format names, separated by ":", +for example "yuv420p:monow:rgb24". +
+Some examples follow: +
# convert the input video to the format "yuv420p" +format=yuv420p + +# convert the input video to any of the formats in the list +format=yuv420p:yuv444p:yuv410p + |
Apply a frei0r effect to the input video. +
+To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with --enable-frei0r.
+
The filter supports the syntax: +
filter_name[{:|=}param1:param2:...:paramN]
+ |
filter_name is the name to the frei0r effect to load. If the
+environment variable FREI0R_PATH is defined, the frei0r effect
+is searched in each one of the directories specified by the colon
+separated list in FREIOR_PATH, otherwise in the standard frei0r
+paths, which are in this order: ‘HOME/.frei0r-1/lib/’,
+‘/usr/local/lib/frei0r-1/’, ‘/usr/lib/frei0r-1/’.
+
param1, param2, ... , paramN specify the parameters +for the frei0r effect. +
+A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+R/G/B, R, G, and B being float
+numbers from 0.0 to 1.0) or by an av_parse_color() color
+description), a position (specified by the syntax X/Y,
+X and Y being float numbers) and a string.
+
The number and kind of parameters depend on the loaded effect. If an +effect parameter is not specified the default value is set. +
+Some examples follow: +
# apply the distort0r effect, set the first two double parameters +frei0r=distort0r:0.5:0.01 + +# apply the colordistance effect, takes a color as first parameter +frei0r=colordistance:0.2/0.3/0.4 +frei0r=colordistance:violet +frei0r=colordistance:0x112233 + +# apply the perspective effect, specify the top left and top right +# image positions +frei0r=perspective:0.2/0.2:0.8/0.2 + |
For more information see: +http://piksel.org/frei0r +
+ +Fix the banding artifacts that are sometimes introduced into nearly flat +regions by truncation to 8bit color depth. +Interpolate the gradients that should go where the bands are, and +dither them. +
+This filter is designed for playback only. Do not use it prior to +lossy compression, because compression tends to lose the dither and +bring back the bands. +
+The filter takes two optional parameters, separated by ’:’: +strength:radius +
+strength is the maximum amount by which the filter will change +any one pixel. Also the threshold for detecting nearly flat +regions. Acceptable values range from .51 to 255, default value is +1.2, out-of-range values will be clipped to the valid range. +
+radius is the neighborhood to fit the gradient to. A larger +radius makes for smoother gradients, but also prevents the filter from +modifying the pixels near detailed regions. Acceptable values are +8-32, default value is 16, out-of-range values will be clipped to the +valid range. +
+# default parameters +gradfun=1.2:16 + +# omitting radius +gradfun=1.2 + |
Flip the input video horizontally. +
+For example to horizontally flip the input video with ffmpeg:
+
ffmpeg -i in.avi -vf "hflip" out.avi + |
High precision/quality 3d denoise filter. This filter aims to reduce +image noise producing smooth images and making still images really +still. It should enhance compressibility. +
+It accepts the following optional parameters: +luma_spatial:chroma_spatial:luma_tmp:chroma_tmp +
+a non-negative float number which specifies spatial luma strength, +defaults to 4.0 +
+a non-negative float number which specifies spatial chroma strength, +defaults to 3.0*luma_spatial/4.0 +
+a float number which specifies luma temporal strength, defaults to +6.0*luma_spatial/4.0 +
+a float number which specifies chroma temporal strength, defaults to +luma_tmp*chroma_spatial/luma_spatial +
Compute a look-up table for binding each pixel component input value +to an output value, and apply it to input video. +
+lutyuv applies a lookup table to a YUV input video, lutrgb +to an RGB input video. +
+These filters accept in input a ":"-separated list of options, which +specify the expressions used for computing the lookup table for the +corresponding pixel component values. +
+The lut filter requires either YUV or RGB pixel formats in +input, and accepts the options: +
first pixel component +
second pixel component +
third pixel component +
fourth pixel component, corresponds to the alpha component +
The exact component associated to each option depends on the format in +input. +
+The lutrgb filter requires RGB pixel formats in input, and +accepts the options: +
red component +
green component +
blue component +
alpha component +
The lutyuv filter requires YUV pixel formats in input, and +accepts the options: +
Y/luminance component +
U/Cb component +
V/Cr component +
alpha component +
The expressions can contain the following constants and functions: +
+the input width and height +
+input value for the pixel component +
+the input value clipped in the minval-maxval range +
+maximum value for the pixel component +
+minimum value for the pixel component +
+the negated value for the pixel component value clipped in the +minval-maxval range , it corresponds to the expression +"maxval-clipval+minval" +
+the computed value in val clipped in the +minval-maxval range +
+the computed gamma correction value of the pixel component value +clipped in the minval-maxval range, corresponds to the +expression +"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" +
+All expressions default to "val". +
+Some examples follow: +
# negate input video +lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val" +lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" + +# the above is the same as +lutrgb="r=negval:g=negval:b=negval" +lutyuv="y=negval:u=negval:v=negval" + +# negate luminance +lutyuv=y=negval + +# remove chroma components, turns the video into a graytone image +lutyuv="u=128:v=128" + +# apply a luma burning effect +lutyuv="y=2*val" + +# remove green and blue components +lutrgb="g=0:b=0" + +# set a constant alpha channel value on input +format=rgba,lutrgb=a="maxval-minval/2" + +# correct luminance gamma by a 0.5 factor +lutyuv=y=gammaval(0.5) + |
Apply an MPlayer filter to the input video. +
+This filter provides a wrapper around most of the filters of +MPlayer/MEncoder. +
+This wrapper is considered experimental. Some of the wrapped filters +may not work properly and we may drop support for them, as they will +be implemented natively into FFmpeg. Thus you should avoid +depending on them when writing portable scripts. +
+The filters accepts the parameters: +filter_name[:=]filter_params +
+filter_name is the name of a supported MPlayer filter, +filter_params is a string containing the parameters accepted by +the named filter. +
+The list of the currently supported filters follows: +
The parameter syntax and behavior for the listed filters are the same +of the corresponding MPlayer filters. For detailed instructions check +the "VIDEO FILTERS" section in the MPlayer manual. +
+Some examples follow: +
# remove a logo by interpolating the surrounding pixels +mp=delogo=200:200:80:20:1 + +# adjust gamma, brightness, contrast +mp=eq2=1.0:2:0.5 + +# tweak hue and saturation +mp=hue=100:-10 + |
See also mplayer(1), http://www.mplayerhq.hu/. +
+ +Negate input video. +
+This filter accepts an integer in input, if non-zero it negates the +alpha component (if available). The default value in input is 0. +
+ +Force libavfilter not to use any of the specified pixel formats for the +input to the next filter. +
+The filter accepts a list of pixel format names, separated by ":", +for example "yuv420p:monow:rgb24". +
+Some examples follow: +
# force libavfilter to use a format different from "yuv420p" for the +# input to the vflip filter +noformat=yuv420p,vflip + +# convert the input video to any of the formats not contained in the list +noformat=yuv420p:yuv444p:yuv410p + |
Pass the video source unchanged to the output. +
+ +Apply video transform using libopencv. +
+To enable this filter install libopencv library and headers and
+configure FFmpeg with --enable-libopencv.
+
The filter takes the parameters: filter_name{:=}filter_params. +
+filter_name is the name of the libopencv filter to apply. +
+filter_params specifies the parameters to pass to the libopencv +filter. If not specified the default values are assumed. +
+Refer to the official libopencv documentation for more precise +information: +http://opencv.willowgarage.com/documentation/c/image_filtering.html +
+Follows the list of supported libopencv filters. +
+ +Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function cvDilate.
+
It accepts the parameters: struct_el:nb_iterations. +
+struct_el represents a structuring element, and has the syntax: +colsxrows+anchor_xxanchor_y/shape +
+cols and rows represent the number of columns and rows of +the structuring element, anchor_x and anchor_y the anchor +point, and shape the shape for the structuring element, and +can be one of the values "rect", "cross", "ellipse", "custom". +
+If the value for shape is "custom", it must be followed by a +string of the form "=filename". The file with name +filename is assumed to represent a binary image, with each +printable character corresponding to a bright pixel. When a custom +shape is used, cols and rows are ignored, the number +or columns and rows of the read file are assumed instead. +
+The default value for struct_el is "3x3+0x0/rect". +
+nb_iterations specifies the number of times the transform is +applied to the image, and defaults to 1. +
+Follow some example: +
# use the default values +ocv=dilate + +# dilate using a structuring element with a 5x5 cross, iterate two times +ocv=dilate=5x5+2x2/cross:2 + +# read the shape from the file diamond.shape, iterate two times +# the file diamond.shape may contain a pattern of characters like this: +# * +# *** +# ***** +# *** +# * +# the specified cols and rows are ignored (but not the anchor point coordinates) +ocv=0x0+2x2/custom=diamond.shape:2 + |
Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function cvErode.
+
The filter accepts the parameters: struct_el:nb_iterations, +with the same syntax and semantics as the dilate filter. +
+ +Smooth the input video. +
+The filter takes the following parameters: +type:param1:param2:param3:param4. +
+type is the type of smooth filter to apply, and can be one of +the following values: "blur", "blur_no_scale", "median", "gaussian", +"bilateral". The default value is "gaussian". +
+param1, param2, param3, and param4 are +parameters whose meanings depend on smooth type. param1 and +param2 accept integer positive values or 0, param3 and +param4 accept float values. +
+The default value for param1 is 3, the default value for the +other parameters is 0. +
+These parameters correspond to the parameters assigned to the
+libopencv function cvSmooth.
+
Overlay one video on top of another. +
+It takes two inputs and one output, the first input is the "main" +video on which the second input is overlayed. +
+It accepts the parameters: x:y[:options]. +
+x is the x coordinate of the overlayed video on the main video, +y is the y coordinate. x and y are expressions containing +the following parameters: +
+main input width and height +
+same as main_w and main_h +
+overlay input width and height +
+same as overlay_w and overlay_h +
options is an optional list of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+If set to 1, force the filter to accept inputs in the RGB +color space. Default value is 0. +
Be aware that frames are taken from each input video in timestamp +order, hence, if their initial timestamps differ, it is a a good idea +to pass the two inputs through a setpts=PTS-STARTPTS filter to +have them begin in the same zero timestamp, as it does the example for +the movie filter. +
+Follow some examples: +
# draw the overlay at 10 pixels from the bottom right +# corner of the main video. +overlay=main_w-overlay_w-10:main_h-overlay_h-10 + +# insert a transparent PNG logo in the bottom left corner of the input +movie=logo.png [logo]; +[in][logo] overlay=10:main_h-overlay_h-10 [out] + +# insert 2 different transparent PNG logos (second logo on bottom +# right corner): +movie=logo1.png [logo1]; +movie=logo2.png [logo2]; +[in][logo1] overlay=10:H-h-10 [in+logo1]; +[in+logo1][logo2] overlay=W-w-10:H-h-10 [out] + +# add a transparent color layer on top of the main video, +# WxH specifies the size of the main input to the overlay filter +color=red.3:WxH [over]; [in][over] overlay [out] + |
You can chain together more overlays but the efficiency of such +approach is yet to be tested. +
+ +Add paddings to the input image, and places the original input at the +given coordinates x, y. +
+It accepts the following parameters: +width:height:x:y:color. +
+The parameters width, height, x, and y are +expressions containing the following constants: +
+the input video width and height +
+same as in_w and in_h +
+the output width and height, that is the size of the padded area as +specified by the width and height expressions +
+same as out_w and out_h +
+x and y offsets as specified by the x and y +expressions, or NAN if not yet specified +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
Follows the description of the accepted parameters. +
+Specify the size of the output image with the paddings added. If the +value for width or height is 0, the corresponding input size +is used for the output. +
+The width expression can reference the value set by the +height expression, and vice versa. +
+The default value of width and height is 0. +
+Specify the offsets where to place the input image in the padded area +with respect to the top/left border of the output image. +
+The x expression can reference the value set by the y +expression, and vice versa. +
+The default value of x and y is 0. +
+Specify the color of the padded area, it can be the name of a color +(case insensitive match) or a 0xRRGGBB[AA] sequence. +
+The default value of color is "black". +
+Some examples follow: +
+# Add paddings with color "violet" to the input video. Output video +# size is 640x480, the top-left corner of the input video is placed at +# column 0, row 40. +pad=640:480:0:40:violet + +# pad the input to get an output with dimensions increased bt 3/2, +# and put the input video at the center of the padded area +pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2" + +# pad the input to get a squared output with size equal to the maximum +# value between the input width and height, and put the input video at +# the center of the padded area +pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2" + +# pad the input to get a final w/h ratio of 16:9 +pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" + +# for anamorphic video, in order to set the output display aspect ratio, +# it is necessary to use sar in the expression, according to the relation: +# (ih * X / ih) * sar = output_dar +# X = output_dar / sar +pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2" + +# double output size and put the input video in the bottom-right +# corner of the output padded area +pad="2*iw:2*ih:ow-iw:oh-ih" + |
Pixel format descriptor test filter, mainly useful for internal +testing. The output video should be equal to the input video. +
+For example: +
format=monow, pixdesctest + |
can be used to test the monowhite pixel format descriptor definition. +
+ +Scale the input video to width:height[:interl={1|-1}] and/or convert the image format. +
+The parameters width and height are expressions containing +the following constants: +
+the input width and height +
+same as in_w and in_h +
+the output (cropped) width and height +
+same as out_w and out_h +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
If the input image format is different from the format requested by +the next filter, the scale filter will convert the input to the +requested format. +
+If the value for width or height is 0, the respective input +size is used for the output. +
+If the value for width or height is -1, the scale filter will +use, for the respective output size, a value that maintains the aspect +ratio of the input image. +
+The default value of width and height is 0. +
+Valid values for the optional parameter interl are: +
+force interlaced aware scaling +
+select interlaced aware scaling depending on whether the source frames +are flagged as interlaced or not +
Some examples follow: +
# scale the input video to a size of 200x100. +scale=200:100 + +# scale the input to 2x +scale=2*iw:2*ih +# the above is the same as +scale=2*in_w:2*in_h + +# scale the input to half size +scale=iw/2:ih/2 + +# increase the width, and set the height to the same size +scale=3/2*iw:ow + +# seek for Greek harmony +scale=iw:1/PHI*iw +scale=ih*PHI:ih + +# increase the height, and set the width to 3/2 of the height +scale=3/2*oh:3/5*ih + +# increase the size, but make the size a multiple of the chroma +scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub" + +# increase the width to a maximum of 500 pixels, keep the same input aspect ratio +scale='min(500\, iw*3/2):-1' + |
Select frames to pass in output. +
+It accepts in input an expression, which is evaluated for each input +frame. If the expression is evaluated to a non-zero value, the frame +is selected and passed to the output, otherwise it is discarded. +
+The expression can contain the following constants: +
+the sequential number of the filtered frame, starting from 0 +
+the sequential number of the selected frame, starting from 0 +
+the sequential number of the last selected frame, NAN if undefined +
+timebase of the input timestamps +
+the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in TB units, NAN if undefined +
+the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +
+the PTS of the previously filtered video frame, NAN if undefined +
+the PTS of the last previously filtered video frame, NAN if undefined +
+the PTS of the last previously selected video frame, NAN if undefined +
+the PTS of the first video frame in the video, NAN if undefined +
+the time of the first video frame in the video, NAN if undefined +
+the type of the filtered frame, can assume one of the following +values: +
the frame interlace type, can assume one of the following values: +
the frame is progressive (not interlaced) +
the frame is top-field-first +
the frame is bottom-field-first +
1 if the filtered frame is a key-frame, 0 otherwise +
+the position in the file of the filtered frame, -1 if the information +is not available (e.g. for synthetic video) +
The default value of the select expression is "1". +
+Some examples follow: +
+# select all frames in input +select + +# the above is the same as: +select=1 + +# skip all frames: +select=0 + +# select only I-frames +select='eq(pict_type\,I)' + +# select one frame every 100 +select='not(mod(n\,100))' + +# select only frames contained in the 10-20 time interval +select='gte(t\,10)*lte(t\,20)' + +# select only I frames contained in the 10-20 time interval +select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)' + +# select frames with a minimum distance of 10 seconds +select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)' + |
Set the Display Aspect Ratio for the filter output video. +
+This is done by changing the specified Sample (aka Pixel) Aspect +Ratio, according to the following equation: +DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR +
+Keep in mind that this filter does not modify the pixel dimensions of +the video frame. Also the display aspect ratio set by this filter may +be changed by later filters in the filterchain, e.g. in case of +scaling or if another "setdar" or a "setsar" filter is applied. +
+The filter accepts a parameter string which represents the wanted +display aspect ratio. +The parameter can be a floating point number string, or an expression +of the form num:den, where num and den are the +numerator and denominator of the aspect ratio. +If the parameter is not specified, it is assumed the value "0:1". +
+For example to change the display aspect ratio to 16:9, specify: +
setdar=16:9 +# the above is equivalent to +setdar=1.77777 + |
See also the setsar filter documentation. +
+ +Change the PTS (presentation timestamp) of the input video frames. +
+Accept in input an expression evaluated through the eval API, which +can contain the following constants: +
+the presentation timestamp in input +
+the count of the input frame, starting from 0. +
+the PTS of the first video frame +
+tell if the current frame is interlaced +
+original position in the file of the frame, or undefined if undefined +for the current frame +
+previous input PTS +
+previous output PTS +
+Some examples follow: +
+# start counting PTS from zero +setpts=PTS-STARTPTS + +# fast motion +setpts=0.5*PTS + +# slow motion +setpts=2.0*PTS + +# fixed rate 25 fps +setpts=N/(25*TB) + +# fixed rate 25 fps with some jitter +setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))' + |
Set the Sample (aka Pixel) Aspect Ratio for the filter output video. +
+Note that as a consequence of the application of this filter, the +output display aspect ratio will change according to the following +equation: +DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR +
+Keep in mind that the sample aspect ratio set by this filter may be +changed by later filters in the filterchain, e.g. if another "setsar" +or a "setdar" filter is applied. +
+The filter accepts a parameter string which represents the wanted +sample aspect ratio. +The parameter can be a floating point number string, or an expression +of the form num:den, where num and den are the +numerator and denominator of the aspect ratio. +If the parameter is not specified, it is assumed the value "0:1". +
+For example to change the sample aspect ratio to 10:11, specify: +
setsar=10:11 + |
Set the timebase to use for the output frames timestamps. +It is mainly useful for testing timebase configuration. +
+It accepts in input an arithmetic expression representing a rational. +The expression can contain the constants "AVTB" (the +default timebase), and "intb" (the input timebase). +
+The default value for the input is "intb". +
+Follow some examples. +
+# set the timebase to 1/25 +settb=1/25 + +# set the timebase to 1/10 +settb=0.1 + +#set the timebase to 1001/1000 +settb=1+0.001 + +#set the timebase to 2*intb +settb=2*intb + +#set the default timebase value +settb=AVTB + |
Show a line containing various information for each input video frame. +The input video is not modified. +
+The shown line contains a sequence of key/value pairs of the form +key:value. +
+A description of each shown parameter follows: +
+sequential number of the input frame, starting from 0 +
+Presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad. +
+Presentation TimeStamp of the input frame, expressed as a number of +seconds +
+position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic video) +
+pixel format name +
+sample aspect ratio of the input frame, expressed in the form +num/den +
+size of the input frame, expressed in the form +widthxheight +
+interlaced mode ("P" for "progressive", "T" for top field first, "B" +for bottom field first) +
+1 if the frame is a key frame, 0 otherwise +
+picture type of the input frame ("I" for an I-frame, "P" for a
+P-frame, "B" for a B-frame, "?" for unknown type).
+Check also the documentation of the AVPictureType enum and of
+the av_get_picture_type_char function defined in
+‘libavutil/avutil.h’.
+
Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +
+Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, +expressed in the form "[c0 c1 c2 c3]" +
Pass the images of input video on to next video filter as multiple +slices. +
+ffmpeg -i in.avi -vf "slicify=32" out.avi + |
The filter accepts the slice height as parameter. If the parameter is +not specified it will use the default value of 16. +
+Adding this in the beginning of filter chains should make filtering +faster due to better use of the memory cache. +
+ +Pass on the input video to two outputs. Both outputs are identical to +the input video. +
+For example: +
[in] split [splitout1][splitout2]; +[splitout1] crop=100:100:0:0 [cropout]; +[splitout2] pad=200:200:100:100 [padout]; + |
will create two separate outputs from the same input, one cropped and +one padded. +
+ +Select the most representative frame in a given sequence of consecutive frames. +
+It accepts as argument the frames batch size to analyze (default N=100); +in a set of N frames, the filter will pick one of them, and then handle +the next batch of N frames until the end. +
+Since the filter keeps track of the whole frames sequence, a bigger N +value will result in a higher memory usage, so a high value is not recommended. +
+The following example extract one picture each 50 frames: +
thumbnail=50 + |
Complete example of a thumbnail creation with ffmpeg:
+
ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png + |
Perform various types of temporal field interlacing. +
+Frames are counted starting from 1, so the first input frame is +considered odd. +
+This filter accepts a single parameter specifying the mode. Available +modes are: +
+Move odd frames into the upper field, even into the lower field, +generating a double height frame at half framerate. +
+Only output even frames, odd frames are dropped, generating a frame with +unchanged height at half framerate. +
+Only output odd frames, even frames are dropped, generating a frame with +unchanged height at half framerate. +
+Expand each frame to full height, but pad alternate lines with black, +generating a frame with double height at the same input framerate. +
+Interleave the upper field from odd frames with the lower field from +even frames, generating a frame with unchanged height at half framerate. +
+Interleave the lower field from odd frames with the upper field from +even frames, generating a frame with unchanged height at half framerate. +
Default mode is 0. +
+ +Transpose rows with columns in the input video and optionally flip it. +
+It accepts a parameter representing an integer, which can assume the +values: +
+Rotate by 90 degrees counterclockwise and vertically flip (default), that is: +
L.R L.l +. . -> . . +l.r R.r + |
Rotate by 90 degrees clockwise, that is: +
L.R l.L +. . -> . . +l.r r.R + |
Rotate by 90 degrees counterclockwise, that is: +
L.R R.r +. . -> . . +l.r L.l + |
Rotate by 90 degrees clockwise and vertically flip, that is: +
L.R r.R +. . -> . . +l.r l.L + |
Sharpen or blur the input video. +
+It accepts the following parameters: +luma_msize_x:luma_msize_y:luma_amount:chroma_msize_x:chroma_msize_y:chroma_amount +
+Negative values for the amount will blur the input video, while positive +values will sharpen. All parameters are optional and default to the +equivalent of the string ’5:5:1.0:5:5:0.0’. +
+Set the luma matrix horizontal size. It can be an integer between 3 +and 13, default value is 5. +
+Set the luma matrix vertical size. It can be an integer between 3 +and 13, default value is 5. +
+Set the luma effect strength. It can be a float number between -2.0 +and 5.0, default value is 1.0. +
+Set the chroma matrix horizontal size. It can be an integer between 3 +and 13, default value is 5. +
+Set the chroma matrix vertical size. It can be an integer between 3 +and 13, default value is 5. +
+Set the chroma effect strength. It can be a float number between -2.0 +and 5.0, default value is 0.0. +
+# Strong luma sharpen effect parameters
+unsharp=7:7:2.5
+
+# Strong blur of both luma and chroma parameters
+unsharp=7:7:-2:7:7:-2
+
+# Use the default values with |
Flip the input video vertically. +
+ffmpeg -i in.avi -vf "vflip" out.avi + |
Deinterlace the input video ("yadif" means "yet another deinterlacing +filter"). +
+It accepts the optional parameters: mode:parity:auto. +
+mode specifies the interlacing mode to adopt, accepts one of the +following values: +
+output 1 frame for each frame +
output 1 frame for each field +
like 0 but skips spatial interlacing check +
like 1 but skips spatial interlacing check +
Default value is 0. +
+parity specifies the picture field parity assumed for the input +interlaced video, accepts one of the following values: +
+assume top field first +
assume bottom field first +
enable automatic detection +
Default value is -1. +If interlacing is unknown or decoder does not export this information, +top field first will be assumed. +
+auto specifies if deinterlacer should trust the interlaced flag +and only deinterlace frames marked as interlaced +
+deinterlace all frames +
only deinterlace frames marked as interlaced +
Default value is 0. +
+ + +Below is a description of the currently available video sources. +
+ +Buffer video frames, and make them available to the filter chain. +
+This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/vsrc_buffer.h’. +
+It accepts the following parameters: +width:height:pix_fmt_string:timebase_num:timebase_den:sample_aspect_ratio_num:sample_aspect_ratio.den:scale_params +
+All the parameters but scale_params need to be explicitly +defined. +
+Follows the list of the accepted parameters. +
+Specify the width and height of the buffered video frames. +
+A string representing the pixel format of the buffered video frames. +It may be a number corresponding to a pixel format, or a pixel format +name. +
+Specify numerator and denomitor of the timebase assumed by the +timestamps of the buffered frames. +
+Specify numerator and denominator of the sample aspect ratio assumed +by the video frames. +
+Specify the optional parameters to be used for the scale filter which +is automatically inserted when an input change is detected in the +input size or format. +
For example: +
buffer=320:240:yuv410p:1:24:1:1 + |
will instruct the source to accept video frames with size 320x240 and +with format "yuv410p", assuming 1/24 as the timestamps timebase and +square pixels (1:1 sample aspect ratio). +Since the pixel format with name "yuv410p" corresponds to the number 6 +(check the enum PixelFormat definition in ‘libavutil/pixfmt.h’), +this example corresponds to: +
buffer=320:240:6:1:24:1:1 + |
Create a pattern generated by an elementary cellular automaton. +
+The initial state of the cellular automaton can be defined through the +‘filename’, and ‘pattern’ options. If such options are +not specified an initial state is created randomly. +
+At each new frame a new row in the video is filled with the result of +the cellular automaton next generation. The behavior when the whole +frame is filled is defined by the ‘scroll’ option. +
+This source accepts a list of options in the form of +key=value pairs separated by ":". A description of the +accepted options follows. +
+Read the initial cellular automaton state, i.e. the starting row, from +the specified file. +In the file, each non-whitespace character is considered an alive +cell, a newline will terminate the row, and further characters in the +file will be ignored. +
+Read the initial cellular automaton state, i.e. the starting row, from +the specified string. +
+Each non-whitespace character in the string is considered an alive +cell, a newline will terminate the row, and further characters in the +string will be ignored. +
+Set the video rate, that is the number of frames generated per second. +Default is 25. +
+Set the random fill ratio for the initial cellular automaton row. It +is a floating point number value ranging from 0 to 1, defaults to +1/PHI. +
+This option is ignored when a file or a pattern is specified. +
+Set the seed for filling randomly the initial row, must be an integer +included between 0 and UINT32_MAX. If not specified, or if explicitly +set to -1, the filter will try to use a good random seed on a best +effort basis. +
+Set the cellular automaton rule, it is a number ranging from 0 to 255. +Default value is 110. +
+Set the size of the output video. +
+If ‘filename’ or ‘pattern’ is specified, the size is set +by default to the width of the specified initial state row, and the +height is set to width * PHI. +
+If ‘size’ is set, it must contain the width of the specified +pattern string, and the specified pattern will be centered in the +larger row. +
+If a filename or a pattern string is not specified, the size value +defaults to "320x518" (used for a randomly generated initial state). +
+If set to 1, scroll the output upward when all the rows in the output +have been already filled. If set to 0, the new generated row will be +written over the top row just after the bottom row is filled. +Defaults to 1. +
+If set to 1, completely fill the output with generated rows before +outputting the first frame. +This is the default behavior, for disabling set the value to 0. +
+If set to 1, stitch the left and right row edges together. +This is the default behavior, for disabling set the value to 0. +
cellauto=f=pattern:s=200x400 + |
cellauto=ratio=2/3:s=200x200 + |
cellauto=p=@:s=100x400:full=0:rule=18 + |
cellauto=p='@@ @ @@':s=100x400:full=0:rule=18 + |
Provide an uniformly colored input. +
+It accepts the following parameters: +color:frame_size:frame_rate +
+Follows the description of the accepted parameters. +
+Specify the color of the source. It can be the name of a color (case +insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an +alpha specifier. The default value is "black". +
+Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. The +default value is "320x240". +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+For example the following graph description will generate a red source +with an opacity of 0.2, with size "qcif" and a frame rate of 10 +frames per second, which will be overlayed over the source connected +to the pad with identifier "in". +
+"color=red@0.2:qcif:10 [color]; [in][color] overlay [out]" + |
Read a video stream from a movie container. +
+It accepts the syntax: movie_name[:options] where +movie_name is the name of the resource to read (not necessarily +a file but also a device or a stream accessed through some protocol), +and options is an optional sequence of key=value +pairs, separated by ":". +
+The description of the accepted options follows. +
+Specifies the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +
+Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+av_strtod so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+
Specifies the index of the video stream to read. If the value is -1, +the best suited video stream will be automatically selected. Default +value is "-1". +
+This filter allows to overlay a second video on top of main input of +a filtergraph as shown in this graph: +
input -----------> deltapts0 --> overlay --> output + ^ + | +movie --> scale--> deltapts1 -------+ + |
Some examples follow: +
# skip 3.2 seconds from the start of the avi file in.avi, and overlay it +# on top of the input labelled as "in". +movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [movie]; +[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out] + +# read from a video4linux2 device, and overlay it on top of the input +# labelled as "in" +movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [movie]; +[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out] + + |
Generate various test patterns, as generated by the MPlayer test filter. +
+The size of the generated video is fixed, and is 256x256. +This source is useful in particular for testing encoding features. +
+This source accepts an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+Set the video duration of the sourced video. The accepted syntax is: +
[-]HH[:MM[:SS[.m...]]] +[-]S+[.m...] + |
See also the function av_parse_time().
+
If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +
+Set the number or the name of the test to perform. Supported tests are: +
Default value is "all", which will cycle through the list of all tests. +
For example the following: +
testsrc=t=dc_luma + |
will generate a "dc_luma" test pattern. +
+ +Provide a frei0r source. +
+To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with --enable-frei0r.
+
The source supports the syntax: +
size:rate:src_name[{=|:}param1:param2:...:paramN]
+ |
size is the size of the video to generate, may be a string of the +form widthxheight or a frame size abbreviation. +rate is the rate of the video to generate, may be a string of +the form num/den or a frame rate abbreviation. +src_name is the name to the frei0r source to load. For more +information regarding frei0r and how to set the parameters read the +section frei0r in the description of the video filters. +
+Some examples follow: +
# generate a frei0r partik0l source with size 200x200 and frame rate 10 +# which is overlayed on the overlay filter main input +frei0r_src=200x200:10:partik0l=1234 [overlay]; [in][overlay] overlay + |
Generate a life pattern. +
+This source is based on a generalization of John Conway’s life game. +
+The sourced input represents a life grid, each pixel represents a cell +which can be in one of two possible states, alive or dead. Every cell +interacts with its eight neighbours, which are the cells that are +horizontally, vertically, or diagonally adjacent. +
+At each interaction the grid evolves according to the adopted rule, +which specifies the number of neighbor alive cells which will make a +cell stay alive or born. The ‘rule’ option allows to specify +the rule to adopt. +
+This source accepts a list of options in the form of +key=value pairs separated by ":". A description of the +accepted options follows. +
+Set the file from which to read the initial grid state. In the file, +each non-whitespace character is considered an alive cell, and newline +is used to delimit the end of each row. +
+If this option is not specified, the initial grid is generated +randomly. +
+Set the video rate, that is the number of frames generated per second. +Default is 25. +
+Set the random fill ratio for the initial random grid. It is a +floating point number value ranging from 0 to 1, defaults to 1/PHI. +It is ignored when a file is specified. +
+Set the seed for filling the initial random grid, must be an integer +included between 0 and UINT32_MAX. If not specified, or if explicitly +set to -1, the filter will try to use a good random seed on a best +effort basis. +
+Set the life rule. +
+A rule can be specified with a code of the kind "SNS/BNB", +where NS and NB are sequences of numbers in the range 0-8, +NS specifies the number of alive neighbor cells which make a +live cell stay alive, and NB the number of alive neighbor cells +which make a dead cell to become alive (i.e. to "born"). +"s" and "b" can be used in place of "S" and "B", respectively. +
+Alternatively a rule can be specified by an 18-bits integer. The 9
+high order bits are used to encode the next cell state if it is alive
+for each number of neighbor alive cells, the low order bits specify
+the rule for "borning" new cells. Higher order bits encode for an
+higher number of neighbor cells.
+For example the number 6153 = (12<<9)+9 specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+
Default value is "S23/B3", which is the original Conway’s game of life +rule, and will keep a cell alive if it has 2 or 3 neighbor alive +cells, and will born a new cell if there are three alive cells around +a dead cell. +
+Set the size of the output video. +
+If ‘filename’ is specified, the size is set by default to the +same size of the input file. If ‘size’ is set, it must contain +the size specified in the input file, and the initial grid defined in +that file is centered in the larger resulting area. +
+If a filename is not specified, the size value defaults to "320x240" +(used for a randomly generated initial grid). +
+If set to 1, stitch the left and right grid edges together, and the +top and bottom edges also. Defaults to 1. +
+Set cell mold speed. If set, a dead cell will go from ‘death_color’ to +‘mold_color’ with a step of ‘mold’. ‘mold’ can have a +value from 0 to 255. +
+Set the color of living (or new born) cells. +
+Set the color of dead cells. If ‘mold’ is set, this is the first color +used to represent a dead cell. +
+Set mold color, for definitely dead and moldy cells. +
life=f=pattern:s=300x300 + |
life=ratio=2/3:s=200x200 + |
life=rule=S14/B34 + |
ffplay:
+ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16 + |
The nullsrc source returns unprocessed video frames. It is
+mainly useful to be employed in analysis / debugging tools, or as the
+source for filters which ignore the input data.
+
The rgbtestsrc source generates an RGB test pattern useful for
+detecting RGB vs BGR issues. You should see a red, green and blue
+stripe from top to bottom.
+
The testsrc source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+
These sources accept an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. The +default value is "320x240". +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+Set the sample aspect ratio of the sourced video. +
+Set the video duration of the sourced video. The accepted syntax is: +
[-]HH[:MM[:SS[.m...]]] +[-]S+[.m...] + |
See also the function av_parse_time().
+
If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +
+Set the number of decimals to show in the timestamp, only used in the
+testsrc source.
+
The displayed timestamp value will correspond to the original +timestamp value multiplied by the power of 10 of the specified +value. Default value is 0. +
For example the following: +
testsrc=duration=5.3:size=qcif:rate=10 + |
will generate a video with a duration of 5.3 seconds, with size +176x144 and a frame rate of 10 frames per second. +
+If the input content is to be ignored, nullsrc can be used. The
+following command generates noise in the luminance plane by employing
+the mp=geq filter:
+
nullsrc=s=256x256, mp=geq=random(1)*255:128:128 + |
Below is a description of the currently available video sinks. +
+ +Buffer video frames, and make them available to the end of the filter +graph. +
+This sink is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’. +
+It does not require a string parameter in input, but you need to
+specify a pointer to a list of supported pixel formats terminated by
+-1 in the opaque parameter provided to avfilter_init_filter
+when initializing this sink.
+
Null video sink, do absolutely nothing with the input video. It is +mainly useful as a template and to be employed in analysis / debugging +tools. +
+ + + +The generic syntax is: +
+ffprobe [options] [‘input_file’] + |
ffprobe gathers information from multimedia streams and prints it in +human- and machine-readable fashion. +
+For example it can be used to check the format of the container used +by a multimedia stream and the format and type of each media stream +contained in it. +
+If a filename is specified in input, ffprobe will try to open and +probe the file content. If the file cannot be opened or recognized as +a multimedia file, a positive exit code is returned. +
+ffprobe may be employed both as a standalone application or in +combination with a textual filter, which may perform more +sophisticated processing, e.g. statistical processing or plotting. +
+Options are used to list some of the formats supported by ffprobe or +for specifying which information to display, and for setting how +ffprobe will show it. +
+ffprobe output is designed to be easily parsable by a textual filter, +and consists of one or more sections of a form defined by the selected +writer, which is specified by the ‘print_format’ option. +
+Metadata tags stored in the container or in the streams are recognized +and printed in the corresponding "FORMAT" or "STREAM" section. +
+ + +All the numerical options, if not specified otherwise, accept in input +a string representing a number, which may contain one of the +International System number postfixes, for example ’K’, ’M’, ’G’. +If ’i’ is appended after the postfix, powers of 2 are used instead of +powers of 10. The ’B’ postfix multiplies the value for 8, and can be +appended after another postfix or used alone. This allows using for +example ’KB’, ’MiB’, ’G’ and ’B’ as postfix. +
+Options which do not take arguments are boolean options, and set the +corresponding value to true. They can be set to false by prefixing +with "no" the option name, for example using "-nofoo" in the +command line will set to false the boolean option with name "foo". +
+ +Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers +are used to precisely specify which stream(s) does a given option belong to. +
+A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. -codec:a:1 ac3 option contains
+a:1 stream specifer, which matches the second audio stream. Therefore it
+would select the ac3 codec for the second audio stream.
+
A stream specifier can match several stream, the option is then applied to all
+of them. E.g. the stream specifier in -b:a 128k matches all audio
+streams.
+
An empty stream specifier matches all streams, for example -codec copy
+or -codec: copy would copy all the streams without reencoding.
+
Possible forms of stream specifiers are: +
Matches the stream with this index. E.g. -threads:1 4 would set the
+thread count for the second stream to 4.
+
stream_type is one of: ’v’ for video, ’a’ for audio, ’s’ for subtitle, +’d’ for data and ’t’ for attachments. If stream_index is given, then +matches stream number stream_index of this type. Otherwise matches all +streams of this type. +
If stream_index is given, then matches stream number stream_index in +program with id program_id. Otherwise matches all streams in this program. +
These options are shared amongst the av* tools. +
+Show license. +
+Show help. +
+Show version. +
+Show available formats. +
+The fields preceding the format names have the following meanings: +
Decoding available +
Encoding available +
Show available codecs. +
+The fields preceding the codec names have the following meanings: +
Decoding available +
Encoding available +
Video/audio/subtitle codec +
Codec supports slices +
Codec supports direct rendering +
Codec can handle input truncated at random locations instead of only at frame boundaries +
Show available bitstream filters. +
+Show available protocols. +
+Show available libavfilter filters. +
+Show available pixel formats. +
+Show available sample formats. +
+Set the logging level used by the library. +loglevel is a number or a string containing one of the following values: +
By default the program logs to stderr, if coloring is supported by the
+terminal, colors are used to mark errors and warnings. Log coloring
+can be disabled setting the environment variable
+AV_LOG_FORCE_NOCOLOR or NO_COLOR, or can be forced setting
+the environment variable AV_LOG_FORCE_COLOR.
+The use of the environment variable NO_COLOR is deprecated and
+will be dropped in a following FFmpeg version.
+
Dump full command line and console output to a file named
+program-YYYYMMDD-HHMMSS.log in the current
+directory.
+This file can be useful for bug reports.
+It also implies -loglevel verbose.
+
Note: setting the environment variable FFREPORT to any value has the
+same effect.
+
These options are provided directly by the libavformat, libavdevice and +libavcodec libraries. To see the list of available AVOptions, use the +‘-help’ option. They are separated into two categories: +
These options can be set for any container, codec or device. Generic options +are listed under AVFormatContext options for containers/devices and under +AVCodecContext options for codecs. +
These options are specific to the given container, device or codec. Private +options are listed under their corresponding containers/devices/codecs. +
For example to write an ID3v2.3 header instead of a default ID3v2.4 to +an MP3 file, use the ‘id3v2_version’ private option of the MP3 +muxer: +
ffmpeg -i input.flac -id3v2_version 3 out.mp3 + |
All codec AVOptions are obviously per-stream, so the chapter on stream +specifiers applies to them +
+Note ‘-nooption’ syntax cannot be used for boolean AVOptions, +use ‘-option 0’/‘-option 1’. +
+Note2 old undocumented way of specifying per-stream AVOptions by prepending +v/a/s to the options name is now obsolete and will be removed soon. +
+ +Force format to use. +
+Show the unit of the displayed values. +
+Use SI prefixes for the displayed values. +Unless the "-byte_binary_prefix" option is used all the prefixes +are decimal. +
+Force the use of binary prefixes for byte values. +
+Use sexagesimal format HH:MM:SS.MICROSECONDS for time values. +
+Prettify the format of the displayed values, it corresponds to the +options "-unit -prefix -byte_binary_prefix -sexagesimal". +
+Set the output printing format. +
+writer_name specifies the name of the writer, and +writer_options specifies the options to be passed to the writer. +
+For example for printing the output in JSON format, specify: +
-print_format json + |
For more details on the available output printing formats, see the +Writers section below. +
+Show information about the error found when trying to probe the input. +
+The error information is printed within a section with name "ERROR". +
+Show information about the container format of the input multimedia +stream. +
+All the container format information is printed within a section with +name "FORMAT". +
+Show information about each packet contained in the input multimedia +stream. +
+The information for each single packet is printed within a dedicated +section with name "PACKET". +
+Show information about each frame contained in the input multimedia +stream. +
+The information for each single frame is printed within a dedicated +section with name "FRAME". +
+Show information about each media stream contained in the input +multimedia stream. +
+Each media stream information is printed within a dedicated section +with name "STREAM". +
+Show private data, that is data depending on the format of the +particular shown element. +This option is enabled by default, but you may need to disable it +for specific uses, for example when creating XSD-compliant XML output. +
+Show information related to program version. +
+Version information is printed within a section with name +"PROGRAM_VERSION". +
+Show information related to library versions. +
+Version information for each library is printed within a section with +name "LIBRARY_VERSION". +
+Show information related to program and library versions. This is the +equivalent of setting both ‘-show_program_version’ and +‘-show_library_versions’ options. +
+Read input_file. +
+A writer defines the output format adopted by ffprobe, and will be
+used for printing all the parts of the output.
+
A writer may accept one or more arguments, which specify the options to +adopt. +
+A description of the currently available writers follows. +
+ +Default format. +
+Print each section in the form: +
[SECTION] +key1=val1 +... +keyN=valN +[/SECTION] + |
Metadata tags are printed as a line in the corresponding FORMAT or +STREAM section, and are prefixed by the string "TAG:". +
+ +Compact format. +
+Each section is printed on a single line. +If no option is specifid, the output has the form: +
section|key1=val1| ... |keyN=valN + |
Metadata tags are printed in the corresponding "format" or "stream" +section. A metadata tag key, if printed, is prefixed by the string +"tag:". +
+This writer accepts options as a list of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Specify the character to use for separating fields in the output line. +It must be a single printable character, it is "|" by default. +
+If set to 1 specify not to print the key of each field. Its default +value is 0. +
+Set the escape mode to use, default to "c". +
+It can assume one of the following values: +
Perform C-like escaping. Strings containing a newline (’\n’) or +carriage return (’\r’), the escaping character (’\’) or the item +separator character SEP are escaped using C-like fashioned +escaping, so that a newline is converted to the sequence "\n", a +carriage return to "\r", ’\’ to "\\" and the separator SEP is +converted to "\SEP". +
+Perform CSV-like escaping, as described in RFC4180. Strings +containing a newline (’\n’), a carriage return (’\r’), a double quote +(’"’), or SEP are enclosed in double-quotes. +
+Perform no escaping. +
CSV format. +
+This writer is equivalent to
+compact=item_sep=,:nokey=1:escape=csv.
+
JSON based format. +
+Each section is printed using JSON notation. +
+This writer accepts options as a list of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+If set to 1 enable compact output, that is each section will be +printed on a single line. Default value is 0. +
For more information about JSON, see http://www.json.org/. +
+ +XML based format. +
+The XML output is described in the XML schema description file +‘ffprobe.xsd’ installed in the FFmpeg datadir. +
+Note that the output issued will be compliant to the +‘ffprobe.xsd’ schema only when no special global output options +(‘unit’, ‘prefix’, ‘byte_binary_prefix’, +‘sexagesimal’ etc.) are specified. +
+This writer accepts options as a list of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+If set to 1 specify if the output should be fully qualified. Default +value is 0. +This is required for generating an XML file which can be validated +through an XSD file. +
+If set to 1 perform more checks for ensuring that the output is XSD +compliant. Default value is 0. +This option automatically sets ‘fully_qualified’ to 1. +
For more information about the XML format, see +http://www.w3.org/XML/. +
+ +ffprobe supports Timecode extraction:
+
Decoders are configured elements in FFmpeg which allow the decoding of +multimedia streams. +
+When you configure your FFmpeg build, all the supported native decoders
+are enabled by default. Decoders requiring an external library must be enabled
+manually via the corresponding --enable-lib option. You can list all
+available decoders using the configure option --list-decoders.
+
You can disable all the decoders with the configure option
+--disable-decoders and selectively enable / disable single decoders
+with the options --enable-decoder=DECODER /
+--disable-decoder=DECODER.
+
The option -codecs of the ff* tools will display the list of
+enabled decoders.
+
A description of some of the currently available video decoders +follows. +
+ +Raw video decoder. +
+This decoder decodes rawvideo streams. +
+ +Specify the assumed field type of the input video. +
the video is assumed to be progressive (default) +
bottom-field-first is assumed +
top-field-first is assumed +
Internal wave synthetizer. +
+This decoder generates wave patterns according to predefined sequences. Its +use is purely internal and the format of the data it accepts is not publicly +documented. +
+ +Demuxers are configured elements in FFmpeg which allow to read the +multimedia streams from a particular type of file. +
+When you configure your FFmpeg build, all the supported demuxers +are enabled by default. You can list all available ones using the +configure option "–list-demuxers". +
+You can disable all the demuxers using the configure option +"–disable-demuxers", and selectively enable a single demuxer with +the option "–enable-demuxer=DEMUXER", or disable it +with the option "–disable-demuxer=DEMUXER". +
+The option "-formats" of the ff* tools will display the list of +enabled demuxers. +
+The description of some of the currently available demuxers follows. +
+ +Image file demuxer. +
+This demuxer reads from a list of image files specified by a pattern. +
+The pattern may contain the string "%d" or "%0Nd", which +specifies the position of the characters representing a sequential +number in each filename matched by the pattern. If the form +"%d0Nd" is used, the string representing the number in each +filename is 0-padded and N is the total number of 0-padded +digits representing the number. The literal character ’%’ can be +specified in the pattern with the string "%%". +
+If the pattern contains "%d" or "%0Nd", the first filename of +the file list specified by the pattern must contain a number +inclusively contained between 0 and 4, all the following numbers must +be sequential. This limitation may be hopefully fixed. +
+The pattern may contain a suffix which is used to automatically +determine the format of the images contained in the files. +
+For example the pattern "img-%03d.bmp" will match a sequence of +filenames of the form ‘img-001.bmp’, ‘img-002.bmp’, ..., +‘img-010.bmp’, etc.; the pattern "i%%m%%g-%d.jpg" will match a +sequence of filenames of the form ‘i%m%g-1.jpg’, +‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, etc. +
+The size, the pixel format, and the format of each image must be the +same for all the files in the sequence. +
+The following example shows how to use ffmpeg for creating a
+video from the images in the file sequence ‘img-001.jpeg’,
+‘img-002.jpeg’, ..., assuming an input frame rate of 10 frames per
+second:
+
ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv + |
Note that the pattern must not necessarily contain "%d" or +"%0Nd", for example to convert a single image file +‘img.jpeg’ you can employ the command: +
ffmpeg -i img.jpeg img.png + |
Apple HTTP Live Streaming demuxer. +
+This demuxer presents all AVStreams from all variant streams. +The id field is set to the bitrate variant index number. By setting +the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), +the caller can decide which variant streams to actually receive. +The total bitrate of the variant that the stream belongs to is +available in a metadata key named "variant_bitrate". +
+ +SBaGen script demuxer. +
+This demuxer reads the script language used by SBaGen +http://uazu.net/sbagen/ to generate binaural beats sessions. A SBG +script looks like that: +
-SE +a: 300-2.5/3 440+4.5/0 +b: 300-2.5/0 440+4.5/3 +off: - +NOW == a ++0:07:00 == b ++0:14:00 == a ++0:21:00 == b ++0:30:00 off + |
A SBG script can mix absolute and relative timestamps. If the script uses +either only absolute timestamps (including the script start time) or only +relative ones, then its layout is fixed, and the conversion is +straightforward. On the other hand, if the script mixes both kind of +timestamps, then the NOW reference for relative timestamps will be +taken from the current time of day at the time the script is read, and the +script layout will be frozen according to that reference. That means that if +the script is directly played, the actual times will match the absolute +timestamps up to the sound controller’s clock accuracy, but if the user +somehow pauses the playback or seeks, all times will be shifted accordingly. +
+ +Protocols are configured elements in FFmpeg which allow to access +resources which require the use of a particular protocol. +
+When you configure your FFmpeg build, all the supported protocols are +enabled by default. You can list all available ones using the +configure option "–list-protocols". +
+You can disable all the protocols using the configure option +"–disable-protocols", and selectively enable a protocol using the +option "–enable-protocol=PROTOCOL", or you can disable a +particular protocol using the option +"–disable-protocol=PROTOCOL". +
+The option "-protocols" of the ff* tools will display the list of +supported protocols. +
+A description of the currently available protocols follows. +
+ +Read Apple HTTP Live Streaming compliant segmented stream as +a uniform one. The M3U8 playlists describing the segments can be +remote HTTP resources or local files, accessed using the standard +file protocol. +HTTP is default, specific protocol can be declared by specifying +"+proto" after the applehttp URI scheme name, where proto +is either "file" or "http". +
+applehttp://host/path/to/remote/resource.m3u8 +applehttp+http://host/path/to/remote/resource.m3u8 +applehttp+file://path/to/local/resource.m3u8 + |
Physical concatenation protocol. +
+Allow to read and seek from many resource in sequence as if they were +a unique resource. +
+A URL accepted by this protocol has the syntax: +
concat:URL1|URL2|...|URLN + |
where URL1, URL2, ..., URLN are the urls of the +resource to be concatenated, each one possibly specifying a distinct +protocol. +
+For example to read a sequence of files ‘split1.mpeg’,
+‘split2.mpeg’, ‘split3.mpeg’ with ffplay use the
+command:
+
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg + |
Note that you may need to escape the character "|" which is special for +many shells. +
+ +File access protocol. +
+Allow to read from or read to a file. +
+For example to read from a file ‘input.mpeg’ with ffmpeg
+use the command:
+
ffmpeg -i file:input.mpeg output.mpeg + |
The ff* tools default to the file protocol, that is a resource +specified with the name "FILE.mpeg" is interpreted as the URL +"file:FILE.mpeg". +
+ +Gopher protocol. +
+ +HTTP (Hyper Text Transfer Protocol). +
+ +MMS (Microsoft Media Server) protocol over TCP. +
+ +MMS (Microsoft Media Server) protocol over HTTP. +
+The required syntax is: +
mmsh://server[:port][/app][/playpath] + |
MD5 output protocol. +
+Computes the MD5 hash of the data to be written, and on close writes +this to the designated output or stdout if none is specified. It can +be used to test muxers without writing an actual file. +
+Some examples follow. +
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. +ffmpeg -i input.flv -f avi -y md5:output.avi.md5 + +# Write the MD5 hash of the encoded AVI file to stdout. +ffmpeg -i input.flv -f avi -y md5: + |
Note that some formats (typically MOV) require the output protocol to +be seekable, so they will fail with the MD5 output protocol. +
+ +UNIX pipe access protocol. +
+Allow to read and write from UNIX pipes. +
+The accepted syntax is: +
pipe:[number] + |
number is the number corresponding to the file descriptor of the +pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If number +is not specified, by default the stdout file descriptor will be used +for writing, stdin for reading. +
+For example to read from stdin with ffmpeg:
+
cat test.wav | ffmpeg -i pipe:0 +# ...this is the same as... +cat test.wav | ffmpeg -i pipe: + |
For writing to stdout with ffmpeg:
+
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi +# ...this is the same as... +ffmpeg -i test.wav -f avi pipe: | cat > test.avi + |
Note that some formats (typically MOV), require the output protocol to +be seekable, so they will fail with the pipe output protocol. +
+ +Real-Time Messaging Protocol. +
+The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia +content across a TCP/IP network. +
+The required syntax is: +
rtmp://server[:port][/app][/playpath] + |
The accepted parameters are: +
The address of the RTMP server. +
+The number of the TCP port to use (by default is 1935). +
+It is the name of the application to access. It usually corresponds to +the path where the application is installed on the RTMP server +(e.g. ‘/ondemand/’, ‘/flash/live/’, etc.). +
+It is the path or name of the resource to play with reference to the +application specified in app, may be prefixed by "mp4:". +
+For example to read with ffplay a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+
ffplay rtmp://myserver/vod/sample + |
Real-Time Messaging Protocol and its variants supported through +librtmp. +
+Requires the presence of the librtmp headers and library during +configuration. You need to explicitly configure the build with +"–enable-librtmp". If enabled this will replace the native RTMP +protocol. +
+This protocol provides most client functions and a few server +functions needed to support RTMP, RTMP tunneled in HTTP (RTMPT), +encrypted RTMP (RTMPE), RTMP over SSL/TLS (RTMPS) and tunneled +variants of these encrypted types (RTMPTE, RTMPTS). +
+The required syntax is: +
rtmp_proto://server[:port][/app][/playpath] options + |
where rtmp_proto is one of the strings "rtmp", "rtmpt", "rtmpe", +"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and +server, port, app and playpath have the same +meaning as specified for the RTMP native protocol. +options contains a list of space-separated options of the form +key=val. +
+See the librtmp manual page (man 3 librtmp) for more information. +
+For example, to stream a file in real-time to an RTMP server using
+ffmpeg:
+
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream + |
To play the same stream using ffplay:
+
ffplay "rtmp://myserver/live/mystream live=1" + |
Real-Time Protocol. +
+ +RTSP is not technically a protocol handler in libavformat, it is a demuxer +and muxer. The demuxer supports both normal RTSP (with data transferred +over RTP; this is used by e.g. Apple and Microsoft) and Real-RTSP (with +data transferred over RDT). +
+The muxer can be used to send a stream using RTSP ANNOUNCE to a server +supporting it (currently Darwin Streaming Server and Mischa Spiegelmock’s +RTSP server). +
+The required syntax for a RTSP url is: +
rtsp://hostname[:port]/path + |
The following options (set on the ffmpeg/ffplay command
+line, or set in code via AVOptions or in avformat_open_input),
+are supported:
+
Flags for rtsp_transport:
+
Use UDP as lower transport protocol. +
+Use TCP (interleaving within the RTSP control channel) as lower +transport protocol. +
+Use UDP multicast as lower transport protocol. +
+Use HTTP tunneling as lower transport protocol, which is useful for +passing proxies. +
Multiple lower transport protocols may be specified, in that case they are
+tried one at a time (if the setup of one fails, the next one is tried).
+For the muxer, only the tcp and udp options are supported.
+
Flags for rtsp_flags:
+
Accept packets only from negotiated peer address and port. +
When receiving data over UDP, the demuxer tries to reorder received packets
+(since they may arrive out of order, or packets may get lost totally). In
+order for this to be enabled, a maximum delay must be specified in the
+max_delay field of AVFormatContext.
+
When watching multi-bitrate Real-RTSP streams with ffplay, the
+streams to display can be chosen with -vst n and
+-ast n for video and audio respectively, and can be switched
+on the fly by pressing v and a.
+
Example command lines: +
+To watch a stream over UDP, with a max reordering delay of 0.5 seconds: +
+ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4 + |
To watch a stream tunneled over HTTP: +
+ffplay -rtsp_transport http rtsp://server/video.mp4 + |
To send a stream in realtime to a RTSP server, for others to watch: +
+ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp + |
Session Announcement Protocol (RFC 2974). This is not technically a +protocol handler in libavformat, it is a muxer and demuxer. +It is used for signalling of RTP streams, by announcing the SDP for the +streams regularly on a separate port. +
+ +The syntax for a SAP url given to the muxer is: +
sap://destination[:port][?options] + |
The RTP packets are sent to destination on port port,
+or to port 5004 if no port is specified.
+options is a &-separated list. The following options
+are supported:
+
Specify the destination IP address for sending the announcements to. +If omitted, the announcements are sent to the commonly used SAP +announcement multicast address 224.2.127.254 (sap.mcast.net), or +ff0e::2:7ffe if destination is an IPv6 address. +
+Specify the port to send the announcements on, defaults to +9875 if not specified. +
+Specify the time to live value for the announcements and RTP packets, +defaults to 255. +
+If set to 1, send all RTP streams on the same port pair. If zero (the +default), all streams are sent on unique ports, with each stream on a +port 2 numbers higher than the previous. +VLC/Live555 requires this to be set to 1, to be able to receive the stream. +The RTP stack in libavformat for receiving requires all streams to be sent +on unique ports. +
Example command lines follow. +
+To broadcast a stream on the local subnet, for watching in VLC: +
+ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1 + |
Similarly, for watching in ffplay:
+
ffmpeg -re -i input -f sap sap://224.0.0.255 + |
And for watching in ffplay, over IPv6:
+
ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4] + |
The syntax for a SAP url given to the demuxer is: +
sap://[address][:port] + |
address is the multicast address to listen for announcements on, +if omitted, the default 224.2.127.254 (sap.mcast.net) is used. port +is the port that is listened on, 9875 if omitted. +
+The demuxers listens for announcements on the given address and port. +Once an announcement is received, it tries to receive that particular stream. +
+Example command lines follow. +
+To play back the first stream announced on the normal SAP multicast address: +
+ffplay sap:// + |
To play back the first stream announced on one the default IPv6 SAP multicast address: +
+ffplay sap://[ff0e::2:7ffe] + |
Trasmission Control Protocol. +
+The required syntax for a TCP url is: +
tcp://hostname:port[?options] + |
Listen for an incoming connection +
+ffmpeg -i input -f format tcp://hostname:port?listen +ffplay tcp://hostname:port + |
User Datagram Protocol. +
+The required syntax for a UDP url is: +
udp://hostname:port[?options] + |
options contains a list of &-seperated options of the form key=val. +Follow the list of supported options. +
+set the UDP buffer size in bytes +
+override the local UDP port to bind with +
+Choose the local IP address. This is useful e.g. if sending multicast +and the host has multiple interfaces, where the user can choose +which interface to send on by specifying the IP address of that interface. +
+set the size in bytes of UDP packets +
+explicitly allow or disallow reusing UDP sockets +
+set the time to live value (for multicast only) +
+Initialize the UDP socket with connect(). In this case, the
+destination address can’t be changed with ff_udp_set_remote_url later.
+If the destination address isn’t known at the start, this option can
+be specified in ff_udp_set_remote_url, too.
+This allows finding out the source address for the packets with getsockname,
+and makes writes return with AVERROR(ECONNREFUSED) if "destination
+unreachable" is received.
+For receiving, this gives the benefit of only receiving packets from
+the specified peer address/port.
+
Some usage examples of the udp protocol with ffmpeg follow.
+
To stream over UDP to a remote endpoint: +
ffmpeg -i input -f format udp://hostname:port + |
To stream in mpegts format over UDP using 188 sized UDP packets, using a large input buffer: +
ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535 + |
To receive over UDP from a remote endpoint: +
ffmpeg -i udp://[multicast-address]:port + |
Input devices are configured elements in FFmpeg which allow to access +the data coming from a multimedia device attached to your system. +
+When you configure your FFmpeg build, all the supported input devices +are enabled by default. You can list all available ones using the +configure option "–list-indevs". +
+You can disable all the input devices using the configure option +"–disable-indevs", and selectively enable an input device using the +option "–enable-indev=INDEV", or you can disable a particular +input device using the option "–disable-indev=INDEV". +
+The option "-formats" of the ff* tools will display the list of +supported input devices (amongst the demuxers). +
+A description of the currently available input devices follows. +
+ +ALSA (Advanced Linux Sound Architecture) input device. +
+To enable this input device during configuration you need libasound +installed on your system. +
+This device allows capturing from an ALSA device. The name of the +device to capture has to be an ALSA card identifier. +
+An ALSA identifier has the syntax: +
hw:CARD[,DEV[,SUBDEV]] + |
where the DEV and SUBDEV components are optional. +
+The three arguments (in order: CARD,DEV,SUBDEV) +specify card number or identifier, device number and subdevice number +(-1 means any). +
+To see the list of cards currently recognized by your system check the +files ‘/proc/asound/cards’ and ‘/proc/asound/devices’. +
+For example to capture with ffmpeg from an ALSA device with
+card id 0, you may run the command:
+
ffmpeg -f alsa -i hw:0 alsaout.wav + |
For more information see: +http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html +
+ +BSD video input device. +
+ +Windows DirectShow input device. +
+DirectShow support is enabled when FFmpeg is built with mingw-w64. +Currently only audio and video devices are supported. +
+Multiple devices may be opened as separate inputs, but they may also be +opened on the same input, which should improve synchronism between them. +
+The input name should be in the format: +
+TYPE=NAME[:TYPE=NAME] + |
where TYPE can be either audio or video, +and NAME is the device’s name. +
+ +If no options are specified, the device’s defaults are used. +If the device does not support the requested options, it will +fail to open. +
+Set the video size in the captured video. +
+Set the framerate in the captured video. +
+Set the sample rate (in Hz) of the captured audio. +
+Set the sample size (in bits) of the captured audio. +
+Set the number of channels in the captured audio. +
+If set to ‘true’, print a list of devices and exit. +
+If set to ‘true’, print a list of selected device’s options +and exit. +
+Set video device number for devices with same name (starts at 0, +defaults to 0). +
+Set audio device number for devices with same name (starts at 0, +defaults to 0). +
+$ ffmpeg -list_devices true -f dshow -i dummy + |
$ ffmpeg -f dshow -i video="Camera" + |
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera" + |
$ ffmpeg -f dshow -i video="Camera":audio="Microphone" + |
$ ffmpeg -list_options true -f dshow -i video="Camera" + |
Linux DV 1394 input device. +
+ +Linux framebuffer input device. +
+The Linux framebuffer is a graphic hardware-independent abstraction +layer to show graphics on a computer monitor, typically on the +console. It is accessed through a file device node, usually +‘/dev/fb0’. +
+For more detailed information read the file +Documentation/fb/framebuffer.txt included in the Linux source tree. +
+To record from the framebuffer device ‘/dev/fb0’ with
+ffmpeg:
+
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi + |
You can take a single screenshot image with the command: +
ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg + |
See also http://linux-fbdev.sourceforge.net/, and fbset(1). +
+ +JACK input device. +
+To enable this input device during configuration you need libjack +installed on your system. +
+A JACK input device creates one or more JACK writable clients, one for +each audio channel, with name client_name:input_N, where +client_name is the name provided by the application, and N +is a number which identifies the channel. +Each writable client will send the acquired data to the FFmpeg input +device. +
+Once you have created one or more JACK readable clients, you need to +connect them to one or more JACK writable clients. +
+To connect or disconnect JACK clients you can use the jack_connect
+and jack_disconnect programs, or do it through a graphical interface,
+for example with qjackctl.
+
To list the JACK clients and their properties you can invoke the command
+jack_lsp.
+
Follows an example which shows how to capture a JACK readable client
+with ffmpeg.
+
# Create a JACK writable client with name "ffmpeg". +$ ffmpeg -f jack -i ffmpeg -y out.wav + +# Start the sample jack_metro readable client. +$ jack_metro -b 120 -d 0.2 -f 4000 + +# List the current JACK clients. +$ jack_lsp -c +system:capture_1 +system:capture_2 +system:playback_1 +system:playback_2 +ffmpeg:input_1 +metro:120_bpm + +# Connect metro to the ffmpeg writable client. +$ jack_connect metro:120_bpm ffmpeg:input_1 + |
For more information read: +http://jackaudio.org/ +
+ +Libavfilter input virtual device. +
+This input device reads data from the open output pads of a libavfilter +filtergraph. +
+For each filtergraph open output, the input device will create a +corresponding stream which is mapped to the generated output. Currently +only video data is supported. The filtergraph is specified through the +option ‘graph’. +
+ +Specify the filtergraph to use as input. Each video open output must be +labelled by a unique string of the form "outN", where N is a +number starting from 0 corresponding to the mapped input stream +generated by the device. +The first unlabelled output is automatically assigned to the "out0" +label, but all the others need to be specified explicitly. +
+If not specified defaults to the filename specified for the input +device. +
ffplay:
+ffplay -f lavfi -graph "color=pink [out0]" dummy + |
ffplay -f lavfi color=pink + |
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3 + |
ffplay:
+ffplay -f lavfi "amovie=test.wav" + |
ffplay:
+ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]" + |
IIDC1394 input device, based on libdc1394 and libraw1394. +
+ +The OpenAL input device provides audio capture on all systems with a +working OpenAL 1.1 implementation. +
+To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with --enable-openal.
+
OpenAL headers and libraries should be provided as part of your OpenAL
+implementation, or as an additional download (an SDK). Depending on your
+installation you may need to specify additional flags via the
+--extra-cflags and --extra-ldflags for allowing the build
+system to locate the OpenAL headers and libraries.
+
An incomplete list of OpenAL implementations follows: +
+The official Windows implementation, providing hardware acceleration +with supported devices and software fallback. +See http://openal.org/. +
Portable, open source (LGPL) software implementation. Includes +backends for the most common sound APIs on the Windows, Linux, +Solaris, and BSD operating systems. +See http://kcat.strangesoft.net/openal.html. +
OpenAL is part of Core Audio, the official Mac OS X Audio interface. +See http://developer.apple.com/technologies/mac/audio-and-video.html +
This device allows to capture from an audio input device handled +through OpenAL. +
+You need to specify the name of the device to capture in the provided +filename. If the empty string is provided, the device will +automatically select the default device. You can get the list of the +supported devices by using the option list_devices. +
+ +Set the number of channels in the captured audio. Only the values +‘1’ (monaural) and ‘2’ (stereo) are currently supported. +Defaults to ‘2’. +
+Set the sample size (in bits) of the captured audio. Only the values +‘8’ and ‘16’ are currently supported. Defaults to +‘16’. +
+Set the sample rate (in Hz) of the captured audio. +Defaults to ‘44.1k’. +
+If set to ‘true’, print a list of devices and exit. +Defaults to ‘false’. +
+Print the list of OpenAL supported devices and exit: +
$ ffmpeg -list_devices true -f openal -i dummy out.ogg + |
Capture from the OpenAL device ‘DR-BT101 via PulseAudio’: +
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg + |
Capture from the default device (note the empty string ” as filename): +
$ ffmpeg -f openal -i '' out.ogg + |
Capture from two devices simultaneously, writing to two different files,
+within the same ffmpeg command:
+
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg + |
Note: not all OpenAL implementations support multiple simultaneous capture - +try the latest OpenAL Soft if the above does not work. +
+ +Open Sound System input device. +
+The filename to provide to the input device is the device node +representing the OSS input device, and is usually set to +‘/dev/dsp’. +
+For example to grab from ‘/dev/dsp’ using ffmpeg use the
+command:
+
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav + |
For more information about OSS see: +http://manuals.opensound.com/usersguide/dsp.html +
+ +pulseaudio input device. +
+To enable this input device during configuration you need libpulse-simple +installed in your system. +
+The filename to provide to the input device is a source device or the +string "default" +
+To list the pulse source devices and their properties you can invoke
+the command pactl list sources.
+
ffmpeg -f pulse -i default /tmp/pulse.wav + |
The syntax is: +
-server server name + |
Connects to a specific server. +
+ +The syntax is: +
-name application name + |
Specify the application name pulse will use when showing active clients, +by default it is the LIBAVFORMAT_IDENT string +
+ +The syntax is: +
-stream_name stream name + |
Specify the stream name pulse will use when showing active streams, +by default it is "record" +
+ +The syntax is: +
-sample_rate samplerate + |
Specify the samplerate in Hz, by default 48kHz is used. +
+ +The syntax is: +
-channels N + |
Specify the channels in use, by default 2 (stereo) is set. +
+ +The syntax is: +
-frame_size bytes + |
Specify the number of byte per frame, by default it is set to 1024. +
+ +The syntax is: +
-fragment_size bytes + |
Specify the minimal buffering fragment in pulseaudio, it will affect the +audio latency. By default it is unset. +
+ +sndio input device. +
+To enable this input device during configuration you need libsndio +installed on your system. +
+The filename to provide to the input device is the device node +representing the sndio input device, and is usually set to +‘/dev/audio0’. +
+For example to grab from ‘/dev/audio0’ using ffmpeg use the
+command:
+
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav + |
Video4Linux and Video4Linux2 input video devices. +
+The name of the device to grab is a file device node, usually Linux +systems tend to automatically create such nodes when the device +(e.g. an USB webcam) is plugged into the system, and has a name of the +kind ‘/dev/videoN’, where N is a number associated to +the device. +
+Video4Linux and Video4Linux2 devices only support a limited set of
+widthxheight sizes and framerates. You can check which are
+supported for example with the command dov4l for Video4Linux
+devices and using -list_formats all for Video4Linux2 devices.
+
If the size for the device is set to 0x0, the input device will +try to auto-detect the size to use. +Only for the video4linux2 device, if the frame rate is set to 0/0 the +input device will use the frame rate value already set in the driver. +
+Video4Linux support is deprecated since Linux 2.6.30, and will be +dropped in later versions. +
+Note that if FFmpeg is build with v4l-utils support ("–enable-libv4l2" +option), it will always be used. +
+Follow some usage examples of the video4linux devices with the ff* +tools. +
# Grab and show the input of a video4linux device, frame rate is set +# to the default of 25/1. +ffplay -s 320x240 -f video4linux /dev/video0 + +# Grab and show the input of a video4linux2 device, auto-adjust size. +ffplay -f video4linux2 /dev/video0 + +# Grab and record the input of a video4linux2 device, auto-adjust size, +# frame rate value defaults to 0/0 so it is read from the video4linux2 +# driver. +ffmpeg -f video4linux2 -i /dev/video0 out.mpeg + |
"v4l" and "v4l2" can be used as aliases for the respective "video4linux" and +"video4linux2". +
+ +VfW (Video for Windows) capture input device. +
+The filename passed as input is the capture driver number, ranging from +0 to 9. You may use "list" as filename to print a list of drivers. Any +other filename will be interpreted as device number 0. +
+ +X11 video input device. +
+This device allows to capture a region of an X11 display. +
+The filename passed as input has the syntax: +
[hostname]:display_number.screen_number[+x_offset,y_offset] + |
hostname:display_number.screen_number specifies the
+X11 display name of the screen to grab from. hostname can be
+omitted, and defaults to "localhost". The environment variable
+DISPLAY contains the default display name.
+
x_offset and y_offset specify the offsets of the grabbed +area with respect to the top-left border of the X11 screen. They +default to 0. +
+Check the X11 documentation (e.g. man X) for more detailed information. +
+Use the dpyinfo program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+
For example to grab from ‘:0.0’ using ffmpeg:
+
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg + +# Grab at position 10,20. +ffmpeg -f x11grab -r 25 -s cif -i :0.0+10,20 out.mpg + |
The syntax is: +
-follow_mouse centered|PIXELS + |
When it is specified with "centered", the grabbing region follows the mouse +pointer and keeps the pointer at the center of region; otherwise, the region +follows only when the mouse pointer reaches within PIXELS (greater than +zero) to the edge of region. +
+For example: +
ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 out.mpg + +# Follows only when the mouse pointer reaches within 100 pixels to edge +ffmpeg -f x11grab -follow_mouse 100 -r 25 -s cif -i :0.0 out.mpg + |
The syntax is: +
-show_region 1 + |
If show_region AVOption is specified with 1, then the grabbing +region will be indicated on screen. With this option, it’s easy to know what is +being grabbed if only a portion of the screen is grabbed. +
+For example: +
ffmpeg -f x11grab -show_region 1 -r 25 -s cif -i :0.0+10,20 out.mpg + +# With follow_mouse +ffmpeg -f x11grab -follow_mouse centered -show_region 1 -r 25 -s cif -i :0.0 out.mpg + |
FFmpeg can be hooked up with a number of external libraries to add support +for more formats. None of them are used by default, their use has to be +explicitly requested by passing the appropriate flags to ‘./configure’. +
+ +FFmpeg can use the OpenJPEG libraries for encoding/decoding J2K videos. Go to
+http://www.openjpeg.org/ to get the libraries and follow the installation
+instructions. To enable using OpenJPEG in FFmpeg, pass --enable-libopenjpeg to
+‘./configure’.
+
Spun off Google Android sources, OpenCore and VisualOn libraries provide +encoders for a number of audio codecs. +
+OpenCORE and VisualOn libraries are under the Apache License 2.0 +(see http://www.apache.org/licenses/LICENSE-2.0 for details), which is +incompatible with the LGPL version 2.1 and GPL version 2. You have to +upgrade FFmpeg’s license to LGPL version 3 (or if you have enabled +GPL components, GPL version 3) to use it. +
FFmpeg can make use of the OpenCORE libraries for AMR-NB +decoding/encoding and AMR-WB decoding. +
+Go to http://sourceforge.net/projects/opencore-amr/ and follow the
+instructions for installing the libraries.
+Then pass --enable-libopencore-amrnb and/or
+--enable-libopencore-amrwb to configure to enable them.
+
FFmpeg can make use of the VisualOn AACenc library for AAC encoding. +
+Go to http://sourceforge.net/projects/opencore-amr/ and follow the
+instructions for installing the library.
+Then pass --enable-libvo-aacenc to configure to enable it.
+
FFmpeg can make use of the VisualOn AMR-WBenc library for AMR-WB encoding. +
+Go to http://sourceforge.net/projects/opencore-amr/ and follow the
+instructions for installing the library.
+Then pass --enable-libvo-amrwbenc to configure to enable it.
+
FFmpeg can make use of the LAME library for MP3 encoding. +
+Go to http://lame.sourceforge.net/ and follow the
+instructions for installing the library.
+Then pass --enable-libmp3lame to configure to enable it.
+
FFmpeg can make use of the libvpx library for VP8 encoding. +
+Go to http://www.webmproject.org/ and follow the instructions for
+installing the library. Then pass --enable-libvpx to configure to
+enable it.
+
FFmpeg can make use of the x264 library for H.264 encoding. +
+Go to http://www.videolan.org/developers/x264.html and follow the
+instructions for installing the library. Then pass --enable-libx264 to
+configure to enable it.
+
x264 is under the GNU Public License Version 2 or later +(see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html for +details), you must upgrade FFmpeg’s license to GPL in order to use it. +
You can use the -formats and -codecs options to have an exhaustive list.
+
FFmpeg supports the following file formats through the libavformat
+library:
+
| Name | Encoding | Decoding | Comments |
| 4xm | X | 4X Technologies format, used in some games. | |
| 8088flex TMV | X | ||
| ACT Voice | X | contains G.729 audio | |
| Adobe Filmstrip | X | X | |
| Audio IFF (AIFF) | X | X | |
| American Laser Games MM | X | Multimedia format used in games like Mad Dog McCree. | |
| 3GPP AMR | X | X | |
| Apple HTTP Live Streaming | X | ||
| Artworx Data Format | X | ||
| ASF | X | X | |
| AVI | X | X | |
| AVISynth | X | ||
| AVS | X | Multimedia format used by the Creature Shock game. | |
| Beam Software SIFF | X | Audio and video format used in some games by Beam Software. | |
| Bethesda Softworks VID | X | Used in some games from Bethesda Softworks. | |
| Binary text | X | ||
| Bink | X | Multimedia format used by many games. | |
| Bitmap Brothers JV | X | Used in Z and Z95 games. | |
| Brute Force & Ignorance | X | Used in the game Flash Traffic: City of Angels. | |
| BWF | X | X | |
| CRI ADX | X | X | Audio-only format used in console video games. |
| Discworld II BMV | X | ||
| Interplay C93 | X | Used in the game Cyberia from Interplay. | |
| Delphine Software International CIN | X | Multimedia format used by Delphine Software games. | |
| CD+G | X | Video format used by CD+G karaoke disks | |
| Core Audio Format | X | X | Apple Core Audio Format |
| CRC testing format | X | ||
| Creative Voice | X | X | Created for the Sound Blaster Pro. |
| CRYO APC | X | Audio format used in some games by CRYO Interactive Entertainment. | |
| D-Cinema audio | X | X | |
| Deluxe Paint Animation | X | ||
| DFA | X | This format is used in Chronomaster game | |
| DV video | X | X | |
| DXA | X | This format is used in the non-Windows version of the Feeble Files + game and different game cutscenes repacked for use with ScummVM. | |
| Electronic Arts cdata | X | ||
| Electronic Arts Multimedia | X | Used in various EA games; files have extensions like WVE and UV2. | |
| FFM (FFserver live feed) | X | X | |
| Flash (SWF) | X | X | |
| Flash 9 (AVM2) | X | X | Only embedded audio is decoded. |
| FLI/FLC/FLX animation | X | .fli/.flc files | |
| Flash Video (FLV) | X | X | Macromedia Flash video files |
| framecrc testing format | X | ||
| FunCom ISS | X | Audio format used in various games from FunCom like The Longest Journey. | |
| G.723.1 | X | X | |
| G.729 BIT | X | X | |
| G.729 raw | X | ||
| GIF Animation | X | ||
| GXF | X | X | General eXchange Format SMPTE 360M, used by Thomson Grass Valley + playout servers. |
| iCEDraw File | X | ||
| ICO | X | Microsoft Windows ICO | |
| id Quake II CIN video | X | ||
| id RoQ | X | X | Used in Quake III, Jedi Knight 2 and other computer games. |
| IEC61937 encapsulation | X | X | |
| IFF | X | Interchange File Format | |
| Interplay MVE | X | Format used in various Interplay computer games. | |
| IV8 | X | A format generated by IndigoVision 8000 video server. | |
| IVF (On2) | X | X | A format used by libvpx |
| LATM | X | X | |
| LMLM4 | X | Used by Linux Media Labs MPEG-4 PCI boards | |
| LOAS | X | contains LATM multiplexed AAC audio | |
| LXF | X | VR native stream format, used by Leitch/Harris’ video servers. | |
| Matroska | X | X | |
| Matroska audio | X | ||
| FFmpeg metadata | X | X | Metadata in text format. |
| MAXIS XA | X | Used in Sim City 3000; file extension .xa. | |
| MD Studio | X | ||
| Mobotix .mxg | X | ||
| Monkey’s Audio | X | ||
| Motion Pixels MVI | X | ||
| MOV/QuickTime/MP4 | X | X | 3GP, 3GP2, PSP, iPod variants supported |
| MP2 | X | X | |
| MP3 | X | X | |
| MPEG-1 System | X | X | muxed audio and video, VCD format supported |
| MPEG-PS (program stream) | X | X | also known as VOB file, SVCD and DVD format supported |
| MPEG-TS (transport stream) | X | X | also known as DVB Transport Stream |
| MPEG-4 | X | X | MPEG-4 is a variant of QuickTime. |
| MIME multipart JPEG | X | ||
| MSN TCP webcam | X | Used by MSN Messenger webcam streams. | |
| MTV | X | ||
| Musepack | X | ||
| Musepack SV8 | X | ||
| Material eXchange Format (MXF) | X | X | SMPTE 377M, used by D-Cinema, broadcast industry. |
| Material eXchange Format (MXF), D-10 Mapping | X | X | SMPTE 386M, D-10/IMX Mapping. |
| NC camera feed | X | NC (AVIP NC4600) camera streams | |
| NTT TwinVQ (VQF) | X | Nippon Telegraph and Telephone Corporation TwinVQ. | |
| Nullsoft Streaming Video | X | ||
| NuppelVideo | X | ||
| NUT | X | X | NUT Open Container Format |
| Ogg | X | X | |
| Playstation Portable PMP | X | ||
| TechnoTrend PVA | X | Used by TechnoTrend DVB PCI boards. | |
| QCP | X | ||
| raw ADTS (AAC) | X | X | |
| raw AC-3 | X | X | |
| raw Chinese AVS video | X | X | |
| raw CRI ADX | X | X | |
| raw Dirac | X | X | |
| raw DNxHD | X | X | |
| raw DTS | X | X | |
| raw E-AC-3 | X | X | |
| raw FLAC | X | X | |
| raw GSM | X | ||
| raw H.261 | X | X | |
| raw H.263 | X | X | |
| raw H.264 | X | X | |
| raw Ingenient MJPEG | X | ||
| raw MJPEG | X | X | |
| raw MLP | X | ||
| raw MPEG | X | ||
| raw MPEG-1 | X | ||
| raw MPEG-2 | X | ||
| raw MPEG-4 | X | X | |
| raw NULL | X | ||
| raw video | X | X | |
| raw id RoQ | X | ||
| raw Shorten | X | ||
| raw TrueHD | X | X | |
| raw VC-1 | X | ||
| raw PCM A-law | X | X | |
| raw PCM mu-law | X | X | |
| raw PCM signed 8 bit | X | X | |
| raw PCM signed 16 bit big-endian | X | X | |
| raw PCM signed 16 bit little-endian | X | X | |
| raw PCM signed 24 bit big-endian | X | X | |
| raw PCM signed 24 bit little-endian | X | X | |
| raw PCM signed 32 bit big-endian | X | X | |
| raw PCM signed 32 bit little-endian | X | X | |
| raw PCM unsigned 8 bit | X | X | |
| raw PCM unsigned 16 bit big-endian | X | X | |
| raw PCM unsigned 16 bit little-endian | X | X | |
| raw PCM unsigned 24 bit big-endian | X | X | |
| raw PCM unsigned 24 bit little-endian | X | X | |
| raw PCM unsigned 32 bit big-endian | X | X | |
| raw PCM unsigned 32 bit little-endian | X | X | |
| raw PCM floating-point 32 bit big-endian | X | X | |
| raw PCM floating-point 32 bit little-endian | X | X | |
| raw PCM floating-point 64 bit big-endian | X | X | |
| raw PCM floating-point 64 bit little-endian | X | X | |
| RDT | X | ||
| REDCODE R3D | X | File format used by RED Digital cameras, contains JPEG 2000 frames and PCM audio. | |
| RealMedia | X | X | |
| Redirector | X | ||
| Renderware TeXture Dictionary | X | ||
| RL2 | X | Audio and video format used in some games by Entertainment Software Partners. | |
| RPL/ARMovie | X | ||
| Lego Mindstorms RSO | X | X | |
| RTMP | X | X | Output is performed by publishing stream to RTMP server |
| RTP | X | X | |
| RTSP | X | X | |
| SAP | X | X | |
| SBG | X | ||
| SDP | X | ||
| Sega FILM/CPK | X | Used in many Sega Saturn console games. | |
| Sierra SOL | X | .sol files used in Sierra Online games. | |
| Sierra VMD | X | Used in Sierra CD-ROM games. | |
| Smacker | X | Multimedia format used by many games. | |
| SMJPEG | X | X | Used in certain Loki game ports. |
| Sony OpenMG (OMA) | X | X | Audio format used in Sony Sonic Stage and Sony Vegas. |
| Sony PlayStation STR | X | ||
| Sony Wave64 (W64) | X | ||
| SoX native format | X | X | |
| SUN AU format | X | X | |
| Text files | X | ||
| THP | X | Used on the Nintendo GameCube. | |
| Tiertex Limited SEQ | X | Tiertex .seq files used in the DOS CD-ROM version of the game Flashback. | |
| True Audio | X | ||
| VC-1 test bitstream | X | X | |
| WAV | X | X | |
| WavPack | X | ||
| WebM | X | X | |
| Windows Televison (WTV) | X | X | |
| Wing Commander III movie | X | Multimedia format used in Origin’s Wing Commander III computer game. | |
| Westwood Studios audio | X | Multimedia format used in Westwood Studios games. | |
| Westwood Studios VQA | X | Multimedia format used in Westwood Studios games. | |
| XMV | X | Microsoft video container used in Xbox games. | |
| xWMA | X | Microsoft audio container used by XAudio 2. | |
| eXtended BINary text (XBIN) | X | ||
| YUV4MPEG pipe | X | X | |
| Psygnosis YOP | X |
X means that encoding (resp. decoding) is supported.
+
FFmpeg can read and write images for each frame of a video sequence. The +following image formats are supported: +
+| Name | Encoding | Decoding | Comments |
| .Y.U.V | X | X | one raw file per component |
| animated GIF | X | X | Only uncompressed GIFs are generated. |
| BMP | X | X | Microsoft BMP image |
| DPX | X | X | Digital Picture Exchange |
| JPEG | X | X | Progressive JPEG is not supported. |
| JPEG 2000 | X | X | |
| JPEG-LS | X | X | |
| LJPEG | X | Lossless JPEG | |
| PAM | X | X | PAM is a PNM extension with alpha support. |
| PBM | X | X | Portable BitMap image |
| PCX | X | X | PC Paintbrush |
| PGM | X | X | Portable GrayMap image |
| PGMYUV | X | X | PGM with U and V components in YUV 4:2:0 |
| PIC | X | Pictor/PC Paint | |
| PNG | X | X | |
| PPM | X | X | Portable PixelMap image |
| PTX | X | V.Flash PTX format | |
| SGI | X | X | SGI RGB image format |
| Sun Rasterfile | X | Sun RAS image format | |
| TIFF | X | X | YUV, JPEG and some extension is not supported yet. |
| Truevision Targa | X | X | Targa (.TGA) image format |
| XWD | X | X | X Window Dump image format |
X means that encoding (resp. decoding) is supported.
+
E means that support is provided through an external library.
+
| Name | Encoding | Decoding | Comments |
| 4X Movie | X | Used in certain computer games. | |
| 8088flex TMV | X | ||
| 8SVX exponential | X | ||
| 8SVX fibonacci | X | ||
| A64 multicolor | X | Creates video suitable to be played on a commodore 64 (multicolor mode). | |
| American Laser Games MM | X | Used in games like Mad Dog McCree. | |
| AMV Video | X | X | Used in Chinese MP3 players. |
| ANSI/ASCII art | X | ||
| Apple MJPEG-B | X | ||
| Apple ProRes | X | X | |
| Apple QuickDraw | X | fourcc: qdrw | |
| Asus v1 | X | X | fourcc: ASV1 |
| Asus v2 | X | X | fourcc: ASV2 |
| ATI VCR1 | X | fourcc: VCR1 | |
| ATI VCR2 | X | fourcc: VCR2 | |
| Auravision Aura | X | ||
| Auravision Aura 2 | X | ||
| Autodesk Animator Flic video | X | ||
| Autodesk RLE | X | fourcc: AASC | |
| Avid 1:1 10-bit RGB Packer | X | X | fourcc: AVrp |
| AVS (Audio Video Standard) video | X | Video encoding used by the Creature Shock game. | |
| Beam Software VB | X | ||
| Bethesda VID video | X | Used in some games from Bethesda Softworks. | |
| Bink Video | X | ||
| Bitmap Brothers JV video | X | ||
| y41p Brooktree uncompressed 4:1:1 12-bit | X | X | |
| Brute Force & Ignorance | X | Used in the game Flash Traffic: City of Angels. | |
| C93 video | X | Codec used in Cyberia game. | |
| CamStudio | X | fourcc: CSCD | |
| CD+G | X | Video codec for CD+G karaoke disks | |
| Chinese AVS video | E | X | AVS1-P2, JiZhun profile, encoding through external library libxavs |
| Delphine Software International CIN video | X | Codec used in Delphine Software International games. | |
| Discworld II BMV Video | X | ||
| Cinepak | X | ||
| Cirrus Logic AccuPak | X | X | fourcc: CLJR |
| Creative YUV (CYUV) | X | ||
| DFA | X | Codec used in Chronomaster game. | |
| Dirac | E | X | supported through external libdirac/libschroedinger libraries |
| Deluxe Paint Animation | X | ||
| DNxHD | X | X | aka SMPTE VC3 |
| Duck TrueMotion 1.0 | X | fourcc: DUCK | |
| Duck TrueMotion 2.0 | X | fourcc: TM20 | |
| DV (Digital Video) | X | X | |
| Dxtory capture format | X | ||
| Feeble Files/ScummVM DXA | X | Codec originally used in Feeble Files game. | |
| Electronic Arts CMV video | X | Used in NHL 95 game. | |
| Electronic Arts Madcow video | X | ||
| Electronic Arts TGV video | X | ||
| Electronic Arts TGQ video | X | ||
| Electronic Arts TQI video | X | ||
| Escape 124 | X | ||
| Escape 130 | X | ||
| FFmpeg video codec #1 | X | X | experimental lossless codec (fourcc: FFV1) |
| Flash Screen Video v1 | X | X | fourcc: FSV1 |
| Flash Screen Video v2 | X | X | |
| Flash Video (FLV) | X | X | Sorenson H.263 used in Flash |
| Fraps | X | ||
| H.261 | X | X | |
| H.263 / H.263-1996 | X | X | |
| H.263+ / H.263-1998 / H.263 version 2 | X | X | |
| H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 | E | X | encoding supported through external library libx264 |
| H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration) | E | X | |
| HuffYUV | X | X | |
| HuffYUV FFmpeg variant | X | X | |
| IBM Ultimotion | X | fourcc: ULTI | |
| id Cinematic video | X | Used in Quake II. | |
| id RoQ video | X | X | Used in Quake III, Jedi Knight 2, other computer games. |
| IFF ILBM | X | IFF interleaved bitmap | |
| IFF ByteRun1 | X | IFF run length encoded bitmap | |
| Intel H.263 | X | ||
| Intel Indeo 2 | X | ||
| Intel Indeo 3 | X | ||
| Intel Indeo 4 | X | ||
| Intel Indeo 5 | X | ||
| Interplay C93 | X | Used in the game Cyberia from Interplay. | |
| Interplay MVE video | X | Used in Interplay .MVE files. | |
| J2K | X | X | |
| Karl Morton’s video codec | X | Codec used in Worms games. | |
| Kega Game Video (KGV1) | X | Kega emulator screen capture codec. | |
| Lagarith | X | ||
| LCL (LossLess Codec Library) MSZH | X | ||
| LCL (LossLess Codec Library) ZLIB | E | E | |
| LOCO | X | ||
| lossless MJPEG | X | X | |
| Microsoft RLE | X | ||
| Microsoft Video 1 | X | ||
| Mimic | X | Used in MSN Messenger Webcam streams. | |
| Miro VideoXL | X | fourcc: VIXL | |
| MJPEG (Motion JPEG) | X | X | |
| Mobotix MxPEG video | X | ||
| Motion Pixels video | X | ||
| MPEG-1 video | X | X | |
| MPEG-1/2 video XvMC (X-Video Motion Compensation) | X | ||
| MPEG-1/2 video (VDPAU acceleration) | X | ||
| MPEG-2 video | X | X | |
| MPEG-4 part 2 | X | X | libxvidcore can be used alternatively for encoding. |
| MPEG-4 part 2 Microsoft variant version 1 | X | ||
| MPEG-4 part 2 Microsoft variant version 2 | X | X | |
| MPEG-4 part 2 Microsoft variant version 3 | X | X | |
| Nintendo Gamecube THP video | X | ||
| NuppelVideo/RTjpeg | X | Video encoding used in NuppelVideo files. | |
| On2 VP3 | X | still experimental | |
| On2 VP5 | X | fourcc: VP50 | |
| On2 VP6 | X | fourcc: VP60,VP61,VP62 | |
| VP8 | E | X | fourcc: VP80, encoding supported through external library libvpx |
| planar RGB | X | fourcc: 8BPS | |
| Prores | X | fourcc: apch,apcn,apcs,apco | |
| Q-team QPEG | X | fourccs: QPEG, Q1.0, Q1.1 | |
| QuickTime 8BPS video | X | ||
| QuickTime Animation (RLE) video | X | X | fourcc: ’rle ’ |
| QuickTime Graphics (SMC) | X | fourcc: ’smc ’ | |
| QuickTime video (RPZA) | X | fourcc: rpza | |
| R10K AJA Kona 10-bit RGB Codec | X | X | |
| R210 Quicktime Uncompressed RGB 10-bit | X | X | |
| Raw Video | X | X | |
| RealVideo 1.0 | X | X | |
| RealVideo 2.0 | X | X | |
| RealVideo 3.0 | X | still far from ideal | |
| RealVideo 4.0 | X | ||
| Renderware TXD (TeXture Dictionary) | X | Texture dictionaries used by the Renderware Engine. | |
| RL2 video | X | used in some games by Entertainment Software Partners | |
| Sierra VMD video | X | Used in Sierra VMD files. | |
| Smacker video | X | Video encoding used in Smacker. | |
| SMPTE VC-1 | X | ||
| Snow | X | X | experimental wavelet codec (fourcc: SNOW) |
| Sony PlayStation MDEC (Motion DECoder) | X | ||
| Sorenson Vector Quantizer 1 | X | X | fourcc: SVQ1 |
| Sorenson Vector Quantizer 3 | X | fourcc: SVQ3 | |
| Sunplus JPEG (SP5X) | X | fourcc: SP5X | |
| TechSmith Screen Capture Codec | X | fourcc: TSCC | |
| Theora | E | X | encoding supported through external library libtheora |
| Tiertex Limited SEQ video | X | Codec used in DOS CD-ROM FlashBack game. | |
| Ut Video | X | ||
| v210 QuickTime uncompressed 4:2:2 10-bit | X | X | |
| v308 QuickTime uncompressed 4:4:4 | X | X | |
| v410 QuickTime uncompressed 4:4:4 10-bit | X | X | |
| VBLE Lossless Codec | X | ||
| VMware Screen Codec / VMware Video | X | Codec used in videos captured by VMware. | |
| Westwood Studios VQA (Vector Quantized Animation) video | X | ||
| Windows Media Image | X | ||
| Windows Media Video 7 | X | X | |
| Windows Media Video 8 | X | X | |
| Windows Media Video 9 | X | not completely working | |
| Wing Commander III / Xan | X | Used in Wing Commander III .MVE files. | |
| Wing Commander IV / Xan | X | Used in Wing Commander IV. | |
| Winnov WNV1 | X | ||
| WMV7 | X | X | |
| YAMAHA SMAF | X | X | |
| Psygnosis YOP Video | X | ||
| yuv4 | X | X | libquicktime uncompressed packed 4:2:0 |
| ZLIB | X | X | part of LCL, encoder experimental |
| Zip Motion Blocks Video | X | X | Encoder works only in PAL8. |
X means that encoding (resp. decoding) is supported.
+
E means that support is provided through an external library.
+
| Name | Encoding | Decoding | Comments |
| 8SVX audio | X | ||
| AAC+ | E | X | encoding supported through external library libaacplus |
| AAC | E | X | encoding supported through external library libfaac and libvo-aacenc |
| AC-3 | IX | X | |
| ADPCM 4X Movie | X | ||
| ADPCM CDROM XA | X | ||
| ADPCM Creative Technology | X | 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2 | |
| ADPCM Electronic Arts | X | Used in various EA titles. | |
| ADPCM Electronic Arts Maxis CDROM XS | X | Used in Sim City 3000. | |
| ADPCM Electronic Arts R1 | X | ||
| ADPCM Electronic Arts R2 | X | ||
| ADPCM Electronic Arts R3 | X | ||
| ADPCM Electronic Arts XAS | X | ||
| ADPCM G.722 | X | X | |
| ADPCM G.726 | X | X | |
| ADPCM IMA AMV | X | Used in AMV files | |
| ADPCM IMA Electronic Arts EACS | X | ||
| ADPCM IMA Electronic Arts SEAD | X | ||
| ADPCM IMA Funcom | X | ||
| ADPCM IMA QuickTime | X | X | |
| ADPCM IMA Loki SDL MJPEG | X | ||
| ADPCM IMA WAV | X | X | |
| ADPCM IMA Westwood | X | ||
| ADPCM ISS IMA | X | Used in FunCom games. | |
| ADPCM IMA Duck DK3 | X | Used in some Sega Saturn console games. | |
| ADPCM IMA Duck DK4 | X | Used in some Sega Saturn console games. | |
| ADPCM Microsoft | X | X | |
| ADPCM MS IMA | X | X | |
| ADPCM Nintendo Gamecube THP | X | ||
| ADPCM QT IMA | X | X | |
| ADPCM SEGA CRI ADX | X | X | Used in Sega Dreamcast games. |
| ADPCM Shockwave Flash | X | X | |
| ADPCM SMJPEG IMA | X | Used in certain Loki game ports. | |
| ADPCM Sound Blaster Pro 2-bit | X | ||
| ADPCM Sound Blaster Pro 2.6-bit | X | ||
| ADPCM Sound Blaster Pro 4-bit | X | ||
| ADPCM Westwood Studios IMA | X | Used in Westwood Studios games like Command and Conquer. | |
| ADPCM Yamaha | X | X | |
| AMR-NB | E | X | encoding supported through external library libopencore-amrnb |
| AMR-WB | E | X | encoding supported through external library libvo-amrwbenc |
| Apple lossless audio | X | X | QuickTime fourcc ’alac’ |
| Atrac 1 | X | ||
| Atrac 3 | X | ||
| Bink Audio | X | Used in Bink and Smacker files in many games. | |
| CELT | E | decoding supported through external library libcelt | |
| Delphine Software International CIN audio | X | Codec used in Delphine Software International games. | |
| Discworld II BMV Audio | X | ||
| COOK | X | All versions except 5.1 are supported. | |
| DCA (DTS Coherent Acoustics) | X | X | |
| DPCM id RoQ | X | X | Used in Quake III, Jedi Knight 2 and other computer games. |
| DPCM Interplay | X | Used in various Interplay computer games. | |
| DPCM Sierra Online | X | Used in Sierra Online game audio files. | |
| DPCM Sol | X | ||
| DPCM Xan | X | Used in Origin’s Wing Commander IV AVI files. | |
| DSP Group TrueSpeech | X | ||
| DV audio | X | ||
| Enhanced AC-3 | X | X | |
| FLAC (Free Lossless Audio Codec) | X | IX | |
| G.723.1 | X | X | |
| G.729 | X | ||
| GSM | E | X | encoding supported through external library libgsm |
| GSM Microsoft variant | E | X | encoding supported through external library libgsm |
| IMC (Intel Music Coder) | X | ||
| MACE (Macintosh Audio Compression/Expansion) 3:1 | X | ||
| MACE (Macintosh Audio Compression/Expansion) 6:1 | X | ||
| MLP (Meridian Lossless Packing) | X | Used in DVD-Audio discs. | |
| Monkey’s Audio | X | Only versions 3.97-3.99 are supported. | |
| MP1 (MPEG audio layer 1) | IX | ||
| MP2 (MPEG audio layer 2) | IX | IX | |
| MP3 (MPEG audio layer 3) | E | IX | encoding supported through external library LAME, ADU MP3 and MP3onMP4 also supported |
| MPEG-4 Audio Lossless Coding (ALS) | X | ||
| Musepack SV7 | X | ||
| Musepack SV8 | X | ||
| Nellymoser Asao | X | X | |
| PCM A-law | X | X | |
| PCM mu-law | X | X | |
| PCM 16-bit little-endian planar | X | ||
| PCM 32-bit floating point big-endian | X | X | |
| PCM 32-bit floating point little-endian | X | X | |
| PCM 64-bit floating point big-endian | X | X | |
| PCM 64-bit floating point little-endian | X | X | |
| PCM D-Cinema audio signed 24-bit | X | X | |
| PCM signed 8-bit | X | X | |
| PCM signed 16-bit big-endian | X | X | |
| PCM signed 16-bit little-endian | X | X | |
| PCM signed 24-bit big-endian | X | X | |
| PCM signed 24-bit little-endian | X | X | |
| PCM signed 32-bit big-endian | X | X | |
| PCM signed 32-bit little-endian | X | X | |
| PCM signed 16/20/24-bit big-endian in MPEG-TS | X | ||
| PCM unsigned 8-bit | X | X | |
| PCM unsigned 16-bit big-endian | X | X | |
| PCM unsigned 16-bit little-endian | X | X | |
| PCM unsigned 24-bit big-endian | X | X | |
| PCM unsigned 24-bit little-endian | X | X | |
| PCM unsigned 32-bit big-endian | X | X | |
| PCM unsigned 32-bit little-endian | X | X | |
| PCM Zork | X | ||
| QCELP / PureVoice | X | ||
| QDesign Music Codec 2 | X | There are still some distortions. | |
| RealAudio 1.0 (14.4K) | X | X | Real 14400 bit/s codec |
| RealAudio 2.0 (28.8K) | X | Real 28800 bit/s codec | |
| RealAudio 3.0 (dnet) | IX | X | Real low bitrate AC-3 codec |
| RealAudio SIPR / ACELP.NET | X | ||
| Shorten | X | ||
| Sierra VMD audio | X | Used in Sierra VMD files. | |
| Smacker audio | X | ||
| SMPTE 302M AES3 audio | X | ||
| Sonic | X | X | experimental codec |
| Sonic lossless | X | X | experimental codec |
| Speex | E | E | supported through external library libspeex |
| True Audio (TTA) | X | ||
| TrueHD | X | Used in HD-DVD and Blu-Ray discs. | |
| TwinVQ (VQF flavor) | X | ||
| Vorbis | E | X | A native but very primitive encoder exists. |
| WavPack | X | ||
| Westwood Audio (SND1) | X | ||
| Windows Media Audio 1 | X | X | |
| Windows Media Audio 2 | X | X | |
| Windows Media Audio Pro | X | ||
| Windows Media Audio Voice | X |
X means that encoding (resp. decoding) is supported.
+
E means that support is provided through an external library.
+
I means that an integer-only version is available, too (ensures high
+performance on systems without hardware floating point support).
+
| Name | Muxing | Demuxing | Encoding | Decoding |
| SSA/ASS | X | X | X | X |
| DVB | X | X | X | X |
| DVD | X | X | X | X |
| MicroDVD | X | X | ||
| PGS | X | |||
| SubRip (SRT) | X | X | X | X |
| XSUB | X | X |
X means that the feature is supported.
+
| Name | Support |
| Apple HTTP Live Streaming | X |
| file | X |
| Gopher | X |
| HTTP | X |
| MMS | X |
| pipe | X |
| RTP | X |
| TCP | X |
| UDP | X |
X means that the protocol is supported.
+
| Name | Input | Output |
| ALSA | X | X |
| BKTR | X | |
| DV1394 | X | |
| JACK | X | |
| LIBDC1394 | X | |
| OSS | X | X |
| Pulseaudio | X | |
| Video4Linux | X | |
| Video4Linux2 | X | |
| VfW capture | X | |
| X11 grabbing | X |
X means that input/output is supported.
+
| Codec/format | Read | Write |
| DV | X | X |
| GXF | X | X |
| MOV | X | |
| MPEG1/2 | X | X |
| MXF | X |
This document aims in giving some quick references on a set of useful git +commands. You should always use the extensive and detailed documentation +provided directly by git: +
+git --help +man git + |
shows you the available subcommands, +
+git <command> --help +man git-<command> + |
shows information about the subcommand <command>. +
+Additional information could be found on the +Git Reference website +
+For more information about the Git project, visit the +
+ +Consult these resources whenever you have problems, they are quite exhaustive. +
+What follows now is a basic introduction to Git and some FFmpeg-specific +guidelines to ease the contribution to the project +
+ +You can get git from http://git-scm.com/ +Most distribution and operating system provide a package for it. +
+ + +git clone git://source.ffmpeg.org/ffmpeg <target> + |
This will put the FFmpeg sources into the directory <target>. +
+git clone git@source.ffmpeg.org:ffmpeg <target> + |
This will put the FFmpeg sources into the directory <target> and let +you push back your changes to the remote repository. +
+ + +git pull (--rebase) + |
pulls in the latest changes from the tracked branch. The tracked branch +can be remote. By default the master branch tracks the branch master in +the remote origin. +
+--rebase (see below) is recommended.
+
git pull --rebase + |
fetches the changes from the main repository and replays your local commits +over it. This is required to keep all your local changes at the top of +FFmpeg’s master tree. The master tree will reject pushes with merge commits. +
+ + +git add [-A] <filename/dirname> +git rm [-r] <filename/dirname> + |
GIT needs to get notified of all changes you make to your working +directory that makes files appear or disappear. +Line moves across files are automatically tracked. +
+ + +git diff <filename(s)> + |
will show all local modifications in your working directory as unified diff. +
+ + +git log <filename(s)> + |
You may also use the graphical tools like gitview or gitk or the web +interface available at http://source.ffmpeg.org/ +
+ +git status + |
detects all the changes you made and lists what actions will be taken in case +of a commit (additions, modifications, deletions, etc.). +
+ + +git diff --check + |
to double check your changes before committing them to avoid trouble later +on. All experienced developers do this on each and every commit, no matter +how small. +Every one of them has been saved from looking like a fool by this many times. +It’s very easy for stray debug output or cosmetic modifications to slip in, +please avoid problems through this extra level of scrutiny. +
+For cosmetics-only commits you should get (almost) empty output from +
+git diff -w -b <filename(s)> + |
Also check the output of +
+git status + |
to make sure you don’t have untracked files or deletions. +
+git add [-i|-p|-A] <filenames/dirnames> + |
Make sure you have told git your name and email address +
+git config --global user.name "My Name" +git config --global user.email my@email.invalid + |
Use –global to set the global configuration for all your git checkouts. +
+Git will select the changes to the files for commit. Optionally you can use +the interactive or the patch mode to select hunk by hunk what should be +added to the commit. +
+ +git commit + |
Git will commit the selected changes to your current local branch. +
+You will be prompted for a log message in an editor, which is either +set in your personal configuration file through +
+git config --global core.editor + |
or set by one of the following environment variables: +GIT_EDITOR, VISUAL or EDITOR. +
+Log messages should be concise but descriptive. Explain why you made a change, +what you did will be obvious from the changes themselves most of the time. +Saying just "bug fix" or "10l" is bad. Remember that people of varying skill +levels look at and educate themselves while reading through your code. Don’t +include filenames in log messages, Git provides that information. +
+Possibly make the commit message have a terse, descriptive first line, an +empty line and then a full description. The first line will be used to name +the patch by git format-patch. +
+ +git format-patch <commit> [-o directory] + |
will generate a set of patches for each commit between <commit> and +current HEAD. E.g. +
+git format-patch origin/master + |
will generate patches for all commits on current branch which are not +present in upstream. +A useful shortcut is also +
+git format-patch -n + |
which will generate patches from last n commits. +By default the patches are created in the current directory. +
+ +git send-email <commit list|directory> + |
will send the patches created by git format-patch or directly
+generates them. All the email fields can be configured in the global/local
+configuration or overridden by command line.
+Note that this tool must often be installed separately (e.g. git-email
+package on Debian-based distros).
+
Git automatically tracks such changes, making those normal commits. +
+mv/cp path/file otherpath/otherfile +git add [-A] . +git commit + |
git reset <commit> + |
git reset will uncommit the changes till <commit> rewriting
+the current branch history.
+
git commit --amend + |
allows to amend the last commit details quickly. +
+git rebase -i origin/master + |
will replay local commits over the main repository allowing to edit, merge +or remove some of them in the process. +
+git reset, git commit --amend and git rebase
+rewrite history, so you should use them ONLY on your local or topic branches.
+The main repository will reject those changes.
+
git revert <commit> + |
git revert will generate a revert commit. This will not make the
+faulty commit disappear from the history.
+
git push + |
Will push the changes to the default remote (origin). +Git will prevent you from pushing changes if the local and remote trees are +out of sync. Refer to and to sync the local tree. +
+git remote add <name> <url> + |
Will add additional remote with a name reference, it is useful if you want +to push your local branch for review on a remote host. +
+git push <remote> <refspec> + |
Will push the changes to the <remote> repository.
+Omitting <refspec> makes git push update all the remote
+branches matching the local ones.
+
Since version 1.7.1 git supports :/foo syntax for specifying commits +based on a regular expression. see man gitrevisions +
+git show :/'as revision 23456' + |
will show the svn changeset r23456. With older git versions searching in
+the git log output is the easiest option (especially if a pager with
+search capabilities is used).
+This commit can be checked out with
+
git checkout -b svn_23456 :/'as revision 23456' + |
or for git < 1.7.1 with +
+git checkout -b svn_23456 $SHA1 + |
where $SHA1 is the commit hash from the git log output.
+
Contact the project admins root@ffmpeg.org if you have technical +problems with the GIT server. +
Libavfilter is the filtering API of FFmpeg. It is the substitute of the +now deprecated ’vhooks’ and started as a Google Summer of Code project. +
+Audio filtering integration into the main FFmpeg repository is a work in +progress, so audio API and ABI should not be considered stable yet. +
+ +In libavfilter, it is possible for filters to have multiple inputs and +multiple outputs. +To illustrate the sorts of things that are possible, we can +use a complex filter graph. For example, the following one: +
+input --> split --> fifo -----------------------> overlay --> output + | ^ + | | + +------> fifo --> crop --> vflip --------+ + |
splits the stream in two streams, sends one stream through the crop filter +and the vflip filter before merging it back with the other stream by +overlaying it on top. You can use the following command to achieve this: +
+ffmpeg -i input -vf "[in] split [T1], fifo, [T2] overlay=0:H/2 [out]; [T1] fifo, crop=iw:ih/2:0:ih/2, vflip [T2]" output + |
The result will be that in output the top half of the video is mirrored +onto the bottom half. +
+Video filters are loaded using the -vf option passed to
+ffmpeg or to ffplay. Filters in the same linear
+chain are separated by commas. In our example, split, fifo,
+overlay are in one linear chain, and fifo, crop, vflip are in
+another. The points where the linear chains join are labeled by names
+enclosed in square brackets. In our example, that is [T1] and
+[T2]. The magic labels [in] and [out] are the points
+where video is input and output.
+
Some filters take in input a list of parameters: they are specified +after the filter name and an equal sign, and are separated each other +by a semicolon. +
+There exist so-called source filters that do not have a video +input, and we expect in the future some sink filters that will +not have video output. +
+ +The ‘graph2dot’ program included in the FFmpeg ‘tools’ +directory can be used to parse a filter graph description and issue a +corresponding textual representation in the dot language. +
+Invoke the command: +
graph2dot -h + |
to see how to use ‘graph2dot’. +
+You can then pass the dot description to the ‘dot’ program (from +the graphviz suite of programs) and obtain a graphical representation +of the filter graph. +
+For example the sequence of commands: +
echo GRAPH_DESCRIPTION | \ +tools/graph2dot -o graph.tmp && \ +dot -Tpng graph.tmp -o graph.png && \ +display graph.png + |
can be used to create and display an image representing the graph +described by the GRAPH_DESCRIPTION string. +
+ +A filtergraph is a directed graph of connected filters. It can contain +cycles, and there can be multiple links between a pair of +filters. Each link has one input pad on one side connecting it to one +filter from which it takes its input, and one output pad on the other +side connecting it to the one filter accepting its output. +
+Each filter in a filtergraph is an instance of a filter class +registered in the application, which defines the features and the +number of input and output pads of the filter. +
+A filter with no input pads is called a "source", a filter with no +output pads is called a "sink". +
+ +A filtergraph can be represented using a textual representation, which
+is recognized by the -vf option of the ff*
+tools, and by the avfilter_graph_parse() function defined in
+‘libavfilter/avfiltergraph.h’.
+
A filterchain consists of a sequence of connected filters, each one +connected to the previous one in the sequence. A filterchain is +represented by a list of ","-separated filter descriptions. +
+A filtergraph consists of a sequence of filterchains. A sequence of +filterchains is represented by a list of ";"-separated filterchain +descriptions. +
+A filter is represented by a string of the form: +[in_link_1]...[in_link_N]filter_name=arguments[out_link_1]...[out_link_M] +
+filter_name is the name of the filter class of which the +described filter is an instance of, and has to be the name of one of +the filter classes registered in the program. +The name of the filter class is optionally followed by a string +"=arguments". +
+arguments is a string which contains the parameters used to +initialize the filter instance, and are described in the filter +descriptions below. +
+The list of arguments can be quoted using the character "’" as initial +and ending mark, and the character ’\’ for escaping the characters +within the quoted text; otherwise the argument string is considered +terminated when the next special character (belonging to the set +"[]=;,") is encountered. +
+The name and arguments of the filter are optionally preceded and +followed by a list of link labels. +A link label allows to name a link and associate it to a filter output +or input pad. The preceding labels in_link_1 +... in_link_N, are associated to the filter input pads, +the following labels out_link_1 ... out_link_M, are +associated to the output pads. +
+When two link labels with the same name are found in the +filtergraph, a link between the corresponding input and output pad is +created. +
+If an output pad is not labelled, it is linked by default to the first +unlabelled input pad of the next filter in the filterchain. +For example in the filterchain: +
nullsrc, split[L1], [L2]overlay, nullsink + |
the split filter instance has two output pads, and the overlay filter +instance two input pads. The first output pad of split is labelled +"L1", the first input pad of overlay is labelled "L2", and the second +output pad of split is linked to the second input pad of overlay, +which are both unlabelled. +
+In a complete filterchain all the unlabelled filter input and output +pads must be connected. A filtergraph is considered valid if all the +filter input and output pads of all the filterchains are connected. +
+Follows a BNF description for the filtergraph syntax: +
NAME ::= sequence of alphanumeric characters and '_' +LINKLABEL ::= "[" NAME "]" +LINKLABELS ::= LINKLABEL [LINKLABELS] +FILTER_ARGUMENTS ::= sequence of chars (eventually quoted) +FILTER ::= [LINKNAMES] NAME ["=" ARGUMENTS] [LINKNAMES] +FILTERCHAIN ::= FILTER [,FILTERCHAIN] +FILTERGRAPH ::= FILTERCHAIN [;FILTERGRAPH] + |
When you configure your FFmpeg build, you can disable any of the
+existing filters using --disable-filters.
+The configure output will show the audio filters included in your
+build.
+
Below is a description of the currently available audio filters. +
+ +Convert the input audio format to the specified formats. +
+The filter accepts a string of the form: +"sample_format:channel_layout:packing_format". +
+sample_format specifies the sample format, and can be a string or +the corresponding numeric value defined in ‘libavutil/samplefmt.h’. +
+channel_layout specifies the channel layout, and can be a string +or the corresponding number value defined in ‘libavutil/audioconvert.h’. +
+packing_format specifies the type of packing in output, can be one +of "planar" or "packed", or the corresponding numeric values "0" or "1". +
+The special parameter "auto", signifies that the filter will +automatically select the output format depending on the output filter. +
+Some examples follow. +
+aconvert=u8:stereo:packed + |
aconvert=u8:auto:auto + |
Convert the input audio to one of the specified formats. The framework will +negotiate the most appropriate format to minimize conversions. +
+The filter accepts three lists of formats, separated by ":", in the form: +"sample_formats:channel_layouts:packing_formats". +
+Elements in each list are separated by "," which has to be escaped in the +filtergraph specification. +
+The special parameter "all", in place of a list of elements, signifies all +supported formats. +
+Some examples follow: +
aformat=u8\\,s16:mono:packed + +aformat=s16:mono\\,stereo:all + |
Merge two audio streams into a single multi-channel stream. +
+This filter does not need any argument. +
+If the channel layouts of the inputs are disjoint, and therefore compatible, +the channel layout of the output will be set accordingly and the channels +will be reordered as necessary. If the channel layouts of the inputs are not +disjoint, the output will have all the channels of the first input then all +the channels of the second input, in that order, and the channel layout of +the output will be the default value corresponding to the total number of +channels. +
+For example, if the first input is in 2.1 (FL+FR+LF) and the second input +is FC+BL+BR, then the output will be in 5.1, with the channels in the +following order: a1, a2, b1, a3, b2, b3 (a1 is the first channel of the +first input, b1 is the first channel of the second input). +
+On the other hand, if both input are in stereo, the output channels will be +in the default order: a1, a2, b1, b2, and the channel layout will be +arbitrarily set to 4.0, which may or may not be the expected value. +
+Both inputs must have the same sample rate, format and packing. +
+If inputs do not have the same duration, the output will stop with the +shortest. +
+Example: merge two mono files into a stereo stream: +
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge + |
Pass the audio source unchanged to the output. +
+ +Resample the input audio to the specified sample rate. +
+The filter accepts exactly one parameter, the output sample rate. If not +specified then the filter will automatically convert between its input +and output sample rates. +
+For example, to resample the input audio to 44100Hz: +
aresample=44100 + |
Show a line containing various information for each input audio frame. +The input audio is not modified. +
+The shown line contains a sequence of key/value pairs of the form +key:value. +
+A description of each shown parameter follows: +
+sequential number of the input frame, starting from 0 +
+presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad, and +is usually 1/sample_rate. +
+presentation TimeStamp of the input frame, expressed as a number of +seconds +
+position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic audio) +
+sample format name +
+channel layout description +
+number of samples (per each channel) contained in the filtered frame +
+sample rate for the audio frame +
+if the packing format is planar, 0 if packed +
+Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +
+Adler-32 checksum (printed in hexadecimal) for each input frame plane, +expressed in the form "[c0 c1 c2 c3 c4 c5 +c6 c7]" +
Pass on the input audio to two outputs. Both outputs are identical to +the input audio. +
+For example: +
[in] asplit[out0], showaudio[out1] + |
will create two separate outputs from the same input, one cropped and +one padded. +
+ +Forward two audio streams and control the order the buffers are forwarded. +
+The argument to the filter is an expression deciding which stream should be +forwarded next: if the result is negative, the first stream is forwarded; if +the result is positive or zero, the second stream is forwarded. It can use +the following variables: +
+number of buffers forwarded so far on each stream +
number of samples forwarded so far on each stream +
current timestamp of each stream +
The default value is t1-t2, which means to always forward the stream
+that has a smaller timestamp.
+
Example: stress-test amerge by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+
amovie=file.ogg [a] ; amovie=file.mp3 [b] ; +[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ; +[a2] [b2] amerge + |
Make audio easier to listen to on headphones. +
+This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio +so that when listened to on headphones the stereo image is moved from +inside your head (standard for headphones) to outside and in front of +the listener (standard for speakers). +
+Ported from SoX. +
+ +Mix channels with specific gain levels. The filter accepts the output +channel layout followed by a set of channels definitions. +
+This filter is also designed to remap efficiently the channels of an audio +stream. +
+The filter accepts parameters of the form: +"l:outdef:outdef:..." +
+output channel layout or number of channels +
+output channel specification, of the form: +"out_name=[gain*]in_name[+[gain*]in_name...]" +
+output channel to define, either a channel name (FL, FR, etc.) or a channel +number (c0, c1, etc.) +
+multiplicative coefficient for the channel, 1 leaving the volume unchanged +
+input channel to use, see out_name for details; it is not possible to mix +named and numbered input channels +
If the ‘=’ in a channel specification is replaced by ‘<’, then the gains for +that specification will be renormalized so that the total is 1, thus +avoiding clipping noise. +
+ +For example, if you want to down-mix from stereo to mono, but with a bigger +factor for the left channel: +
pan=1:c0=0.9*c0+0.1*c1 + |
A customized down-mix to stereo that works automatically for 3-, 4-, 5- and +7-channels surround: +
pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR + |
Note that ffmpeg integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+
The channel remapping will be effective if, and only if: +
+If all these conditions are satisfied, the filter will notify the user ("Pure +channel mapping detected"), and use an optimized and lossless method to do the +remapping. +
+For example, if you have a 5.1 source and want a stereo audio stream by +dropping the extra channels: +
pan="stereo: c0=FL : c1=FR" + |
Given the same source, you can also switch front left and front right channels +and keep the input channel layout: +
pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5" + |
If the input is a stereo audio stream, you can mute the front left channel (and +still keep the stereo channel layout) with: +
pan="stereo:c1=c1" + |
Still with a stereo audio stream input, you can copy the right channel in both +front left and right: +
pan="stereo: c0=FR : c1=FR" + |
Detect silence in an audio stream. +
+This filter logs a message when it detects that the input audio volume is less +or equal to a noise tolerance value for a duration greater or equal to the +minimum detected noise duration. +
+The printed times and duration are expressed in seconds. +
+Set silence duration until notification (default is 2 seconds). +
+Set noise tolerance. Can be specified in dB (in case "dB" is appended to the +specified value) or amplitude ratio. Default is -60dB, or 0.001. +
Detect 5 seconds of silence with -50dB noise tolerance: +
silencedetect=n=-50dB:d=5 + |
Complete example with ffmpeg to detect silence with 0.0001 noise
+tolerance in ‘silence.mp3’:
+
ffmpeg -f lavfi -i amovie=silence.mp3,silencedetect=noise=0.0001 -f null - + |
Adjust the input audio volume. +
+The filter accepts exactly one parameter vol, which expresses +how the audio volume will be increased or decreased. +
+Output values are clipped to the maximum value. +
+If vol is expressed as a decimal number, the output audio +volume is given by the relation: +
output_volume = vol * input_volume + |
If vol is expressed as a decimal number followed by the string +"dB", the value represents the requested change in decibels of the +input audio power, and the output audio volume is given by the +relation: +
output_volume = 10^(vol/20) * input_volume + |
Otherwise vol is considered an expression and its evaluated +value is used for computing the output audio volume according to the +first relation. +
+Default value for vol is 1.0. +
+ +volume=0.5 + |
The above example is equivalent to: +
volume=1/2 + |
volume=-12dB + |
Below is a description of the currently available audio sources. +
+ +Buffer audio frames, and make them available to the filter chain. +
+This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/asrc_abuffer.h’. +
+It accepts the following mandatory parameters: +sample_rate:sample_fmt:channel_layout:packing +
+The sample rate of the incoming audio buffers. +
+The sample format of the incoming audio buffers. +Either a sample format name or its corresponging integer representation from +the enum AVSampleFormat in ‘libavutil/samplefmt.h’ +
+The channel layout of the incoming audio buffers. +Either a channel layout name from channel_layout_map in +‘libavutil/audioconvert.c’ or its corresponding integer representation +from the AV_CH_LAYOUT_* macros in ‘libavutil/audioconvert.h’ +
+Either "packed" or "planar", or their integer representation: 0 or 1 +respectively. +
+For example: +
abuffer=44100:s16:stereo:planar + |
will instruct the source to accept planar 16bit signed stereo at 44100Hz. +Since the sample format with name "s16" corresponds to the number +1 and the "stereo" channel layout corresponds to the value 3, this is +equivalent to: +
abuffer=44100:1:3:1 + |
Generate an audio signal specified by an expression. +
+This source accepts in input one or more expressions (one for each +channel), which are evaluated and used to generate a corresponding +audio signal. +
+It accepts the syntax: exprs[::options]. +exprs is a list of expressions separated by ":", one for each +separate channel. The output channel layout depends on the number of +provided expressions, up to 8 channels are supported. +
+options is an optional sequence of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Set the minimum duration of the sourced audio. See the function
+av_parse_time() for the accepted format.
+Note that the resulting duration may be greater than the specified
+duration, as the generated audio is always cut at the end of a
+complete frame.
+
If not specified, or the expressed duration is negative, the audio is +supposed to be generated forever. +
+Set the number of samples per channel per each output frame, +default to 1024. +
+Specify the sample rate, default to 44100. +
Each expression in exprs can contain the following constants: +
+number of the evaluated sample, starting from 0 +
+time of the evaluated sample expressed in seconds, starting from 0 +
+sample rate +
+aevalsrc=0 + |
aevalsrc="sin(440*2*PI*t)::s=8000" + |
aevalsrc="-2+random(0)" + |
aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)" + |
aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) : 0.1*sin(2*PI*(360+2.5/2)*t)" + |
Read an audio stream from a movie container. +
+It accepts the syntax: movie_name[:options] where +movie_name is the name of the resource to read (not necessarily +a file but also a device or a stream accessed through some protocol), +and options is an optional sequence of key=value +pairs, separated by ":". +
+The description of the accepted options follows. +
+Specify the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +
+Specify the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+av_strtod so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+
Specify the index of the audio stream to read. If the value is -1, +the best suited audio stream will be automatically selected. Default +value is "-1". +
+Null audio source, return unprocessed audio frames. It is mainly useful +as a template and to be employed in analysis / debugging tools, or as +the source for filters which ignore the input data (for example the sox +synth filter). +
+It accepts an optional sequence of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+Specify the sample rate, and defaults to 44100. +
+Specify the channel layout, and can be either an integer or a string +representing a channel layout. The default value of channel_layout +is "stereo". +
+Check the channel_layout_map definition in +‘libavcodec/audioconvert.c’ for the mapping between strings and +channel layout values. +
+Set the number of samples per requested frames. +
+Follow some examples: +
# set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO. +anullsrc=r=48000:cl=4 + +# same as +anullsrc=r=48000:cl=mono + |
Below is a description of the currently available audio sinks. +
+ +Buffer audio frames, and make them available to the end of filter chain. +
+This sink is mainly intended for programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’. +
+It requires a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to avfilter_init_filter for initialization.
+
Null audio sink, do absolutely nothing with the input audio. It is +mainly useful as a template and to be employed in analysis / debugging +tools. +
+ + +When you configure your FFmpeg build, you can disable any of the
+existing filters using --disable-filters.
+The configure output will show the video filters included in your
+build.
+
Below is a description of the currently available video filters. +
+ +Draw ASS (Advanced Substation Alpha) subtitles on top of input video +using the libass library. +
+To enable compilation of this filter you need to configure FFmpeg with
+--enable-libass.
+
This filter accepts in input the name of the ass file to render. +
+For example, to render the file ‘sub.ass’ on top of the input +video, use the command: +
ass=sub.ass + |
Detect frames that are (almost) completely black. Can be useful to +detect chapter transitions or commercials. Output lines consist of +the frame number of the detected frame, the percentage of blackness, +the position in the file if known or -1 and the timestamp in seconds. +
+In order to display the output lines, you need to set the loglevel at +least to the AV_LOG_INFO value. +
+The filter accepts the syntax: +
blackframe[=amount:[threshold]] + |
amount is the percentage of the pixels that have to be below the +threshold, and defaults to 98. +
+threshold is the threshold below which a pixel value is +considered black, and defaults to 32. +
+ +Apply boxblur algorithm to the input video. +
+This filter accepts the parameters: +luma_radius:luma_power:chroma_radius:chroma_power:alpha_radius:alpha_power +
+Chroma and alpha parameters are optional, if not specified they default +to the corresponding values set for luma_radius and +luma_power. +
+luma_radius, chroma_radius, and alpha_radius represent +the radius in pixels of the box used for blurring the corresponding +input plane. They are expressions, and can contain the following +constants: +
the input width and height in pixels +
+the input chroma image width and height in pixels +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
The radius must be a non-negative number, and must not be greater than
+the value of the expression min(w,h)/2 for the luma and alpha planes,
+and of min(cw,ch)/2 for the chroma planes.
+
luma_power, chroma_power, and alpha_power represent +how many times the boxblur filter is applied to the corresponding +plane. +
+Some examples follow: +
+boxblur=2:1 + |
boxblur=2:1:0:0:0:0 + |
boxblur=min(h\,w)/10:1:min(cw\,ch)/10:1 + |
Copy the input source unchanged to the output. Mainly useful for +testing purposes. +
+ +Crop the input video to out_w:out_h:x:y. +
+The parameters are expressions containing the following constants: +
+the computed values for x and y. They are evaluated for +each new frame. +
+the input width and height +
+same as in_w and in_h +
+the output (cropped) width and height +
+same as out_w and out_h +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
+the number of input frame, starting from 0 +
+the position in the file of the input frame, NAN if unknown +
+timestamp expressed in seconds, NAN if the input timestamp is unknown +
+The out_w and out_h parameters specify the expressions for +the width and height of the output (cropped) video. They are +evaluated just at the configuration of the filter. +
+The default value of out_w is "in_w", and the default value of +out_h is "in_h". +
+The expression for out_w may depend on the value of out_h, +and the expression for out_h may depend on out_w, but they +cannot depend on x and y, as x and y are +evaluated after out_w and out_h. +
+The x and y parameters specify the expressions for the +position of the top-left corner of the output (non-cropped) area. They +are evaluated for each frame. If the evaluated value is not valid, it +is approximated to the nearest valid value. +
+The default value of x is "(in_w-out_w)/2", and the default +value for y is "(in_h-out_h)/2", which set the cropped area at +the center of the input image. +
+The expression for x may depend on y, and the expression +for y may depend on x. +
+Follow some examples: +
# crop the central input area with size 100x100 +crop=100:100 + +# crop the central input area with size 2/3 of the input video +"crop=2/3*in_w:2/3*in_h" + +# crop the input video central square +crop=in_h + +# delimit the rectangle with the top-left corner placed at position +# 100:100 and the right-bottom corner corresponding to the right-bottom +# corner of the input image. +crop=in_w-100:in_h-100:100:100 + +# crop 10 pixels from the left and right borders, and 20 pixels from +# the top and bottom borders +"crop=in_w-2*10:in_h-2*20" + +# keep only the bottom right quarter of the input image +"crop=in_w/2:in_h/2:in_w/2:in_h/2" + +# crop height for getting Greek harmony +"crop=in_w:1/PHI*in_w" + +# trembling effect +"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" + +# erratic camera effect depending on timestamp +"crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)" + +# set x depending on the value of y +"crop=in_w/2:in_h/2:y:10+10*sin(n/10)" + |
Auto-detect crop size. +
+Calculate necessary cropping parameters and prints the recommended +parameters through the logging system. The detected dimensions +correspond to the non-black area of the input video. +
+It accepts the syntax: +
cropdetect[=limit[:round[:reset]]] + |
Threshold, which can be optionally specified from nothing (0) to +everything (255), defaults to 24. +
+Value which the width/height should be divisible by, defaults to +16. The offset is automatically adjusted to center the video. Use 2 to +get only even dimensions (needed for 4:2:2 video). 16 is best when +encoding to most video codecs. +
+Counter that determines after how many frames cropdetect will reset +the previously detected largest video area and start over to detect +the current optimal crop area. Defaults to 0. +
+This can be useful when channel logos distort the video area. 0 +indicates never reset and return the largest area encountered during +playback. +
Suppress a TV station logo by a simple interpolation of the surrounding +pixels. Just set a rectangle covering the logo and watch it disappear +(and sometimes something even uglier appear - your mileage may vary). +
+The filter accepts parameters as a string of the form +"x:y:w:h:band", or as a list of +key=value pairs, separated by ":". +
+The description of the accepted parameters follows. +
+Specify the top left corner coordinates of the logo. They must be +specified. +
+Specify the width and height of the logo to clear. They must be +specified. +
+Specify the thickness of the fuzzy edge of the rectangle (added to +w and h). The default value is 4. +
+When set to 1, a green rectangle is drawn on the screen to simplify +finding the right x, y, w, h parameters, and +band is set to 4. The default value is 0. +
+Some examples follow. +
+delogo=0:0:100:77:10 + |
delogo=x=0:y=0:w=100:h=77:band=10 + |
Attempt to fix small changes in horizontal and/or vertical shift. This +filter helps remove camera shake from hand-holding a camera, bumping a +tripod, moving on a vehicle, etc. +
+The filter accepts parameters as a string of the form +"x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename" +
+A description of the accepted parameters follows. +
+Specify a rectangular area where to limit the search for motion +vectors. +If desired the search for motion vectors can be limited to a +rectangular area of the frame defined by its top left corner, width +and height. These parameters have the same meaning as the drawbox +filter which can be used to visualise the position of the bounding +box. +
+This is useful when simultaneous movement of subjects within the frame +might be confused for camera motion by the motion vector search. +
+If any or all of x, y, w and h are set to -1 +then the full frame is used. This allows later options to be set +without specifying the bounding box for the motion vector search. +
+Default - search the whole frame. +
+Specify the maximum extent of movement in x and y directions in the +range 0-64 pixels. Default 16. +
+Specify how to generate pixels to fill blanks at the edge of the +frame. An integer from 0 to 3 as follows: +
Fill zeroes at blank locations +
Original image at blank locations +
Extruded edge value at blank locations +
Mirrored edge at blank locations +
The default setting is mirror edge at blank locations. +
+Specify the blocksize to use for motion search. Range 4-128 pixels, +default 8. +
+Specify the contrast threshold for blocks. Only blocks with more than +the specified contrast (difference between darkest and lightest +pixels) will be considered. Range 1-255, default 125. +
+Specify the search strategy 0 = exhaustive search, 1 = less exhaustive +search. Default - exhaustive search. +
+If set then a detailed log of the motion search is written to the +specified file. +
+Draw a colored box on the input image. +
+It accepts the syntax: +
drawbox=x:y:width:height:color + |
Specify the top left corner coordinates of the box. Default to 0. +
+Specify the width and height of the box, if 0 they are interpreted as +the input width and height. Default to 0. +
+Specify the color of the box to write, it can be the name of a color +(case insensitive match) or a 0xRRGGBB[AA] sequence. +
Follow some examples: +
# draw a black box around the edge of the input image +drawbox + +# draw a box with color red and an opacity of 50% +drawbox=10:20:200:60:red@0.5" + |
Draw text string or text from specified file on top of video using the +libfreetype library. +
+To enable compilation of this filter you need to configure FFmpeg with
+--enable-libfreetype.
+
The filter also recognizes strftime() sequences in the provided text +and expands them accordingly. Check the documentation of strftime(). +
+The filter accepts parameters as a list of key=value pairs, +separated by ":". +
+The description of the accepted parameters follows. +
+The font file to be used for drawing text. Path must be included. +This parameter is mandatory. +
+The text string to be drawn. The text must be a sequence of UTF-8 +encoded characters. +This parameter is mandatory if no file is specified with the parameter +textfile. +
+A text file containing text to be drawn. The text must be a sequence +of UTF-8 encoded characters. +
+This parameter is mandatory if no text string is specified with the +parameter text. +
+If both text and textfile are specified, an error is thrown. +
+The expressions which specify the offsets where text will be drawn +within the video frame. They are relative to the top/left border of the +output image. +
+The default value of x and y is "0". +
+See below for the list of accepted constants. +
+The font size to be used for drawing text. +The default value of fontsize is 16. +
+The color to be used for drawing fonts. +Either a string (e.g. "red") or in 0xRRGGBB[AA] format +(e.g. "0xff000033"), possibly followed by an alpha specifier. +The default value of fontcolor is "black". +
+The color to be used for drawing box around text. +Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format +(e.g. "0xff00ff"), possibly followed by an alpha specifier. +The default value of boxcolor is "white". +
+Used to draw a box around text using background color. +Value should be either 1 (enable) or 0 (disable). +The default value of box is 0. +
+The x and y offsets for the text shadow position with respect to the +position of the text. They can be either positive or negative +values. Default value for both is "0". +
+The color to be used for drawing a shadow behind the drawn text. It +can be a color name (e.g. "yellow") or a string in the 0xRRGGBB[AA] +form (e.g. "0xff00ff"), possibly followed by an alpha specifier. +The default value of shadowcolor is "black". +
+Flags to be used for loading the fonts. +
+The flags map the corresponding flags supported by libfreetype, and are +a combination of the following values: +
Default value is "render". +
+For more information consult the documentation for the FT_LOAD_* +libfreetype flags. +
+The size in number of spaces to use for rendering the tab. +Default value is 4. +
The parameters for x and y are expressions containing the +following constants: +
+the input width and height +
+the width of the rendered text +
+the height of the rendered text +
+the height of each text line +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (w / h) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
+maximum glyph width, that is the maximum width for all the glyphs +contained in the rendered text +
+maximum glyph height, that is the maximum height for all the glyphs +contained in the rendered text, it is equivalent to ascent - +descent. +
+the maximum distance from the baseline to the highest/upper grid +coordinate used to place a glyph outline point, for all the rendered +glyphs. +It is a positive value, due to the grid’s orientation with the Y axis +upwards. +
+the maximum distance from the baseline to the lowest grid coordinate +used to place a glyph outline point, for all the rendered glyphs. +This is a negative value, due to the grid’s orientation, with the Y axis +upwards. +
+the number of input frame, starting from 0 +
+timestamp expressed in seconds, NAN if the input timestamp is unknown +
+initial timecode representation in "hh:mm:ss[:;.]ff" format. It can be used
+with or without text parameter. rate option must be specified.
+Note that timecode options are not effective if FFmpeg is build with
+--disable-avcodec.
+
frame rate (timecode only) +
Some examples follow. +
+drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'" + |
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\ + x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2" + |
Note that the double quotes are not necessary if spaces are not used +within the parameter list. +
+drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2" + |
drawtext=fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t + |
drawtext=fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t" + |
drawtext=fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent + |
For more information about libfreetype, check: +http://www.freetype.org/. +
+ +Apply fade-in/out effect to input video. +
+It accepts the parameters: +type:start_frame:nb_frames[:options] +
+type specifies if the effect type, can be either "in" for +fade-in, or "out" for a fade-out effect. +
+start_frame specifies the number of the start frame for starting +to apply the fade effect. +
+nb_frames specifies the number of frames for which the fade +effect has to last. At the end of the fade-in effect the output video +will have the same intensity as the input video, at the end of the +fade-out transition the output video will be completely black. +
+options is an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+See type. +
+See start_frame. +
+See nb_frames. +
+If set to 1, fade only alpha channel, if one exists on the input. +Default value is 0. +
A few usage examples follow, usable too as test scenarios. +
# fade in first 30 frames of video +fade=in:0:30 + +# fade out last 45 frames of a 200-frame video +fade=out:155:45 + +# fade in first 25 frames and fade out last 25 frames of a 1000-frame video +fade=in:0:25, fade=out:975:25 + +# make first 5 frames black, then fade in from frame 5-24 +fade=in:5:20 + +# fade in alpha over first 25 frames of video +fade=in:0:25:alpha=1 + |
Transform the field order of the input video. +
+It accepts one parameter which specifies the required field order that +the input interlaced video will be transformed to. The parameter can +assume one of the following values: +
+output bottom field first +
output top field first +
Default value is "tff". +
+Transformation is achieved by shifting the picture content up or down +by one line, and filling the remaining line with appropriate picture content. +This method is consistent with most broadcast field order converters. +
+If the input video is not flagged as being interlaced, or it is already +flagged as being of the required output field order then this filter does +not alter the incoming video. +
+This filter is very useful when converting to or from PAL DV material, +which is bottom field first. +
+For example: +
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv + |
Buffer input images and send them when they are requested. +
+This filter is mainly useful when auto-inserted by the libavfilter +framework. +
+The filter does not take parameters. +
+ +Convert the input video to one of the specified pixel formats. +Libavfilter will try to pick one that is supported for the input to +the next filter. +
+The filter accepts a list of pixel format names, separated by ":", +for example "yuv420p:monow:rgb24". +
+Some examples follow: +
# convert the input video to the format "yuv420p" +format=yuv420p + +# convert the input video to any of the formats in the list +format=yuv420p:yuv444p:yuv410p + |
Apply a frei0r effect to the input video. +
+To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with --enable-frei0r.
+
The filter supports the syntax: +
filter_name[{:|=}param1:param2:...:paramN]
+ |
filter_name is the name to the frei0r effect to load. If the
+environment variable FREI0R_PATH is defined, the frei0r effect
+is searched in each one of the directories specified by the colon
+separated list in FREIOR_PATH, otherwise in the standard frei0r
+paths, which are in this order: ‘HOME/.frei0r-1/lib/’,
+‘/usr/local/lib/frei0r-1/’, ‘/usr/lib/frei0r-1/’.
+
param1, param2, ... , paramN specify the parameters +for the frei0r effect. +
+A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+R/G/B, R, G, and B being float
+numbers from 0.0 to 1.0) or by an av_parse_color() color
+description), a position (specified by the syntax X/Y,
+X and Y being float numbers) and a string.
+
The number and kind of parameters depend on the loaded effect. If an +effect parameter is not specified the default value is set. +
+Some examples follow: +
# apply the distort0r effect, set the first two double parameters +frei0r=distort0r:0.5:0.01 + +# apply the colordistance effect, takes a color as first parameter +frei0r=colordistance:0.2/0.3/0.4 +frei0r=colordistance:violet +frei0r=colordistance:0x112233 + +# apply the perspective effect, specify the top left and top right +# image positions +frei0r=perspective:0.2/0.2:0.8/0.2 + |
For more information see: +http://piksel.org/frei0r +
+ +Fix the banding artifacts that are sometimes introduced into nearly flat +regions by truncation to 8bit color depth. +Interpolate the gradients that should go where the bands are, and +dither them. +
+This filter is designed for playback only. Do not use it prior to +lossy compression, because compression tends to lose the dither and +bring back the bands. +
+The filter takes two optional parameters, separated by ’:’: +strength:radius +
+strength is the maximum amount by which the filter will change +any one pixel. Also the threshold for detecting nearly flat +regions. Acceptable values range from .51 to 255, default value is +1.2, out-of-range values will be clipped to the valid range. +
+radius is the neighborhood to fit the gradient to. A larger +radius makes for smoother gradients, but also prevents the filter from +modifying the pixels near detailed regions. Acceptable values are +8-32, default value is 16, out-of-range values will be clipped to the +valid range. +
+# default parameters +gradfun=1.2:16 + +# omitting radius +gradfun=1.2 + |
Flip the input video horizontally. +
+For example to horizontally flip the input video with ffmpeg:
+
ffmpeg -i in.avi -vf "hflip" out.avi + |
High precision/quality 3d denoise filter. This filter aims to reduce +image noise producing smooth images and making still images really +still. It should enhance compressibility. +
+It accepts the following optional parameters: +luma_spatial:chroma_spatial:luma_tmp:chroma_tmp +
+a non-negative float number which specifies spatial luma strength, +defaults to 4.0 +
+a non-negative float number which specifies spatial chroma strength, +defaults to 3.0*luma_spatial/4.0 +
+a float number which specifies luma temporal strength, defaults to +6.0*luma_spatial/4.0 +
+a float number which specifies chroma temporal strength, defaults to +luma_tmp*chroma_spatial/luma_spatial +
Compute a look-up table for binding each pixel component input value +to an output value, and apply it to input video. +
+lutyuv applies a lookup table to a YUV input video, lutrgb +to an RGB input video. +
+These filters accept in input a ":"-separated list of options, which +specify the expressions used for computing the lookup table for the +corresponding pixel component values. +
+The lut filter requires either YUV or RGB pixel formats in +input, and accepts the options: +
first pixel component +
second pixel component +
third pixel component +
fourth pixel component, corresponds to the alpha component +
The exact component associated to each option depends on the format in +input. +
+The lutrgb filter requires RGB pixel formats in input, and +accepts the options: +
red component +
green component +
blue component +
alpha component +
The lutyuv filter requires YUV pixel formats in input, and +accepts the options: +
Y/luminance component +
U/Cb component +
V/Cr component +
alpha component +
The expressions can contain the following constants and functions: +
+the input width and height +
+input value for the pixel component +
+the input value clipped in the minval-maxval range +
+maximum value for the pixel component +
+minimum value for the pixel component +
+the negated value for the pixel component value clipped in the +minval-maxval range , it corresponds to the expression +"maxval-clipval+minval" +
+the computed value in val clipped in the +minval-maxval range +
+the computed gamma correction value of the pixel component value +clipped in the minval-maxval range, corresponds to the +expression +"pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval" +
+All expressions default to "val". +
+Some examples follow: +
# negate input video +lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val" +lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" + +# the above is the same as +lutrgb="r=negval:g=negval:b=negval" +lutyuv="y=negval:u=negval:v=negval" + +# negate luminance +lutyuv=y=negval + +# remove chroma components, turns the video into a graytone image +lutyuv="u=128:v=128" + +# apply a luma burning effect +lutyuv="y=2*val" + +# remove green and blue components +lutrgb="g=0:b=0" + +# set a constant alpha channel value on input +format=rgba,lutrgb=a="maxval-minval/2" + +# correct luminance gamma by a 0.5 factor +lutyuv=y=gammaval(0.5) + |
Apply an MPlayer filter to the input video. +
+This filter provides a wrapper around most of the filters of +MPlayer/MEncoder. +
+This wrapper is considered experimental. Some of the wrapped filters +may not work properly and we may drop support for them, as they will +be implemented natively into FFmpeg. Thus you should avoid +depending on them when writing portable scripts. +
+The filters accepts the parameters: +filter_name[:=]filter_params +
+filter_name is the name of a supported MPlayer filter, +filter_params is a string containing the parameters accepted by +the named filter. +
+The list of the currently supported filters follows: +
The parameter syntax and behavior for the listed filters are the same +of the corresponding MPlayer filters. For detailed instructions check +the "VIDEO FILTERS" section in the MPlayer manual. +
+Some examples follow: +
# remove a logo by interpolating the surrounding pixels +mp=delogo=200:200:80:20:1 + +# adjust gamma, brightness, contrast +mp=eq2=1.0:2:0.5 + +# tweak hue and saturation +mp=hue=100:-10 + |
See also mplayer(1), http://www.mplayerhq.hu/. +
+ +Negate input video. +
+This filter accepts an integer in input, if non-zero it negates the +alpha component (if available). The default value in input is 0. +
+ +Force libavfilter not to use any of the specified pixel formats for the +input to the next filter. +
+The filter accepts a list of pixel format names, separated by ":", +for example "yuv420p:monow:rgb24". +
+Some examples follow: +
# force libavfilter to use a format different from "yuv420p" for the +# input to the vflip filter +noformat=yuv420p,vflip + +# convert the input video to any of the formats not contained in the list +noformat=yuv420p:yuv444p:yuv410p + |
Pass the video source unchanged to the output. +
+ +Apply video transform using libopencv. +
+To enable this filter install libopencv library and headers and
+configure FFmpeg with --enable-libopencv.
+
The filter takes the parameters: filter_name{:=}filter_params. +
+filter_name is the name of the libopencv filter to apply. +
+filter_params specifies the parameters to pass to the libopencv +filter. If not specified the default values are assumed. +
+Refer to the official libopencv documentation for more precise +information: +http://opencv.willowgarage.com/documentation/c/image_filtering.html +
+Follows the list of supported libopencv filters. +
+ +Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function cvDilate.
+
It accepts the parameters: struct_el:nb_iterations. +
+struct_el represents a structuring element, and has the syntax: +colsxrows+anchor_xxanchor_y/shape +
+cols and rows represent the number of columns and rows of +the structuring element, anchor_x and anchor_y the anchor +point, and shape the shape for the structuring element, and +can be one of the values "rect", "cross", "ellipse", "custom". +
+If the value for shape is "custom", it must be followed by a +string of the form "=filename". The file with name +filename is assumed to represent a binary image, with each +printable character corresponding to a bright pixel. When a custom +shape is used, cols and rows are ignored, the number +or columns and rows of the read file are assumed instead. +
+The default value for struct_el is "3x3+0x0/rect". +
+nb_iterations specifies the number of times the transform is +applied to the image, and defaults to 1. +
+Follow some example: +
# use the default values +ocv=dilate + +# dilate using a structuring element with a 5x5 cross, iterate two times +ocv=dilate=5x5+2x2/cross:2 + +# read the shape from the file diamond.shape, iterate two times +# the file diamond.shape may contain a pattern of characters like this: +# * +# *** +# ***** +# *** +# * +# the specified cols and rows are ignored (but not the anchor point coordinates) +ocv=0x0+2x2/custom=diamond.shape:2 + |
Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function cvErode.
+
The filter accepts the parameters: struct_el:nb_iterations, +with the same syntax and semantics as the dilate filter. +
+ +Smooth the input video. +
+The filter takes the following parameters: +type:param1:param2:param3:param4. +
+type is the type of smooth filter to apply, and can be one of +the following values: "blur", "blur_no_scale", "median", "gaussian", +"bilateral". The default value is "gaussian". +
+param1, param2, param3, and param4 are +parameters whose meanings depend on smooth type. param1 and +param2 accept integer positive values or 0, param3 and +param4 accept float values. +
+The default value for param1 is 3, the default value for the +other parameters is 0. +
+These parameters correspond to the parameters assigned to the
+libopencv function cvSmooth.
+
Overlay one video on top of another. +
+It takes two inputs and one output, the first input is the "main" +video on which the second input is overlayed. +
+It accepts the parameters: x:y[:options]. +
+x is the x coordinate of the overlayed video on the main video, +y is the y coordinate. x and y are expressions containing +the following parameters: +
+main input width and height +
+same as main_w and main_h +
+overlay input width and height +
+same as overlay_w and overlay_h +
options is an optional list of key=value pairs, +separated by ":". +
+The description of the accepted options follows. +
+If set to 1, force the filter to accept inputs in the RGB +color space. Default value is 0. +
Be aware that frames are taken from each input video in timestamp +order, hence, if their initial timestamps differ, it is a a good idea +to pass the two inputs through a setpts=PTS-STARTPTS filter to +have them begin in the same zero timestamp, as it does the example for +the movie filter. +
+Follow some examples: +
# draw the overlay at 10 pixels from the bottom right +# corner of the main video. +overlay=main_w-overlay_w-10:main_h-overlay_h-10 + +# insert a transparent PNG logo in the bottom left corner of the input +movie=logo.png [logo]; +[in][logo] overlay=10:main_h-overlay_h-10 [out] + +# insert 2 different transparent PNG logos (second logo on bottom +# right corner): +movie=logo1.png [logo1]; +movie=logo2.png [logo2]; +[in][logo1] overlay=10:H-h-10 [in+logo1]; +[in+logo1][logo2] overlay=W-w-10:H-h-10 [out] + +# add a transparent color layer on top of the main video, +# WxH specifies the size of the main input to the overlay filter +color=red.3:WxH [over]; [in][over] overlay [out] + |
You can chain together more overlays but the efficiency of such +approach is yet to be tested. +
+ +Add paddings to the input image, and places the original input at the +given coordinates x, y. +
+It accepts the following parameters: +width:height:x:y:color. +
+The parameters width, height, x, and y are +expressions containing the following constants: +
+the input video width and height +
+same as in_w and in_h +
+the output width and height, that is the size of the padded area as +specified by the width and height expressions +
+same as out_w and out_h +
+x and y offsets as specified by the x and y +expressions, or NAN if not yet specified +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
Follows the description of the accepted parameters. +
+Specify the size of the output image with the paddings added. If the +value for width or height is 0, the corresponding input size +is used for the output. +
+The width expression can reference the value set by the +height expression, and vice versa. +
+The default value of width and height is 0. +
+Specify the offsets where to place the input image in the padded area +with respect to the top/left border of the output image. +
+The x expression can reference the value set by the y +expression, and vice versa. +
+The default value of x and y is 0. +
+Specify the color of the padded area, it can be the name of a color +(case insensitive match) or a 0xRRGGBB[AA] sequence. +
+The default value of color is "black". +
+Some examples follow: +
+# Add paddings with color "violet" to the input video. Output video +# size is 640x480, the top-left corner of the input video is placed at +# column 0, row 40. +pad=640:480:0:40:violet + +# pad the input to get an output with dimensions increased bt 3/2, +# and put the input video at the center of the padded area +pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2" + +# pad the input to get a squared output with size equal to the maximum +# value between the input width and height, and put the input video at +# the center of the padded area +pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2" + +# pad the input to get a final w/h ratio of 16:9 +pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" + +# for anamorphic video, in order to set the output display aspect ratio, +# it is necessary to use sar in the expression, according to the relation: +# (ih * X / ih) * sar = output_dar +# X = output_dar / sar +pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2" + +# double output size and put the input video in the bottom-right +# corner of the output padded area +pad="2*iw:2*ih:ow-iw:oh-ih" + |
Pixel format descriptor test filter, mainly useful for internal +testing. The output video should be equal to the input video. +
+For example: +
format=monow, pixdesctest + |
can be used to test the monowhite pixel format descriptor definition. +
+ +Scale the input video to width:height[:interl={1|-1}] and/or convert the image format. +
+The parameters width and height are expressions containing +the following constants: +
+the input width and height +
+same as in_w and in_h +
+the output (cropped) width and height +
+same as out_w and out_h +
+same as iw / ih +
+input sample aspect ratio +
+input display aspect ratio, it is the same as (iw / ih) * sar +
+horizontal and vertical chroma subsample values. For example for the +pixel format "yuv422p" hsub is 2 and vsub is 1. +
If the input image format is different from the format requested by +the next filter, the scale filter will convert the input to the +requested format. +
+If the value for width or height is 0, the respective input +size is used for the output. +
+If the value for width or height is -1, the scale filter will +use, for the respective output size, a value that maintains the aspect +ratio of the input image. +
+The default value of width and height is 0. +
+Valid values for the optional parameter interl are: +
+force interlaced aware scaling +
+select interlaced aware scaling depending on whether the source frames +are flagged as interlaced or not +
Some examples follow: +
# scale the input video to a size of 200x100. +scale=200:100 + +# scale the input to 2x +scale=2*iw:2*ih +# the above is the same as +scale=2*in_w:2*in_h + +# scale the input to half size +scale=iw/2:ih/2 + +# increase the width, and set the height to the same size +scale=3/2*iw:ow + +# seek for Greek harmony +scale=iw:1/PHI*iw +scale=ih*PHI:ih + +# increase the height, and set the width to 3/2 of the height +scale=3/2*oh:3/5*ih + +# increase the size, but make the size a multiple of the chroma +scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub" + +# increase the width to a maximum of 500 pixels, keep the same input aspect ratio +scale='min(500\, iw*3/2):-1' + |
Select frames to pass in output. +
+It accepts in input an expression, which is evaluated for each input +frame. If the expression is evaluated to a non-zero value, the frame +is selected and passed to the output, otherwise it is discarded. +
+The expression can contain the following constants: +
+the sequential number of the filtered frame, starting from 0 +
+the sequential number of the selected frame, starting from 0 +
+the sequential number of the last selected frame, NAN if undefined +
+timebase of the input timestamps +
+the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in TB units, NAN if undefined +
+the PTS (Presentation TimeStamp) of the filtered video frame, +expressed in seconds, NAN if undefined +
+the PTS of the previously filtered video frame, NAN if undefined +
+the PTS of the last previously filtered video frame, NAN if undefined +
+the PTS of the last previously selected video frame, NAN if undefined +
+the PTS of the first video frame in the video, NAN if undefined +
+the time of the first video frame in the video, NAN if undefined +
+the type of the filtered frame, can assume one of the following +values: +
the frame interlace type, can assume one of the following values: +
the frame is progressive (not interlaced) +
the frame is top-field-first +
the frame is bottom-field-first +
1 if the filtered frame is a key-frame, 0 otherwise +
+the position in the file of the filtered frame, -1 if the information +is not available (e.g. for synthetic video) +
The default value of the select expression is "1". +
+Some examples follow: +
+# select all frames in input +select + +# the above is the same as: +select=1 + +# skip all frames: +select=0 + +# select only I-frames +select='eq(pict_type\,I)' + +# select one frame every 100 +select='not(mod(n\,100))' + +# select only frames contained in the 10-20 time interval +select='gte(t\,10)*lte(t\,20)' + +# select only I frames contained in the 10-20 time interval +select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)' + +# select frames with a minimum distance of 10 seconds +select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)' + |
Set the Display Aspect Ratio for the filter output video. +
+This is done by changing the specified Sample (aka Pixel) Aspect +Ratio, according to the following equation: +DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR +
+Keep in mind that this filter does not modify the pixel dimensions of +the video frame. Also the display aspect ratio set by this filter may +be changed by later filters in the filterchain, e.g. in case of +scaling or if another "setdar" or a "setsar" filter is applied. +
+The filter accepts a parameter string which represents the wanted +display aspect ratio. +The parameter can be a floating point number string, or an expression +of the form num:den, where num and den are the +numerator and denominator of the aspect ratio. +If the parameter is not specified, it is assumed the value "0:1". +
+For example to change the display aspect ratio to 16:9, specify: +
setdar=16:9 +# the above is equivalent to +setdar=1.77777 + |
See also the setsar filter documentation. +
+ +Change the PTS (presentation timestamp) of the input video frames. +
+Accept in input an expression evaluated through the eval API, which +can contain the following constants: +
+the presentation timestamp in input +
+the count of the input frame, starting from 0. +
+the PTS of the first video frame +
+tell if the current frame is interlaced +
+original position in the file of the frame, or undefined if undefined +for the current frame +
+previous input PTS +
+previous output PTS +
+Some examples follow: +
+# start counting PTS from zero +setpts=PTS-STARTPTS + +# fast motion +setpts=0.5*PTS + +# slow motion +setpts=2.0*PTS + +# fixed rate 25 fps +setpts=N/(25*TB) + +# fixed rate 25 fps with some jitter +setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))' + |
Set the Sample (aka Pixel) Aspect Ratio for the filter output video. +
+Note that as a consequence of the application of this filter, the +output display aspect ratio will change according to the following +equation: +DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR +
+Keep in mind that the sample aspect ratio set by this filter may be +changed by later filters in the filterchain, e.g. if another "setsar" +or a "setdar" filter is applied. +
+The filter accepts a parameter string which represents the wanted +sample aspect ratio. +The parameter can be a floating point number string, or an expression +of the form num:den, where num and den are the +numerator and denominator of the aspect ratio. +If the parameter is not specified, it is assumed the value "0:1". +
+For example to change the sample aspect ratio to 10:11, specify: +
setsar=10:11 + |
Set the timebase to use for the output frames timestamps. +It is mainly useful for testing timebase configuration. +
+It accepts in input an arithmetic expression representing a rational. +The expression can contain the constants "AVTB" (the +default timebase), and "intb" (the input timebase). +
+The default value for the input is "intb". +
+Follow some examples. +
+# set the timebase to 1/25 +settb=1/25 + +# set the timebase to 1/10 +settb=0.1 + +#set the timebase to 1001/1000 +settb=1+0.001 + +#set the timebase to 2*intb +settb=2*intb + +#set the default timebase value +settb=AVTB + |
Show a line containing various information for each input video frame. +The input video is not modified. +
+The shown line contains a sequence of key/value pairs of the form +key:value. +
+A description of each shown parameter follows: +
+sequential number of the input frame, starting from 0 +
+Presentation TimeStamp of the input frame, expressed as a number of +time base units. The time base unit depends on the filter input pad. +
+Presentation TimeStamp of the input frame, expressed as a number of +seconds +
+position of the frame in the input stream, -1 if this information in +unavailable and/or meaningless (for example in case of synthetic video) +
+pixel format name +
+sample aspect ratio of the input frame, expressed in the form +num/den +
+size of the input frame, expressed in the form +widthxheight +
+interlaced mode ("P" for "progressive", "T" for top field first, "B" +for bottom field first) +
+1 if the frame is a key frame, 0 otherwise +
+picture type of the input frame ("I" for an I-frame, "P" for a
+P-frame, "B" for a B-frame, "?" for unknown type).
+Check also the documentation of the AVPictureType enum and of
+the av_get_picture_type_char function defined in
+‘libavutil/avutil.h’.
+
Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame +
+Adler-32 checksum (printed in hexadecimal) of each plane of the input frame, +expressed in the form "[c0 c1 c2 c3]" +
Pass the images of input video on to next video filter as multiple +slices. +
+ffmpeg -i in.avi -vf "slicify=32" out.avi + |
The filter accepts the slice height as parameter. If the parameter is +not specified it will use the default value of 16. +
+Adding this in the beginning of filter chains should make filtering +faster due to better use of the memory cache. +
+ +Pass on the input video to two outputs. Both outputs are identical to +the input video. +
+For example: +
[in] split [splitout1][splitout2]; +[splitout1] crop=100:100:0:0 [cropout]; +[splitout2] pad=200:200:100:100 [padout]; + |
will create two separate outputs from the same input, one cropped and +one padded. +
+ +Select the most representative frame in a given sequence of consecutive frames. +
+It accepts as argument the frames batch size to analyze (default N=100); +in a set of N frames, the filter will pick one of them, and then handle +the next batch of N frames until the end. +
+Since the filter keeps track of the whole frames sequence, a bigger N +value will result in a higher memory usage, so a high value is not recommended. +
+The following example extract one picture each 50 frames: +
thumbnail=50 + |
Complete example of a thumbnail creation with ffmpeg:
+
ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png + |
Perform various types of temporal field interlacing. +
+Frames are counted starting from 1, so the first input frame is +considered odd. +
+This filter accepts a single parameter specifying the mode. Available +modes are: +
+Move odd frames into the upper field, even into the lower field, +generating a double height frame at half framerate. +
+Only output even frames, odd frames are dropped, generating a frame with +unchanged height at half framerate. +
+Only output odd frames, even frames are dropped, generating a frame with +unchanged height at half framerate. +
+Expand each frame to full height, but pad alternate lines with black, +generating a frame with double height at the same input framerate. +
+Interleave the upper field from odd frames with the lower field from +even frames, generating a frame with unchanged height at half framerate. +
+Interleave the lower field from odd frames with the upper field from +even frames, generating a frame with unchanged height at half framerate. +
Default mode is 0. +
+ +Transpose rows with columns in the input video and optionally flip it. +
+It accepts a parameter representing an integer, which can assume the +values: +
+Rotate by 90 degrees counterclockwise and vertically flip (default), that is: +
L.R L.l +. . -> . . +l.r R.r + |
Rotate by 90 degrees clockwise, that is: +
L.R l.L +. . -> . . +l.r r.R + |
Rotate by 90 degrees counterclockwise, that is: +
L.R R.r +. . -> . . +l.r L.l + |
Rotate by 90 degrees clockwise and vertically flip, that is: +
L.R r.R +. . -> . . +l.r l.L + |
Sharpen or blur the input video. +
+It accepts the following parameters: +luma_msize_x:luma_msize_y:luma_amount:chroma_msize_x:chroma_msize_y:chroma_amount +
+Negative values for the amount will blur the input video, while positive +values will sharpen. All parameters are optional and default to the +equivalent of the string ’5:5:1.0:5:5:0.0’. +
+Set the luma matrix horizontal size. It can be an integer between 3 +and 13, default value is 5. +
+Set the luma matrix vertical size. It can be an integer between 3 +and 13, default value is 5. +
+Set the luma effect strength. It can be a float number between -2.0 +and 5.0, default value is 1.0. +
+Set the chroma matrix horizontal size. It can be an integer between 3 +and 13, default value is 5. +
+Set the chroma matrix vertical size. It can be an integer between 3 +and 13, default value is 5. +
+Set the chroma effect strength. It can be a float number between -2.0 +and 5.0, default value is 0.0. +
+# Strong luma sharpen effect parameters
+unsharp=7:7:2.5
+
+# Strong blur of both luma and chroma parameters
+unsharp=7:7:-2:7:7:-2
+
+# Use the default values with |
Flip the input video vertically. +
+ffmpeg -i in.avi -vf "vflip" out.avi + |
Deinterlace the input video ("yadif" means "yet another deinterlacing +filter"). +
+It accepts the optional parameters: mode:parity:auto. +
+mode specifies the interlacing mode to adopt, accepts one of the +following values: +
+output 1 frame for each frame +
output 1 frame for each field +
like 0 but skips spatial interlacing check +
like 1 but skips spatial interlacing check +
Default value is 0. +
+parity specifies the picture field parity assumed for the input +interlaced video, accepts one of the following values: +
+assume top field first +
assume bottom field first +
enable automatic detection +
Default value is -1. +If interlacing is unknown or decoder does not export this information, +top field first will be assumed. +
+auto specifies if deinterlacer should trust the interlaced flag +and only deinterlace frames marked as interlaced +
+deinterlace all frames +
only deinterlace frames marked as interlaced +
Default value is 0. +
+ + +Below is a description of the currently available video sources. +
+ +Buffer video frames, and make them available to the filter chain. +
+This source is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/vsrc_buffer.h’. +
+It accepts the following parameters: +width:height:pix_fmt_string:timebase_num:timebase_den:sample_aspect_ratio_num:sample_aspect_ratio.den:scale_params +
+All the parameters but scale_params need to be explicitly +defined. +
+Follows the list of the accepted parameters. +
+Specify the width and height of the buffered video frames. +
+A string representing the pixel format of the buffered video frames. +It may be a number corresponding to a pixel format, or a pixel format +name. +
+Specify numerator and denomitor of the timebase assumed by the +timestamps of the buffered frames. +
+Specify numerator and denominator of the sample aspect ratio assumed +by the video frames. +
+Specify the optional parameters to be used for the scale filter which +is automatically inserted when an input change is detected in the +input size or format. +
For example: +
buffer=320:240:yuv410p:1:24:1:1 + |
will instruct the source to accept video frames with size 320x240 and +with format "yuv410p", assuming 1/24 as the timestamps timebase and +square pixels (1:1 sample aspect ratio). +Since the pixel format with name "yuv410p" corresponds to the number 6 +(check the enum PixelFormat definition in ‘libavutil/pixfmt.h’), +this example corresponds to: +
buffer=320:240:6:1:24:1:1 + |
Create a pattern generated by an elementary cellular automaton. +
+The initial state of the cellular automaton can be defined through the +‘filename’, and ‘pattern’ options. If such options are +not specified an initial state is created randomly. +
+At each new frame a new row in the video is filled with the result of +the cellular automaton next generation. The behavior when the whole +frame is filled is defined by the ‘scroll’ option. +
+This source accepts a list of options in the form of +key=value pairs separated by ":". A description of the +accepted options follows. +
+Read the initial cellular automaton state, i.e. the starting row, from +the specified file. +In the file, each non-whitespace character is considered an alive +cell, a newline will terminate the row, and further characters in the +file will be ignored. +
+Read the initial cellular automaton state, i.e. the starting row, from +the specified string. +
+Each non-whitespace character in the string is considered an alive +cell, a newline will terminate the row, and further characters in the +string will be ignored. +
+Set the video rate, that is the number of frames generated per second. +Default is 25. +
+Set the random fill ratio for the initial cellular automaton row. It +is a floating point number value ranging from 0 to 1, defaults to +1/PHI. +
+This option is ignored when a file or a pattern is specified. +
+Set the seed for filling randomly the initial row, must be an integer +included between 0 and UINT32_MAX. If not specified, or if explicitly +set to -1, the filter will try to use a good random seed on a best +effort basis. +
+Set the cellular automaton rule, it is a number ranging from 0 to 255. +Default value is 110. +
+Set the size of the output video. +
+If ‘filename’ or ‘pattern’ is specified, the size is set +by default to the width of the specified initial state row, and the +height is set to width * PHI. +
+If ‘size’ is set, it must contain the width of the specified +pattern string, and the specified pattern will be centered in the +larger row. +
+If a filename or a pattern string is not specified, the size value +defaults to "320x518" (used for a randomly generated initial state). +
+If set to 1, scroll the output upward when all the rows in the output +have been already filled. If set to 0, the new generated row will be +written over the top row just after the bottom row is filled. +Defaults to 1. +
+If set to 1, completely fill the output with generated rows before +outputting the first frame. +This is the default behavior, for disabling set the value to 0. +
+If set to 1, stitch the left and right row edges together. +This is the default behavior, for disabling set the value to 0. +
cellauto=f=pattern:s=200x400 + |
cellauto=ratio=2/3:s=200x200 + |
cellauto=p=@:s=100x400:full=0:rule=18 + |
cellauto=p='@@ @ @@':s=100x400:full=0:rule=18 + |
Provide an uniformly colored input. +
+It accepts the following parameters: +color:frame_size:frame_rate +
+Follows the description of the accepted parameters. +
+Specify the color of the source. It can be the name of a color (case +insensitive match) or a 0xRRGGBB[AA] sequence, possibly followed by an +alpha specifier. The default value is "black". +
+Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. The +default value is "320x240". +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+For example the following graph description will generate a red source +with an opacity of 0.2, with size "qcif" and a frame rate of 10 +frames per second, which will be overlayed over the source connected +to the pad with identifier "in". +
+"color=red@0.2:qcif:10 [color]; [in][color] overlay [out]" + |
Read a video stream from a movie container. +
+It accepts the syntax: movie_name[:options] where +movie_name is the name of the resource to read (not necessarily +a file but also a device or a stream accessed through some protocol), +and options is an optional sequence of key=value +pairs, separated by ":". +
+The description of the accepted options follows. +
+Specifies the format assumed for the movie to read, and can be either +the name of a container or an input device. If not specified the +format is guessed from movie_name or by probing. +
+Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+av_strtod so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+
Specifies the index of the video stream to read. If the value is -1, +the best suited video stream will be automatically selected. Default +value is "-1". +
+This filter allows to overlay a second video on top of main input of +a filtergraph as shown in this graph: +
input -----------> deltapts0 --> overlay --> output + ^ + | +movie --> scale--> deltapts1 -------+ + |
Some examples follow: +
# skip 3.2 seconds from the start of the avi file in.avi, and overlay it +# on top of the input labelled as "in". +movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [movie]; +[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out] + +# read from a video4linux2 device, and overlay it on top of the input +# labelled as "in" +movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [movie]; +[in] setpts=PTS-STARTPTS, [movie] overlay=16:16 [out] + + |
Generate various test patterns, as generated by the MPlayer test filter. +
+The size of the generated video is fixed, and is 256x256. +This source is useful in particular for testing encoding features. +
+This source accepts an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+Set the video duration of the sourced video. The accepted syntax is: +
[-]HH[:MM[:SS[.m...]]] +[-]S+[.m...] + |
See also the function av_parse_time().
+
If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +
+Set the number or the name of the test to perform. Supported tests are: +
Default value is "all", which will cycle through the list of all tests. +
For example the following: +
testsrc=t=dc_luma + |
will generate a "dc_luma" test pattern. +
+ +Provide a frei0r source. +
+To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with --enable-frei0r.
+
The source supports the syntax: +
size:rate:src_name[{=|:}param1:param2:...:paramN]
+ |
size is the size of the video to generate, may be a string of the +form widthxheight or a frame size abbreviation. +rate is the rate of the video to generate, may be a string of +the form num/den or a frame rate abbreviation. +src_name is the name to the frei0r source to load. For more +information regarding frei0r and how to set the parameters read the +section frei0r in the description of the video filters. +
+Some examples follow: +
# generate a frei0r partik0l source with size 200x200 and frame rate 10 +# which is overlayed on the overlay filter main input +frei0r_src=200x200:10:partik0l=1234 [overlay]; [in][overlay] overlay + |
Generate a life pattern. +
+This source is based on a generalization of John Conway’s life game. +
+The sourced input represents a life grid, each pixel represents a cell +which can be in one of two possible states, alive or dead. Every cell +interacts with its eight neighbours, which are the cells that are +horizontally, vertically, or diagonally adjacent. +
+At each interaction the grid evolves according to the adopted rule, +which specifies the number of neighbor alive cells which will make a +cell stay alive or born. The ‘rule’ option allows to specify +the rule to adopt. +
+This source accepts a list of options in the form of +key=value pairs separated by ":". A description of the +accepted options follows. +
+Set the file from which to read the initial grid state. In the file, +each non-whitespace character is considered an alive cell, and newline +is used to delimit the end of each row. +
+If this option is not specified, the initial grid is generated +randomly. +
+Set the video rate, that is the number of frames generated per second. +Default is 25. +
+Set the random fill ratio for the initial random grid. It is a +floating point number value ranging from 0 to 1, defaults to 1/PHI. +It is ignored when a file is specified. +
+Set the seed for filling the initial random grid, must be an integer +included between 0 and UINT32_MAX. If not specified, or if explicitly +set to -1, the filter will try to use a good random seed on a best +effort basis. +
+Set the life rule. +
+A rule can be specified with a code of the kind "SNS/BNB", +where NS and NB are sequences of numbers in the range 0-8, +NS specifies the number of alive neighbor cells which make a +live cell stay alive, and NB the number of alive neighbor cells +which make a dead cell to become alive (i.e. to "born"). +"s" and "b" can be used in place of "S" and "B", respectively. +
+Alternatively a rule can be specified by an 18-bits integer. The 9
+high order bits are used to encode the next cell state if it is alive
+for each number of neighbor alive cells, the low order bits specify
+the rule for "borning" new cells. Higher order bits encode for an
+higher number of neighbor cells.
+For example the number 6153 = (12<<9)+9 specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+
Default value is "S23/B3", which is the original Conway’s game of life +rule, and will keep a cell alive if it has 2 or 3 neighbor alive +cells, and will born a new cell if there are three alive cells around +a dead cell. +
+Set the size of the output video. +
+If ‘filename’ is specified, the size is set by default to the +same size of the input file. If ‘size’ is set, it must contain +the size specified in the input file, and the initial grid defined in +that file is centered in the larger resulting area. +
+If a filename is not specified, the size value defaults to "320x240" +(used for a randomly generated initial grid). +
+If set to 1, stitch the left and right grid edges together, and the +top and bottom edges also. Defaults to 1. +
+Set cell mold speed. If set, a dead cell will go from ‘death_color’ to +‘mold_color’ with a step of ‘mold’. ‘mold’ can have a +value from 0 to 255. +
+Set the color of living (or new born) cells. +
+Set the color of dead cells. If ‘mold’ is set, this is the first color +used to represent a dead cell. +
+Set mold color, for definitely dead and moldy cells. +
life=f=pattern:s=300x300 + |
life=ratio=2/3:s=200x200 + |
life=rule=S14/B34 + |
ffplay:
+ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16 + |
The nullsrc source returns unprocessed video frames. It is
+mainly useful to be employed in analysis / debugging tools, or as the
+source for filters which ignore the input data.
+
The rgbtestsrc source generates an RGB test pattern useful for
+detecting RGB vs BGR issues. You should see a red, green and blue
+stripe from top to bottom.
+
The testsrc source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+
These sources accept an optional sequence of key=value pairs, +separated by ":". The description of the accepted options follows. +
+Specify the size of the sourced video, it may be a string of the form +widthxheight, or the name of a size abbreviation. The +default value is "320x240". +
+Specify the frame rate of the sourced video, as the number of frames +generated per second. It has to be a string in the format +frame_rate_num/frame_rate_den, an integer number, a float +number or a valid video frame rate abbreviation. The default value is +"25". +
+Set the sample aspect ratio of the sourced video. +
+Set the video duration of the sourced video. The accepted syntax is: +
[-]HH[:MM[:SS[.m...]]] +[-]S+[.m...] + |
See also the function av_parse_time().
+
If not specified, or the expressed duration is negative, the video is +supposed to be generated forever. +
+Set the number of decimals to show in the timestamp, only used in the
+testsrc source.
+
The displayed timestamp value will correspond to the original +timestamp value multiplied by the power of 10 of the specified +value. Default value is 0. +
For example the following: +
testsrc=duration=5.3:size=qcif:rate=10 + |
will generate a video with a duration of 5.3 seconds, with size +176x144 and a frame rate of 10 frames per second. +
+If the input content is to be ignored, nullsrc can be used. The
+following command generates noise in the luminance plane by employing
+the mp=geq filter:
+
nullsrc=s=256x256, mp=geq=random(1)*255:128:128 + |
Below is a description of the currently available video sinks. +
+ +Buffer video frames, and make them available to the end of the filter +graph. +
+This sink is mainly intended for a programmatic use, in particular +through the interface defined in ‘libavfilter/buffersink.h’. +
+It does not require a string parameter in input, but you need to
+specify a pointer to a list of supported pixel formats terminated by
+-1 in the opaque parameter provided to avfilter_init_filter
+when initializing this sink.
+
Null video sink, do absolutely nothing with the input video. It is +mainly useful as a template and to be employed in analysis / debugging +tools. +
+ + +Some parts of FFmpeg cannot be built with version 2.15 of the GNU +assembler which is still provided by a few AMD64 distributions. To +make sure your compiler really uses the required version of gas +after a binutils upgrade, run: +
+$(gcc -print-prog-name=as) --version + |
If not, then you should install a different compiler that has no
+hard-coded path to gas. In the worst case pass --disable-asm
+to configure.
+
BSD make will not build FFmpeg, you need to install and use GNU Make +(‘gmake’). +
+ +GNU Make is required to build FFmpeg, so you have to invoke (‘gmake’),
+standard Solaris Make will not work. When building with a non-c99 front-end
+(gcc, generic suncc) add either --extra-libs=/usr/lib/values-xpg6.o
+or --extra-libs=/usr/lib/64/values-xpg6.o to the configure options
+since the libc is not c99-compliant by default. The probes performed by
+configure may raise an exception leading to the death of configure itself
+due to a bug in the system shell. Simply invoke a different shell such as
+bash directly to work around this:
+
bash ./configure + |
The toolchain provided with Xcode is sufficient to build the basic +unacelerated code. +
+Mac OS X on PowerPC or ARM (iPhone) requires a preprocessor from +http://github.com/yuvi/gas-preprocessor to build the optimized +assembler functions. Just download the Perl script and put it somewhere +in your PATH, FFmpeg’s configure will pick it up automatically. +
+Mac OS X on amd64 and x86 requires yasm to build most of the
+optimized assembler functions. Fink,
+Gentoo Prefix,
+Homebrew
+or MacPorts can easily provide it.
+
Using a cross-compiler is preferred for various reasons. +http://www.delorie.com/howto/djgpp/linux-x-djgpp.html +
+ + +For information about compiling FFmpeg on OS/2 see +http://www.edm2.com/index.php/FFmpeg. +
+ + +To get help and instructions for building FFmpeg under Windows, check out +the FFmpeg Windows Help Forum at +http://ffmpeg.arrozcru.org/. +
+ +FFmpeg can be built to run natively on Windows using the MinGW tools. Install +the latest versions of MSYS and MinGW from http://www.mingw.org/. +You can find detailed installation instructions in the download +section and the FAQ. +
+FFmpeg does not build out-of-the-box with the packages the automated MinGW +installer provides. It also requires coreutils to be installed and many other +packages updated to the latest version. The minimum version for some packages +are listed below: +
+FFmpeg automatically passes -fno-common to the compiler to work around
+a GCC bug (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216).
+
Notes: +
+make -r instead of plain make. This
+speed up is close to non-existent for normal one-off builds and is only
+noticeable when running make for a second time (for example in
+make install).
+
+./configure --enable-shared when configuring FFmpeg,
+you can build the FFmpeg libraries (e.g. libavutil, libavcodec,
+libavformat) as DLLs.
+
+As stated in the FAQ, FFmpeg will not compile under MSVC++. However, if you +want to use the libav* libraries in your own applications, you can still +compile those applications using MSVC++. But the libav* libraries you link +to must be built with MinGW. However, you will not be able to debug +inside the libav* libraries, since MSVC++ does not recognize the debug +symbols generated by GCC. +We strongly recommend you to move over from MSVC++ to MinGW tools. +
+This description of how to use the FFmpeg libraries with MSVC++ is based on +Microsoft Visual C++ 2005 Express Edition. If you have a different version, +you might have to modify the procedures slightly. +
+ +Assuming you have just built and installed FFmpeg in ‘/usr/local’. +
+inline keyword used by
+FFmpeg, so you must add this line before #includeing libav*:
+#define inline _inline + |
This is how to create DLL and LIB files that are compatible with MSVC++: +
+call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat" + |
Alternatively, you may start the ‘Visual Studio 2005 Command Prompt’, +and run ‘c:\msys\1.0\msys.bat’ from there. +
+lib.exe. If you get a help message
+from ‘Microsoft (R) Library Manager’, this means your environment
+variables are set up correctly, the ‘Microsoft (R) Library Manager’
+is on the path and will be used by FFmpeg to create
+MSVC++-compatible import libraries.
+
+./configure --enable-shared +make +make install + |
Your install path (‘/usr/local/’ by default) should now have the +necessary DLL and LIB files under the ‘bin’ directory. +
+Alternatively, build the libraries with a cross compiler, according to +the instructions below in Cross compilation for Windows with Linux. +
+To use those files with MSVC++, do the same as you would do with +the static libraries, as described above. But in Step 4, +you should only need to add the directory where the LIB files are installed +(i.e. ‘c:\msys\usr\local\bin’). This is not a typo, the LIB files are +installed in the ‘bin’ directory. And instead of adding the static +libraries (‘libxxx.a’ files) you should add the MSVC import libraries +(‘avcodec.lib’, ‘avformat.lib’, and +‘avutil.lib’). Note that you should not use the GCC import +libraries (‘libxxx.dll.a’ files), as these will give you undefined +reference errors. There should be no need for ‘libmingwex.a’, +‘libgcc.a’, and ‘wsock32.lib’, nor any other external library +statically linked into the DLLs. +
+FFmpeg headers do not declare global data for Windows DLLs through the usual +dllexport/dllimport interface. Such data will be exported properly while +building, but to use them in your MSVC++ code you will have to edit the +appropriate headers and mark the data as dllimport. For example, in +libavutil/pixdesc.h you should have: +
extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[]; + |
Note that using import libraries created by dlltool requires
+the linker optimization option to be set to
+"References: Keep Unreferenced Data (/OPT:NOREF)", otherwise
+the resulting binaries will fail during runtime. This isn’t
+required when using import libraries generated by lib.exe.
+This issue is reported upstream at
+http://sourceware.org/bugzilla/show_bug.cgi?id=12633.
+
To create import libraries that work with the /OPT:REF option
+(which is enabled by default in Release mode), follow these steps:
+
Alternatively, in a normal command line prompt, call ‘vcvars32.bat’ +which sets up the environment variables for the Visual C++ tools +(the standard location for this file is +‘C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat’). +
+lib /machine:i386 /def:..\lib\avcodec-53.def /out:avcodec.lib +lib /machine:i386 /def:..\lib\avdevice-53.def /out:avdevice.lib +lib /machine:i386 /def:..\lib\avfilter-2.def /out:avfilter.lib +lib /machine:i386 /def:..\lib\avformat-53.def /out:avformat.lib +lib /machine:i386 /def:..\lib\avutil-51.def /out:avutil.lib +lib /machine:i386 /def:..\lib\swscale-2.def /out:swscale.lib + |
You must use the MinGW cross compilation tools available at +http://www.mingw.org/. +
+Then configure FFmpeg with the following options: +
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc- + |
(you can change the cross-prefix according to the prefix chosen for the +MinGW tools). +
+Then you can easily test FFmpeg with Wine. +
+ +Please use Cygwin 1.7.x as the obsolete 1.5.x Cygwin versions lack +llrint() in its C library. +
+Install your Cygwin with all the "Base" packages, plus the +following "Devel" ones: +
binutils, gcc4-core, make, git, mingw-runtime, texi2html + |
And the following "Utils" one: +
diffutils + |
Then run +
+./configure + |
to make a static build. +
+The current gcc4-core package is buggy and needs this flag to build
+shared libraries:
+
./configure --enable-shared --disable-static --extra-cflags=-fno-reorder-functions + |
If you want to build FFmpeg with additional libraries, download Cygwin +"Devel" packages for Ogg and Vorbis from any Cygwin packages repository: +
libogg-devel, libvorbis-devel + |
These library packages are only available from +Cygwin Ports: +
+yasm, libSDL-devel, libdirac-devel, libfaac-devel, libaacplus-devel, libgsm-devel, +libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel, +libxvidcore-devel + |
The recommendation for libnut and x264 is to build them from source by +yourself, as they evolve too quickly for Cygwin Ports to be up to date. +
+Cygwin 1.7.x has IPv6 support. You can add IPv6 to Cygwin 1.5.x by means
+of the libgetaddrinfo-devel package, available at Cygwin Ports.
+
With Cygwin you can create Windows binaries that do not need the cygwin1.dll. +
+Just install your Cygwin as explained before, plus these additional +"Devel" packages: +
gcc-mingw-core, mingw-runtime, mingw-zlib + |
and add some special flags to your configure invocation. +
+For a static build run +
./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin + |
and for a build with shared libraries +
./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin + |
> 31 & ((1<
amax) return amax;
+ else return a;
+}
+
+/** Compute ceil(log2(x)).
+ * @param x value used to compute ceil(log2(x))
+ * @return computed ceiling of log2(x)
+ */
+static av_always_inline av_const int av_ceil_log2_c(int x)
+{
+ return av_log2((x - 1) << 1);
+}
+
+/**
+ * Count number of bits set to one in x
+ * @param x value to count bits of
+ * @return the number of bits set to one in x
+ */
+static av_always_inline av_const int av_popcount_c(uint32_t x)
+{
+ x -= (x >> 1) & 0x55555555;
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x + (x >> 4)) & 0x0F0F0F0F;
+ x += x >> 8;
+ return (x + (x >> 16)) & 0x3F;
+}
+
+/**
+ * Count number of bits set to one in x
+ * @param x value to count bits of
+ * @return the number of bits set to one in x
+ */
+static av_always_inline av_const int av_popcount64_c(uint64_t x)
+{
+ return av_popcount(x) + av_popcount(x >> 32);
+}
+
+#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
+#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
+
+/**
+ * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
+ *
+ * @param val Output value, must be an lvalue of type uint32_t.
+ * @param GET_BYTE Expression reading one byte from the input.
+ * Evaluated up to 7 times (4 for the currently
+ * assigned Unicode range). With a memory buffer
+ * input, this could be *ptr++.
+ * @param ERROR Expression to be evaluated on invalid input,
+ * typically a goto statement.
+ */
+#define GET_UTF8(val, GET_BYTE, ERROR)\
+ val= GET_BYTE;\
+ {\
+ int ones= 7 - av_log2(val ^ 255);\
+ if(ones==1)\
+ ERROR\
+ val&= 127>>ones;\
+ while(--ones > 0){\
+ int tmp= GET_BYTE - 128;\
+ if(tmp>>6)\
+ ERROR\
+ val= (val<<6) + tmp;\
+ }\
+ }
+
+/**
+ * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
+ *
+ * @param val Output value, must be an lvalue of type uint32_t.
+ * @param GET_16BIT Expression returning two bytes of UTF-16 data converted
+ * to native byte order. Evaluated one or two times.
+ * @param ERROR Expression to be evaluated on invalid input,
+ * typically a goto statement.
+ */
+#define GET_UTF16(val, GET_16BIT, ERROR)\
+ val = GET_16BIT;\
+ {\
+ unsigned int hi = val - 0xD800;\
+ if (hi < 0x800) {\
+ val = GET_16BIT - 0xDC00;\
+ if (val > 0x3FFU || hi > 0x3FFU)\
+ ERROR\
+ val += (hi<<10) + 0x10000;\
+ }\
+ }\
+
+/**
+ * @def PUT_UTF8(val, tmp, PUT_BYTE)
+ * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
+ * @param val is an input-only argument and should be of type uint32_t. It holds
+ * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
+ * val is given as a function it is executed only once.
+ * @param tmp is a temporary variable and should be of type uint8_t. It
+ * represents an intermediate value during conversion that is to be
+ * output by PUT_BYTE.
+ * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
+ * It could be a function or a statement, and uses tmp as the input byte.
+ * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
+ * executed up to 4 times for values in the valid UTF-8 range and up to
+ * 7 times in the general case, depending on the length of the converted
+ * Unicode character.
+ */
+#define PUT_UTF8(val, tmp, PUT_BYTE)\
+ {\
+ int bytes, shift;\
+ uint32_t in = val;\
+ if (in < 0x80) {\
+ tmp = in;\
+ PUT_BYTE\
+ } else {\
+ bytes = (av_log2(in) + 4) / 5;\
+ shift = (bytes - 1) * 6;\
+ tmp = (256 - (256 >> bytes)) | (in >> shift);\
+ PUT_BYTE\
+ while (shift >= 6) {\
+ shift -= 6;\
+ tmp = 0x80 | ((in >> shift) & 0x3f);\
+ PUT_BYTE\
+ }\
+ }\
+ }
+
+/**
+ * @def PUT_UTF16(val, tmp, PUT_16BIT)
+ * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
+ * @param val is an input-only argument and should be of type uint32_t. It holds
+ * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
+ * val is given as a function it is executed only once.
+ * @param tmp is a temporary variable and should be of type uint16_t. It
+ * represents an intermediate value during conversion that is to be
+ * output by PUT_16BIT.
+ * @param PUT_16BIT writes the converted UTF-16 data to any proper destination
+ * in desired endianness. It could be a function or a statement, and uses tmp
+ * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;"
+ * PUT_BYTE will be executed 1 or 2 times depending on input character.
+ */
+#define PUT_UTF16(val, tmp, PUT_16BIT)\
+ {\
+ uint32_t in = val;\
+ if (in < 0x10000) {\
+ tmp = in;\
+ PUT_16BIT\
+ } else {\
+ tmp = 0xD800 | ((in - 0x10000) >> 10);\
+ PUT_16BIT\
+ tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
+ PUT_16BIT\
+ }\
+ }\
+
+
+
+#include "mem.h"
+
+#ifdef HAVE_AV_CONFIG_H
+# include "internal.h"
+#endif /* HAVE_AV_CONFIG_H */
+
+#endif /* AVUTIL_COMMON_H */
+
+/*
+ * The following definitions are outside the multiple inclusion guard
+ * to ensure they are immediately available in intmath.h.
+ */
+
+#ifndef av_log2
+# define av_log2 av_log2_c
+#endif
+#ifndef av_log2_16bit
+# define av_log2_16bit av_log2_16bit_c
+#endif
+#ifndef av_ceil_log2
+# define av_ceil_log2 av_ceil_log2_c
+#endif
+#ifndef av_clip
+# define av_clip av_clip_c
+#endif
+#ifndef av_clip_uint8
+# define av_clip_uint8 av_clip_uint8_c
+#endif
+#ifndef av_clip_int8
+# define av_clip_int8 av_clip_int8_c
+#endif
+#ifndef av_clip_uint16
+# define av_clip_uint16 av_clip_uint16_c
+#endif
+#ifndef av_clip_int16
+# define av_clip_int16 av_clip_int16_c
+#endif
+#ifndef av_clipl_int32
+# define av_clipl_int32 av_clipl_int32_c
+#endif
+#ifndef av_clip_uintp2
+# define av_clip_uintp2 av_clip_uintp2_c
+#endif
+#ifndef av_clipf
+# define av_clipf av_clipf_c
+#endif
+#ifndef av_popcount
+# define av_popcount av_popcount_c
+#endif
+#ifndef av_popcount64
+# define av_popcount64 av_popcount64_c
+#endif
diff --git a/extern/ffmpeg/include/libavutil/cpu.h b/extern/ffmpeg/include/libavutil/cpu.h
new file mode 100644
index 0000000000..5f7eed2b60
--- /dev/null
+++ b/extern/ffmpeg/include/libavutil/cpu.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVUTIL_CPU_H
+#define AVUTIL_CPU_H
+
+#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
+
+ /* lower 16 bits - CPU features */
+#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX
+#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
+#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW
+#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions
+#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions
+#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster
+#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt
+#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions
+#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster
+#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions
+#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower
+#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
+#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
+#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
+#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions
+#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions
+#define AV_CPU_FLAG_IWMMXT 0x0100 ///< XScale IWMMXT
+#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
+
+/**
+ * Return the flags which specify extensions supported by the CPU.
+ */
+int av_get_cpu_flags(void);
+
+
+/**
+ * Disables cpu detection and forces the specified flags.
+ */
+void av_force_cpu_flags(int flags);
+
+
+/* The following CPU-specific functions shall not be called directly. */
+int ff_get_cpu_flags_arm(void);
+int ff_get_cpu_flags_ppc(void);
+int ff_get_cpu_flags_x86(void);
+
+#endif /* AVUTIL_CPU_H */
diff --git a/src/ffmpeg/modern_working/include/libavutil/crc.h b/extern/ffmpeg/include/libavutil/crc.h
similarity index 98%
rename from src/ffmpeg/modern_working/include/libavutil/crc.h
rename to extern/ffmpeg/include/libavutil/crc.h
index fa34059278..6c0baab5ac 100644
--- a/src/ffmpeg/modern_working/include/libavutil/crc.h
+++ b/extern/ffmpeg/include/libavutil/crc.h
@@ -23,7 +23,7 @@
#include
- * Note, if the first 23 bits of the additional bytes are not 0 then damaged
- * MPEG bitstreams could cause overread and segfault
- */
-#define FF_INPUT_BUFFER_PADDING_SIZE 8
-
-/**
- * minimum encoding buffer size.
- * used to avoid some checks during header writing
- */
-#define FF_MIN_BUFFER_SIZE 16384
-
-/* motion estimation type, EPZS by default */
-enum Motion_Est_ID {
- ME_ZERO = 1,
- ME_FULL,
- ME_LOG,
- ME_PHODS,
- ME_EPZS,
- ME_X1,
- ME_HEX,
- ME_UMH,
- ME_ITER,
-};
-
-enum AVDiscard{
-//we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames)
- AVDISCARD_NONE =-16, ///< discard nothing
- AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi
- AVDISCARD_NONREF = 8, ///< discard all non reference
- AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
- AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
- AVDISCARD_ALL = 48, ///< discard all
-};
-
-typedef struct RcOverride{
- int start_frame;
- int end_frame;
- int qscale; // if this is 0 then quality_factor will be used instead
- float quality_factor;
-} RcOverride;
-
-#define FF_MAX_B_FRAMES 16
-
-/* encoding support
- these flags can be passed in AVCodecContext.flags before initing
- Note: not everything is supported yet.
-*/
-
-#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale
-#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / Advanced prediction for H263
-#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC
-#define CODEC_FLAG_GMC 0x0020 ///< use GMC
-#define CODEC_FLAG_MV0 0x0040 ///< always try a MB with MV=<0,0>
-#define CODEC_FLAG_PART 0x0080 ///< use data partitioning
-/* parent program guarantees that the input for b-frame containing streams is not written to
- for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
-#define CODEC_FLAG_INPUT_PRESERVED 0x0100
-#define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode
-#define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode
-#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
-#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale
-#define CODEC_FLAG_EMU_EDGE 0x4000///< don't draw edges
-#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding
-#define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead
- of only at frame boundaries */
-#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization
-#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
-#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay
-#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan
-#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization
-#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe
-#define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct)
-/* Fx : Flag for h263+ extra options */
-#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
-#define CODEC_FLAG_H263P_AIC 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this)
-#endif
-#define CODEC_FLAG_AC_PRED 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction
-#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector
-#define CODEC_FLAG_CBP_RD 0x04000000 ///< use rate distortion optimization for cbp
-#define CODEC_FLAG_QP_RD 0x08000000 ///< use rate distortion optimization for qp selectioon
-#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H263 Alternative inter vlc
-#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
-#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
-#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
-#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
-#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data
-#define CODEC_FLAG_CLOSED_GOP ((int)0x80000000)
-#define CODEC_FLAG2_FAST 0x00000001 ///< allow non spec compliant speedup tricks
-#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< strictly enforce GOP size
-#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< skip bitstream encoding
-#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< place global headers at every keyframe instead of in extradata
-#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow b-frames to be used as references
-#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for b-frames
-#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
-#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform
-#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip
-#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters
-#define CODEC_FLAG2_BRDO 0x00000400 ///< b-frame rate-distortion optimization
-#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< use MPEG-2 intra VLC table
-#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< only do ME/MC (I frames -> ref, P frame -> ME+MC)
-#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format
-#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skiping
-#define CODEC_FLAG2_CHUNKS 0x00008000 ///< input bitstream might be truncated at a packet boundaries instead of only at frame boundaries
-#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< use MPEG-2 non linear quantizer
-
-/* Unsupported options :
- * Syntax Arithmetic coding (SAC)
- * Reference Picture Selection
- * Independent Segment Decoding */
-/* /Fx */
-/* codec capabilities */
-
-#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
-/**
- * Codec uses get_buffer() for allocating buffers.
- * direct rendering method 1
- */
-#define CODEC_CAP_DR1 0x0002
-/* if 'parse_only' field is true, then avcodec_parse_frame() can be
- used */
-#define CODEC_CAP_PARSE_ONLY 0x0004
-#define CODEC_CAP_TRUNCATED 0x0008
-/* codec can export data for HW decoding (XvMC) */
-#define CODEC_CAP_HWACCEL 0x0010
-/**
- * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data.
- * if this is not set, the codec is guaranteed to never be feeded with NULL data
- */
-#define CODEC_CAP_DELAY 0x0020
-/**
- * Codec can be fed a final frame with a smaller size.
- * This can be used to prevent truncation of the last audio samples.
- */
-#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
-
-//the following defines may change, don't expect compatibility if you use them
-#define MB_TYPE_INTRA4x4 0x0001
-#define MB_TYPE_INTRA16x16 0x0002 //FIXME h264 specific
-#define MB_TYPE_INTRA_PCM 0x0004 //FIXME h264 specific
-#define MB_TYPE_16x16 0x0008
-#define MB_TYPE_16x8 0x0010
-#define MB_TYPE_8x16 0x0020
-#define MB_TYPE_8x8 0x0040
-#define MB_TYPE_INTERLACED 0x0080
-#define MB_TYPE_DIRECT2 0x0100 //FIXME
-#define MB_TYPE_ACPRED 0x0200
-#define MB_TYPE_GMC 0x0400
-#define MB_TYPE_SKIP 0x0800
-#define MB_TYPE_P0L0 0x1000
-#define MB_TYPE_P1L0 0x2000
-#define MB_TYPE_P0L1 0x4000
-#define MB_TYPE_P1L1 0x8000
-#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
-#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
-#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
-#define MB_TYPE_QUANT 0x00010000
-#define MB_TYPE_CBP 0x00020000
-//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
-
-/**
- * Pan Scan area.
- * this specifies the area which should be displayed. Note there may be multiple such areas for one frame
- */
-typedef struct AVPanScan{
- /**
- * id.
- * - encoding: set by user.
- * - decoding: set by lavc
- */
- int id;
-
- /**
- * width and height in 1/16 pel
- * - encoding: set by user.
- * - decoding: set by lavc
- */
- int width;
- int height;
-
- /**
- * position of the top left corner in 1/16 pel for up to 3 fields/frames.
- * - encoding: set by user.
- * - decoding: set by lavc
- */
- int16_t position[3][2];
-}AVPanScan;
-
-#define FF_COMMON_FRAME \
- /**\
- * pointer to the picture planes.\
- * this might be different from the first allocated byte\
- * - encoding: \
- * - decoding: \
- */\
- uint8_t *data[4];\
- int linesize[4];\
- /**\
- * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
- * this isn't used by lavc unless the default get/release_buffer() is used\
- * - encoding: \
- * - decoding: \
- */\
- uint8_t *base[4];\
- /**\
- * 1 -> keyframe, 0-> not\
- * - encoding: set by lavc\
- * - decoding: set by lavc\
- */\
- int key_frame;\
-\
- /**\
- * picture type of the frame, see ?_TYPE below.\
- * - encoding: set by lavc for coded_picture (and set by user for input)\
- * - decoding: set by lavc\
- */\
- int pict_type;\
-\
- /**\
- * presentation timestamp in time_base units (time when frame should be shown to user)\
- * if AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed\
- * - encoding: MUST be set by user\
- * - decoding: set by lavc\
- */\
- int64_t pts;\
-\
- /**\
- * picture number in bitstream order.\
- * - encoding: set by\
- * - decoding: set by lavc\
- */\
- int coded_picture_number;\
- /**\
- * picture number in display order.\
- * - encoding: set by\
- * - decoding: set by lavc\
- */\
- int display_picture_number;\
-\
- /**\
- * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
- * - encoding: set by lavc for coded_picture (and set by user for input)\
- * - decoding: set by lavc\
- */\
- int quality; \
-\
- /**\
- * buffer age (1->was last buffer and dint change, 2->..., ...).\
- * set to INT_MAX if the buffer has not been used yet \
- * - encoding: unused\
- * - decoding: MUST be set by get_buffer()\
- */\
- int age;\
-\
- /**\
- * is this picture used as reference\
- * - encoding: unused\
- * - decoding: set by lavc (before get_buffer() call))\
- */\
- int reference;\
-\
- /**\
- * QP table\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- int8_t *qscale_table;\
- /**\
- * QP store stride\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- int qstride;\
-\
- /**\
- * mbskip_table[mb]>=1 if MB didnt change\
- * stride= mb_width = (width+15)>>4\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- uint8_t *mbskip_table;\
-\
- /**\
- * Motion vector table.\
- * @code\
- * example:\
- * int mv_sample_log2= 4 - motion_subsample_log2;\
- * int mb_width= (width+15)>>4;\
- * int mv_stride= (mb_width << mv_sample_log2) + 1;\
- * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
- * @endcode\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- int16_t (*motion_val[2])[2];\
-\
- /**\
- * Macroblock type table\
- * mb_type_base + mb_width + 2\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- uint32_t *mb_type;\
-\
- /**\
- * log2 of the size of the block which a single vector in motion_val represents: \
- * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- uint8_t motion_subsample_log2;\
-\
- /**\
- * for some private data of the user\
- * - encoding: unused\
- * - decoding: set by user\
- */\
- void *opaque;\
-\
- /**\
- * error\
- * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
- * - decoding: unused\
- */\
- uint64_t error[4];\
-\
- /**\
- * type of the buffer (to keep track of who has to dealloc data[*])\
- * - encoding: set by the one who allocs it\
- * - decoding: set by the one who allocs it\
- * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
- */\
- int type;\
- \
- /**\
- * when decoding, this signal how much the picture must be delayed.\
- * extra_delay = repeat_pict / (2*fps)\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- int repeat_pict;\
- \
- /**\
- * \
- */\
- int qscale_type;\
- \
- /**\
- * The content of the picture is interlaced.\
- * - encoding: set by user\
- * - decoding: set by lavc (default 0)\
- */\
- int interlaced_frame;\
- \
- /**\
- * if the content is interlaced, is top field displayed first.\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- int top_field_first;\
- \
- /**\
- * Pan scan.\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- AVPanScan *pan_scan;\
- \
- /**\
- * tell user application that palette has changed from previous frame.\
- * - encoding: ??? (no palette-enabled encoder yet)\
- * - decoding: set by lavc (default 0)\
- */\
- int palette_has_changed;\
- \
- /**\
- * Codec suggestion on buffer type if != 0\
- * - encoding: unused\
- * - decoding: set by lavc (before get_buffer() call))\
- */\
- int buffer_hints;\
-\
- /**\
- * DCT coeffitients\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- short *dct_coeff;\
-\
- /**\
- * Motion referece frame index\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- int8_t *ref_index[2];
-
-#define FF_QSCALE_TYPE_MPEG1 0
-#define FF_QSCALE_TYPE_MPEG2 1
-#define FF_QSCALE_TYPE_H264 2
-
-#define FF_BUFFER_TYPE_INTERNAL 1
-#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers (image is (de)allocated by user)
-#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared
-#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, don't dealloc anything
-
-
-#define FF_I_TYPE 1 // Intra
-#define FF_P_TYPE 2 // Predicted
-#define FF_B_TYPE 3 // Bi-dir predicted
-#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
-#define FF_SI_TYPE 5
-#define FF_SP_TYPE 6
-
-#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore)
-#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer
-#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content
-#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update)
-
-/**
- * Audio Video Frame.
- */
-typedef struct AVFrame {
- FF_COMMON_FRAME
-} AVFrame;
-
-#define DEFAULT_FRAME_RATE_BASE 1001000
-
-/**
- * main external api structure.
- */
-typedef struct AVCodecContext {
- /**
- * Info on struct for av_log
- * - set by avcodec_alloc_context
- */
- AVClass *av_class;
- /**
- * the average bitrate.
- * - encoding: set by user. unused for constant quantizer encoding
- * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
- */
- int bit_rate;
-
- /**
- * number of bits the bitstream is allowed to diverge from the reference.
- * the reference can be CBR (for CBR pass1) or VBR (for pass2)
- * - encoding: set by user. unused for constant quantizer encoding
- * - decoding: unused
- */
- int bit_rate_tolerance;
-
- /**
- * CODEC_FLAG_*.
- * - encoding: set by user.
- * - decoding: set by user.
- */
- int flags;
-
- /**
- * some codecs needs additionnal format info. It is stored here
- * - encoding: set by user.
- * - decoding: set by lavc. (FIXME is this ok?)
- */
- int sub_id;
-
- /**
- * motion estimation algorithm used for video coding.
- * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
- * 8 (umh), 9 (iter) [7, 8 are x264 specific, 9 is snow specific]
- * - encoding: MUST be set by user.
- * - decoding: unused
- */
- int me_method;
-
- /**
- * some codecs need / can use extra-data like huffman tables.
- * mjpeg: huffman tables
- * rv10: additional flags
- * mpeg4: global headers (they can be in the bitstream or here)
- * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
- * then extradata_size to avoid prolems if its read with the bitstream reader
- * the bytewise contents of extradata must not depend on the architecture or cpu endianness
- * - encoding: set/allocated/freed by lavc.
- * - decoding: set/allocated/freed by user.
- */
- uint8_t *extradata;
- int extradata_size;
-
- /**
- * this is the fundamental unit of time (in seconds) in terms
- * of which frame timestamps are represented. for fixed-fps content,
- * timebase should be 1/framerate and timestamp increments should be
- * identically 1.
- * - encoding: MUST be set by user
- * - decoding: set by lavc.
- */
- AVRational time_base;
-
- /* video only */
- /**
- * picture width / height.
- * - encoding: MUST be set by user.
- * - decoding: set by lavc.
- * Note, for compatibility its possible to set this instead of
- * coded_width/height before decoding
- */
- int width, height;
-
-#define FF_ASPECT_EXTENDED 15
-
- /**
- * the number of pictures in a group of pitures, or 0 for intra_only.
- * - encoding: set by user.
- * - decoding: unused
- */
- int gop_size;
-
- /**
- * pixel format, see PIX_FMT_xxx.
- * - encoding: set by user.
- * - decoding: set by lavc.
- */
- enum PixelFormat pix_fmt;
-
- /**
- * Frame rate emulation. If not zero lower layer (i.e. format handler)
- * has to read frames at native frame rate.
- * - encoding: set by user.
- * - decoding: unused.
- */
- int rate_emu;
-
- /**
- * if non NULL, 'draw_horiz_band' is called by the libavcodec
- * decoder to draw an horizontal band. It improve cache usage. Not
- * all codecs can do that. You must check the codec capabilities
- * before
- * - encoding: unused
- * - decoding: set by user.
- * @param height the height of the slice
- * @param y the y position of the slice
- * @param type 1->top field, 2->bottom field, 3->frame
- * @param offset offset into the AVFrame.data from which the slice should be read
- */
- void (*draw_horiz_band)(struct AVCodecContext *s,
- const AVFrame *src, int offset[4],
- int y, int type, int height);
-
- /* audio only */
- int sample_rate; ///< samples per sec
- int channels;
-
- /**
- * audio sample format.
- * - encoding: set by user.
- * - decoding: set by lavc.
- */
- enum SampleFormat sample_fmt; ///< sample format, currenly unused
-
- /* the following data should not be initialized */
- /**
- * samples per packet. initialized when calling 'init'
- */
- int frame_size;
- int frame_number; ///< audio or video frame number
- int real_pict_num; ///< returns the real picture number of previous encoded frame
-
- /**
- * number of frames the decoded output will be delayed relative to
- * the encoded input.
- * - encoding: set by lavc.
- * - decoding: unused
- */
- int delay;
-
- /* - encoding parameters */
- float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
- float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
-
- /**
- * minimum quantizer.
- * - encoding: set by user.
- * - decoding: unused
- */
- int qmin;
-
- /**
- * maximum quantizer.
- * - encoding: set by user.
- * - decoding: unused
- */
- int qmax;
-
- /**
- * maximum quantizer difference between frames.
- * - encoding: set by user.
- * - decoding: unused
- */
- int max_qdiff;
-
- /**
- * maximum number of b frames between non b frames.
- * note: the output will be delayed by max_b_frames+1 relative to the input
- * - encoding: set by user.
- * - decoding: unused
- */
- int max_b_frames;
-
- /**
- * qscale factor between ip and b frames.
- * - encoding: set by user.
- * - decoding: unused
- */
- float b_quant_factor;
-
- /** obsolete FIXME remove */
- int rc_strategy;
-#define FF_RC_STRATEGY_XVID 1
-
- int b_frame_strategy;
-
- /**
- * hurry up amount.
- * - encoding: unused
- * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
- * @deprecated Deprecated in favor of skip_idct and skip_frame.
- */
- int hurry_up;
-
- struct AVCodec *codec;
-
- void *priv_data;
-
-#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
- /* unused, FIXME remove*/
- int rtp_mode;
-#endif
-
- int rtp_payload_size; /* The size of the RTP payload: the coder will */
- /* do it's best to deliver a chunk with size */
- /* below rtp_payload_size, the chunk will start */
- /* with a start code on some codecs like H.263 */
- /* This doesn't take account of any particular */
- /* headers inside the transmited RTP payload */
-
-
- /* The RTP callback: This function is called */
- /* every time the encoder has a packet to send */
- /* Depends on the encoder if the data starts */
- /* with a Start Code (it should) H.263 does. */
- /* mb_nb contains the number of macroblocks */
- /* encoded in the RTP payload */
- void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
-
- /* statistics, used for 2-pass encoding */
- int mv_bits;
- int header_bits;
- int i_tex_bits;
- int p_tex_bits;
- int i_count;
- int p_count;
- int skip_count;
- int misc_bits;
-
- /**
- * number of bits used for the previously encoded frame.
- * - encoding: set by lavc
- * - decoding: unused
- */
- int frame_bits;
-
- /**
- * private data of the user, can be used to carry app specific stuff.
- * - encoding: set by user
- * - decoding: set by user
- */
- void *opaque;
-
- char codec_name[32];
- enum CodecType codec_type; /* see CODEC_TYPE_xxx */
- enum CodecID codec_id; /* see CODEC_ID_xxx */
-
- /**
- * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * this is used to workaround some encoder bugs
- * - encoding: set by user, if not then the default based on codec_id will be used
- * - decoding: set by user, will be converted to upper case by lavc during init
- */
- unsigned int codec_tag;
-
- /**
- * workaround bugs in encoders which sometimes cannot be detected automatically.
- * - encoding: set by user
- * - decoding: set by user
- */
- int workaround_bugs;
-#define FF_BUG_AUTODETECT 1 ///< autodetection
-#define FF_BUG_OLD_MSMPEG4 2
-#define FF_BUG_XVID_ILACE 4
-#define FF_BUG_UMP4 8
-#define FF_BUG_NO_PADDING 16
-#define FF_BUG_AMV 32
-#define FF_BUG_AC_VLC 0 ///< will be removed, libavcodec can now handle these non compliant files by default
-#define FF_BUG_QPEL_CHROMA 64
-#define FF_BUG_STD_QPEL 128
-#define FF_BUG_QPEL_CHROMA2 256
-#define FF_BUG_DIRECT_BLOCKSIZE 512
-#define FF_BUG_EDGE 1024
-#define FF_BUG_HPEL_CHROMA 2048
-#define FF_BUG_DC_CLIP 4096
-#define FF_BUG_MS 8192 ///< workaround various bugs in microsofts broken decoders
-//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
-
- /**
- * luma single coeff elimination threshold.
- * - encoding: set by user
- * - decoding: unused
- */
- int luma_elim_threshold;
-
- /**
- * chroma single coeff elimination threshold.
- * - encoding: set by user
- * - decoding: unused
- */
- int chroma_elim_threshold;
-
- /**
- * strictly follow the std (MPEG4, ...).
- * - encoding: set by user
- * - decoding: unused
- */
- int strict_std_compliance;
-#define FF_COMPLIANCE_VERY_STRICT 2 ///< strictly conform to a older more strict version of the spec or reference software
-#define FF_COMPLIANCE_STRICT 1 ///< strictly conform to all the things in the spec no matter what consequences
-#define FF_COMPLIANCE_NORMAL 0
-#define FF_COMPLIANCE_INOFFICIAL -1 ///< allow inofficial extensions
-#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< allow non standarized experimental things
-
- /**
- * qscale offset between ip and b frames.
- * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
- * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
- * - encoding: set by user.
- * - decoding: unused
- */
- float b_quant_offset;
-
- /**
- * error resilience higher values will detect more errors but may missdetect
- * some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: set by user
- */
- int error_resilience;
-#define FF_ER_CAREFUL 1
-#define FF_ER_COMPLIANT 2
-#define FF_ER_AGGRESSIVE 3
-#define FF_ER_VERY_AGGRESSIVE 4
-
- /**
- * called at the beginning of each frame to get a buffer for it.
- * if pic.reference is set then the frame will be read later by lavc
- * avcodec_align_dimensions() should be used to find the required width and
- * height, as they normally need to be rounded up to the next multiple of 16
- * - encoding: unused
- * - decoding: set by lavc, user can override
- */
- int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * called to release buffers which where allocated with get_buffer.
- * a released buffer can be reused in get_buffer()
- * pic.data[*] must be set to NULL
- * - encoding: unused
- * - decoding: set by lavc, user can override
- */
- void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * if 1 the stream has a 1 frame delay during decoding.
- * - encoding: set by lavc
- * - decoding: set by lavc
- */
- int has_b_frames;
-
- /**
- * number of bytes per packet if constant and known or 0
- * used by some WAV based audio codecs
- */
- int block_align;
-
- int parse_only; /* - decoding only: if true, only parsing is done
- (function avcodec_parse_frame()). The frame
- data is returned. Only MPEG codecs support this now. */
-
- /**
- * 0-> h263 quant 1-> mpeg quant.
- * - encoding: set by user.
- * - decoding: unused
- */
- int mpeg_quant;
-
- /**
- * pass1 encoding statistics output buffer.
- * - encoding: set by lavc
- * - decoding: unused
- */
- char *stats_out;
-
- /**
- * pass2 encoding statistics input buffer.
- * concatenated stuff from stats_out of pass1 should be placed here
- * - encoding: allocated/set/freed by user
- * - decoding: unused
- */
- char *stats_in;
-
- /**
- * ratecontrol qmin qmax limiting method.
- * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
- * - encoding: set by user.
- * - decoding: unused
- */
- float rc_qsquish;
-
- float rc_qmod_amp;
- int rc_qmod_freq;
-
- /**
- * ratecontrol override, see RcOverride.
- * - encoding: allocated/set/freed by user.
- * - decoding: unused
- */
- RcOverride *rc_override;
- int rc_override_count;
-
- /**
- * rate control equation.
- * - encoding: set by user
- * - decoding: unused
- */
- char *rc_eq;
-
- /**
- * maximum bitrate.
- * - encoding: set by user.
- * - decoding: unused
- */
- int rc_max_rate;
-
- /**
- * minimum bitrate.
- * - encoding: set by user.
- * - decoding: unused
- */
- int rc_min_rate;
-
- /**
- * decoder bitstream buffer size.
- * - encoding: set by user.
- * - decoding: unused
- */
- int rc_buffer_size;
- float rc_buffer_aggressivity;
-
- /**
- * qscale factor between p and i frames.
- * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
- * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
- * - encoding: set by user.
- * - decoding: unused
- */
- float i_quant_factor;
-
- /**
- * qscale offset between p and i frames.
- * - encoding: set by user.
- * - decoding: unused
- */
- float i_quant_offset;
-
- /**
- * initial complexity for pass1 ratecontrol.
- * - encoding: set by user.
- * - decoding: unused
- */
- float rc_initial_cplx;
-
- /**
- * dct algorithm, see FF_DCT_* below.
- * - encoding: set by user
- * - decoding: unused
- */
- int dct_algo;
-#define FF_DCT_AUTO 0
-#define FF_DCT_FASTINT 1
-#define FF_DCT_INT 2
-#define FF_DCT_MMX 3
-#define FF_DCT_MLIB 4
-#define FF_DCT_ALTIVEC 5
-#define FF_DCT_FAAN 6
-
- /**
- * luminance masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float lumi_masking;
-
- /**
- * temporary complexity masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float temporal_cplx_masking;
-
- /**
- * spatial complexity masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float spatial_cplx_masking;
-
- /**
- * p block masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float p_masking;
-
- /**
- * darkness masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float dark_masking;
-
-
- /* for binary compatibility */
- int unused;
-
- /**
- * idct algorithm, see FF_IDCT_* below.
- * - encoding: set by user
- * - decoding: set by user
- */
- int idct_algo;
-#define FF_IDCT_AUTO 0
-#define FF_IDCT_INT 1
-#define FF_IDCT_SIMPLE 2
-#define FF_IDCT_SIMPLEMMX 3
-#define FF_IDCT_LIBMPEG2MMX 4
-#define FF_IDCT_PS2 5
-#define FF_IDCT_MLIB 6
-#define FF_IDCT_ARM 7
-#define FF_IDCT_ALTIVEC 8
-#define FF_IDCT_SH4 9
-#define FF_IDCT_SIMPLEARM 10
-#define FF_IDCT_H264 11
-#define FF_IDCT_VP3 12
-#define FF_IDCT_IPP 13
-#define FF_IDCT_XVIDMMX 14
-#define FF_IDCT_CAVS 15
-#define FF_IDCT_SIMPLEARMV5TE 16
-#define FF_IDCT_SIMPLEARMV6 17
-
- /**
- * slice count.
- * - encoding: set by lavc
- * - decoding: set by user (or 0)
- */
- int slice_count;
- /**
- * slice offsets in the frame in bytes.
- * - encoding: set/allocated by lavc
- * - decoding: set/allocated by user (or NULL)
- */
- int *slice_offset;
-
- /**
- * error concealment flags.
- * - encoding: unused
- * - decoding: set by user
- */
- int error_concealment;
-#define FF_EC_GUESS_MVS 1
-#define FF_EC_DEBLOCK 2
-
- /**
- * dsp_mask could be add used to disable unwanted CPU features
- * CPU features (i.e. MMX, SSE. ...)
- *
- * with FORCE flag you may instead enable given CPU features
- * (Dangerous: usable in case of misdetection, improper usage however will
- * result into program crash)
- */
- unsigned dsp_mask;
-#define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */
- /* lower 16 bits - CPU features */
-#ifdef HAVE_MMX
-#define FF_MM_MMX 0x0001 /* standard MMX */
-#define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */
-#define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
-#define FF_MM_SSE 0x0008 /* SSE functions */
-#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
-#define FF_MM_3DNOWEXT 0x0020 /* AMD 3DNowExt */
-#endif /* HAVE_MMX */
-#ifdef HAVE_IWMMXT
-#define FF_MM_IWMMXT 0x0100 /* XScale IWMMXT */
-#endif /* HAVE_IWMMXT */
-
- /**
- * bits per sample/pixel from the demuxer (needed for huffyuv).
- * - encoding: set by lavc
- * - decoding: set by user
- */
- int bits_per_sample;
-
- /**
- * prediction method (needed for huffyuv).
- * - encoding: set by user
- * - decoding: unused
- */
- int prediction_method;
-#define FF_PRED_LEFT 0
-#define FF_PRED_PLANE 1
-#define FF_PRED_MEDIAN 2
-
- /**
- * sample aspect ratio (0 if unknown).
- * numerator and denominator must be relative prime and smaller then 256 for some video standards
- * - encoding: set by user.
- * - decoding: set by lavc.
- */
- AVRational sample_aspect_ratio;
-
- /**
- * the picture in the bitstream.
- * - encoding: set by lavc
- * - decoding: set by lavc
- */
- AVFrame *coded_frame;
-
- /**
- * debug.
- * - encoding: set by user.
- * - decoding: set by user.
- */
- int debug;
-#define FF_DEBUG_PICT_INFO 1
-#define FF_DEBUG_RC 2
-#define FF_DEBUG_BITSTREAM 4
-#define FF_DEBUG_MB_TYPE 8
-#define FF_DEBUG_QP 16
-#define FF_DEBUG_MV 32
-#define FF_DEBUG_DCT_COEFF 0x00000040
-#define FF_DEBUG_SKIP 0x00000080
-#define FF_DEBUG_STARTCODE 0x00000100
-#define FF_DEBUG_PTS 0x00000200
-#define FF_DEBUG_ER 0x00000400
-#define FF_DEBUG_MMCO 0x00000800
-#define FF_DEBUG_BUGS 0x00001000
-#define FF_DEBUG_VIS_QP 0x00002000
-#define FF_DEBUG_VIS_MB_TYPE 0x00004000
-
- /**
- * debug.
- * - encoding: set by user.
- * - decoding: set by user.
- */
- int debug_mv;
-#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
-#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
-#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
-
- /**
- * error.
- * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
- * - decoding: unused
- */
- uint64_t error[4];
-
- /**
- * minimum MB quantizer.
- * - encoding: unused
- * - decoding: unused
- */
- int mb_qmin;
-
- /**
- * maximum MB quantizer.
- * - encoding: unused
- * - decoding: unused
- */
- int mb_qmax;
-
- /**
- * motion estimation compare function.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_cmp;
- /**
- * subpixel motion estimation compare function.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_sub_cmp;
- /**
- * macroblock compare function (not supported yet).
- * - encoding: set by user.
- * - decoding: unused
- */
- int mb_cmp;
- /**
- * interlaced dct compare function
- * - encoding: set by user.
- * - decoding: unused
- */
- int ildct_cmp;
-#define FF_CMP_SAD 0
-#define FF_CMP_SSE 1
-#define FF_CMP_SATD 2
-#define FF_CMP_DCT 3
-#define FF_CMP_PSNR 4
-#define FF_CMP_BIT 5
-#define FF_CMP_RD 6
-#define FF_CMP_ZERO 7
-#define FF_CMP_VSAD 8
-#define FF_CMP_VSSE 9
-#define FF_CMP_NSSE 10
-#define FF_CMP_W53 11
-#define FF_CMP_W97 12
-#define FF_CMP_DCTMAX 13
-#define FF_CMP_DCT264 14
-#define FF_CMP_CHROMA 256
-
- /**
- * ME diamond size & shape.
- * - encoding: set by user.
- * - decoding: unused
- */
- int dia_size;
-
- /**
- * amount of previous MV predictors (2a+1 x 2a+1 square).
- * - encoding: set by user.
- * - decoding: unused
- */
- int last_predictor_count;
-
- /**
- * pre pass for motion estimation.
- * - encoding: set by user.
- * - decoding: unused
- */
- int pre_me;
-
- /**
- * motion estimation pre pass compare function.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_pre_cmp;
-
- /**
- * ME pre pass diamond size & shape.
- * - encoding: set by user.
- * - decoding: unused
- */
- int pre_dia_size;
-
- /**
- * subpel ME quality.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_subpel_quality;
-
- /**
- * callback to negotiate the pixelFormat.
- * @param fmt is the list of formats which are supported by the codec,
- * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
- * the first is allways the native one
- * @return the choosen format
- * - encoding: unused
- * - decoding: set by user, if not set then the native format will always be choosen
- */
- enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
-
- /**
- * DTG active format information (additionnal aspect ratio
- * information only used in DVB MPEG2 transport streams). 0 if
- * not set.
- *
- * - encoding: unused.
- * - decoding: set by decoder
- */
- int dtg_active_format;
-#define FF_DTG_AFD_SAME 8
-#define FF_DTG_AFD_4_3 9
-#define FF_DTG_AFD_16_9 10
-#define FF_DTG_AFD_14_9 11
-#define FF_DTG_AFD_4_3_SP_14_9 13
-#define FF_DTG_AFD_16_9_SP_14_9 14
-#define FF_DTG_AFD_SP_4_3 15
-
- /**
- * Maximum motion estimation search range in subpel units.
- * if 0 then no limit
- *
- * - encoding: set by user.
- * - decoding: unused.
- */
- int me_range;
-
- /**
- * intra quantizer bias.
- * - encoding: set by user.
- * - decoding: unused
- */
- int intra_quant_bias;
-#define FF_DEFAULT_QUANT_BIAS 999999
-
- /**
- * inter quantizer bias.
- * - encoding: set by user.
- * - decoding: unused
- */
- int inter_quant_bias;
-
- /**
- * color table ID.
- * - encoding: unused.
- * - decoding: which clrtable should be used for 8bit RGB images
- * table have to be stored somewhere FIXME
- */
- int color_table_id;
-
- /**
- * internal_buffer count.
- * Don't touch, used by lavc default_get_buffer()
- */
- int internal_buffer_count;
-
- /**
- * internal_buffers.
- * Don't touch, used by lavc default_get_buffer()
- */
- void *internal_buffer;
-
-#define FF_LAMBDA_SHIFT 7
-#define FF_LAMBDA_SCALE (1<
- * Note, if the first 23 bits of the additional bytes are not 0 then damaged
- * MPEG bitstreams could cause overread and segfault
- */
-#define FF_INPUT_BUFFER_PADDING_SIZE 8
-
-/**
- * minimum encoding buffer size.
- * used to avoid some checks during header writing
- */
-#define FF_MIN_BUFFER_SIZE 16384
-
-/* motion estimation type, EPZS by default */
-enum Motion_Est_ID {
- ME_ZERO = 1,
- ME_FULL,
- ME_LOG,
- ME_PHODS,
- ME_EPZS,
- ME_X1,
- ME_HEX,
- ME_UMH,
- ME_ITER,
-};
-
-enum AVDiscard{
-//we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames)
- AVDISCARD_NONE =-16, ///< discard nothing
- AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi
- AVDISCARD_NONREF = 8, ///< discard all non reference
- AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
- AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
- AVDISCARD_ALL = 48, ///< discard all
-};
-
-typedef struct RcOverride{
- int start_frame;
- int end_frame;
- int qscale; // if this is 0 then quality_factor will be used instead
- float quality_factor;
-} RcOverride;
-
-#define FF_MAX_B_FRAMES 16
-
-/* encoding support
- these flags can be passed in AVCodecContext.flags before initing
- Note: not everything is supported yet.
-*/
-
-#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale
-#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / Advanced prediction for H263
-#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC
-#define CODEC_FLAG_GMC 0x0020 ///< use GMC
-#define CODEC_FLAG_MV0 0x0040 ///< always try a MB with MV=<0,0>
-#define CODEC_FLAG_PART 0x0080 ///< use data partitioning
-/* parent program guarantees that the input for b-frame containing streams is not written to
- for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
-#define CODEC_FLAG_INPUT_PRESERVED 0x0100
-#define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode
-#define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode
-#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
-#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale
-#define CODEC_FLAG_EMU_EDGE 0x4000///< don't draw edges
-#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding
-#define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead
- of only at frame boundaries */
-#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization
-#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
-#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay
-#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan
-#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization
-#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe
-#define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct)
-/* Fx : Flag for h263+ extra options */
-#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
-#define CODEC_FLAG_H263P_AIC 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this)
-#endif
-#define CODEC_FLAG_AC_PRED 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction
-#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector
-#define CODEC_FLAG_CBP_RD 0x04000000 ///< use rate distortion optimization for cbp
-#define CODEC_FLAG_QP_RD 0x08000000 ///< use rate distortion optimization for qp selectioon
-#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H263 Alternative inter vlc
-#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
-#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
-#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
-#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
-#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data
-#define CODEC_FLAG_CLOSED_GOP ((int)0x80000000)
-#define CODEC_FLAG2_FAST 0x00000001 ///< allow non spec compliant speedup tricks
-#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< strictly enforce GOP size
-#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< skip bitstream encoding
-#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< place global headers at every keyframe instead of in extradata
-#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow b-frames to be used as references
-#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for b-frames
-#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
-#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform
-#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip
-#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters
-#define CODEC_FLAG2_BRDO 0x00000400 ///< b-frame rate-distortion optimization
-#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< use MPEG-2 intra VLC table
-#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< only do ME/MC (I frames -> ref, P frame -> ME+MC)
-#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format
-#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skiping
-#define CODEC_FLAG2_CHUNKS 0x00008000 ///< input bitstream might be truncated at a packet boundaries instead of only at frame boundaries
-#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< use MPEG-2 non linear quantizer
-
-/* Unsupported options :
- * Syntax Arithmetic coding (SAC)
- * Reference Picture Selection
- * Independent Segment Decoding */
-/* /Fx */
-/* codec capabilities */
-
-#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
-/**
- * Codec uses get_buffer() for allocating buffers.
- * direct rendering method 1
- */
-#define CODEC_CAP_DR1 0x0002
-/* if 'parse_only' field is true, then avcodec_parse_frame() can be
- used */
-#define CODEC_CAP_PARSE_ONLY 0x0004
-#define CODEC_CAP_TRUNCATED 0x0008
-/* codec can export data for HW decoding (XvMC) */
-#define CODEC_CAP_HWACCEL 0x0010
-/**
- * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data.
- * if this is not set, the codec is guaranteed to never be feeded with NULL data
- */
-#define CODEC_CAP_DELAY 0x0020
-/**
- * Codec can be fed a final frame with a smaller size.
- * This can be used to prevent truncation of the last audio samples.
- */
-#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
-
-//the following defines may change, don't expect compatibility if you use them
-#define MB_TYPE_INTRA4x4 0x0001
-#define MB_TYPE_INTRA16x16 0x0002 //FIXME h264 specific
-#define MB_TYPE_INTRA_PCM 0x0004 //FIXME h264 specific
-#define MB_TYPE_16x16 0x0008
-#define MB_TYPE_16x8 0x0010
-#define MB_TYPE_8x16 0x0020
-#define MB_TYPE_8x8 0x0040
-#define MB_TYPE_INTERLACED 0x0080
-#define MB_TYPE_DIRECT2 0x0100 //FIXME
-#define MB_TYPE_ACPRED 0x0200
-#define MB_TYPE_GMC 0x0400
-#define MB_TYPE_SKIP 0x0800
-#define MB_TYPE_P0L0 0x1000
-#define MB_TYPE_P1L0 0x2000
-#define MB_TYPE_P0L1 0x4000
-#define MB_TYPE_P1L1 0x8000
-#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
-#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
-#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
-#define MB_TYPE_QUANT 0x00010000
-#define MB_TYPE_CBP 0x00020000
-//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
-
-/**
- * Pan Scan area.
- * this specifies the area which should be displayed. Note there may be multiple such areas for one frame
- */
-typedef struct AVPanScan{
- /**
- * id.
- * - encoding: set by user.
- * - decoding: set by lavc
- */
- int id;
-
- /**
- * width and height in 1/16 pel
- * - encoding: set by user.
- * - decoding: set by lavc
- */
- int width;
- int height;
-
- /**
- * position of the top left corner in 1/16 pel for up to 3 fields/frames.
- * - encoding: set by user.
- * - decoding: set by lavc
- */
- int16_t position[3][2];
-}AVPanScan;
-
-#define FF_COMMON_FRAME \
- /**\
- * pointer to the picture planes.\
- * this might be different from the first allocated byte\
- * - encoding: \
- * - decoding: \
- */\
- uint8_t *data[4];\
- int linesize[4];\
- /**\
- * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
- * this isn't used by lavc unless the default get/release_buffer() is used\
- * - encoding: \
- * - decoding: \
- */\
- uint8_t *base[4];\
- /**\
- * 1 -> keyframe, 0-> not\
- * - encoding: set by lavc\
- * - decoding: set by lavc\
- */\
- int key_frame;\
-\
- /**\
- * picture type of the frame, see ?_TYPE below.\
- * - encoding: set by lavc for coded_picture (and set by user for input)\
- * - decoding: set by lavc\
- */\
- int pict_type;\
-\
- /**\
- * presentation timestamp in time_base units (time when frame should be shown to user)\
- * if AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed\
- * - encoding: MUST be set by user\
- * - decoding: set by lavc\
- */\
- int64_t pts;\
-\
- /**\
- * picture number in bitstream order.\
- * - encoding: set by\
- * - decoding: set by lavc\
- */\
- int coded_picture_number;\
- /**\
- * picture number in display order.\
- * - encoding: set by\
- * - decoding: set by lavc\
- */\
- int display_picture_number;\
-\
- /**\
- * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
- * - encoding: set by lavc for coded_picture (and set by user for input)\
- * - decoding: set by lavc\
- */\
- int quality; \
-\
- /**\
- * buffer age (1->was last buffer and dint change, 2->..., ...).\
- * set to INT_MAX if the buffer has not been used yet \
- * - encoding: unused\
- * - decoding: MUST be set by get_buffer()\
- */\
- int age;\
-\
- /**\
- * is this picture used as reference\
- * - encoding: unused\
- * - decoding: set by lavc (before get_buffer() call))\
- */\
- int reference;\
-\
- /**\
- * QP table\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- int8_t *qscale_table;\
- /**\
- * QP store stride\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- int qstride;\
-\
- /**\
- * mbskip_table[mb]>=1 if MB didnt change\
- * stride= mb_width = (width+15)>>4\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- uint8_t *mbskip_table;\
-\
- /**\
- * Motion vector table.\
- * @code\
- * example:\
- * int mv_sample_log2= 4 - motion_subsample_log2;\
- * int mb_width= (width+15)>>4;\
- * int mv_stride= (mb_width << mv_sample_log2) + 1;\
- * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
- * @endcode\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- int16_t (*motion_val[2])[2];\
-\
- /**\
- * Macroblock type table\
- * mb_type_base + mb_width + 2\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- uint32_t *mb_type;\
-\
- /**\
- * log2 of the size of the block which a single vector in motion_val represents: \
- * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- uint8_t motion_subsample_log2;\
-\
- /**\
- * for some private data of the user\
- * - encoding: unused\
- * - decoding: set by user\
- */\
- void *opaque;\
-\
- /**\
- * error\
- * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
- * - decoding: unused\
- */\
- uint64_t error[4];\
-\
- /**\
- * type of the buffer (to keep track of who has to dealloc data[*])\
- * - encoding: set by the one who allocs it\
- * - decoding: set by the one who allocs it\
- * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
- */\
- int type;\
- \
- /**\
- * when decoding, this signal how much the picture must be delayed.\
- * extra_delay = repeat_pict / (2*fps)\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- int repeat_pict;\
- \
- /**\
- * \
- */\
- int qscale_type;\
- \
- /**\
- * The content of the picture is interlaced.\
- * - encoding: set by user\
- * - decoding: set by lavc (default 0)\
- */\
- int interlaced_frame;\
- \
- /**\
- * if the content is interlaced, is top field displayed first.\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- int top_field_first;\
- \
- /**\
- * Pan scan.\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- AVPanScan *pan_scan;\
- \
- /**\
- * tell user application that palette has changed from previous frame.\
- * - encoding: ??? (no palette-enabled encoder yet)\
- * - decoding: set by lavc (default 0)\
- */\
- int palette_has_changed;\
- \
- /**\
- * Codec suggestion on buffer type if != 0\
- * - encoding: unused\
- * - decoding: set by lavc (before get_buffer() call))\
- */\
- int buffer_hints;\
-\
- /**\
- * DCT coeffitients\
- * - encoding: unused\
- * - decoding: set by lavc\
- */\
- short *dct_coeff;\
-\
- /**\
- * Motion referece frame index\
- * - encoding: set by user\
- * - decoding: set by lavc\
- */\
- int8_t *ref_index[2];
-
-#define FF_QSCALE_TYPE_MPEG1 0
-#define FF_QSCALE_TYPE_MPEG2 1
-#define FF_QSCALE_TYPE_H264 2
-
-#define FF_BUFFER_TYPE_INTERNAL 1
-#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers (image is (de)allocated by user)
-#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared
-#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, don't dealloc anything
-
-
-#define FF_I_TYPE 1 // Intra
-#define FF_P_TYPE 2 // Predicted
-#define FF_B_TYPE 3 // Bi-dir predicted
-#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
-#define FF_SI_TYPE 5
-#define FF_SP_TYPE 6
-
-#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore)
-#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer
-#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content
-#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update)
-
-/**
- * Audio Video Frame.
- */
-typedef struct AVFrame {
- FF_COMMON_FRAME
-} AVFrame;
-
-#define DEFAULT_FRAME_RATE_BASE 1001000
-
-/**
- * main external api structure.
- */
-typedef struct AVCodecContext {
- /**
- * Info on struct for av_log
- * - set by avcodec_alloc_context
- */
- AVClass *av_class;
- /**
- * the average bitrate.
- * - encoding: set by user. unused for constant quantizer encoding
- * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
- */
- int bit_rate;
-
- /**
- * number of bits the bitstream is allowed to diverge from the reference.
- * the reference can be CBR (for CBR pass1) or VBR (for pass2)
- * - encoding: set by user. unused for constant quantizer encoding
- * - decoding: unused
- */
- int bit_rate_tolerance;
-
- /**
- * CODEC_FLAG_*.
- * - encoding: set by user.
- * - decoding: set by user.
- */
- int flags;
-
- /**
- * some codecs needs additionnal format info. It is stored here
- * - encoding: set by user.
- * - decoding: set by lavc. (FIXME is this ok?)
- */
- int sub_id;
-
- /**
- * motion estimation algorithm used for video coding.
- * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
- * 8 (umh), 9 (iter) [7, 8 are x264 specific, 9 is snow specific]
- * - encoding: MUST be set by user.
- * - decoding: unused
- */
- int me_method;
-
- /**
- * some codecs need / can use extra-data like huffman tables.
- * mjpeg: huffman tables
- * rv10: additional flags
- * mpeg4: global headers (they can be in the bitstream or here)
- * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
- * then extradata_size to avoid prolems if its read with the bitstream reader
- * the bytewise contents of extradata must not depend on the architecture or cpu endianness
- * - encoding: set/allocated/freed by lavc.
- * - decoding: set/allocated/freed by user.
- */
- uint8_t *extradata;
- int extradata_size;
-
- /**
- * this is the fundamental unit of time (in seconds) in terms
- * of which frame timestamps are represented. for fixed-fps content,
- * timebase should be 1/framerate and timestamp increments should be
- * identically 1.
- * - encoding: MUST be set by user
- * - decoding: set by lavc.
- */
- AVRational time_base;
-
- /* video only */
- /**
- * picture width / height.
- * - encoding: MUST be set by user.
- * - decoding: set by lavc.
- * Note, for compatibility its possible to set this instead of
- * coded_width/height before decoding
- */
- int width, height;
-
-#define FF_ASPECT_EXTENDED 15
-
- /**
- * the number of pictures in a group of pitures, or 0 for intra_only.
- * - encoding: set by user.
- * - decoding: unused
- */
- int gop_size;
-
- /**
- * pixel format, see PIX_FMT_xxx.
- * - encoding: set by user.
- * - decoding: set by lavc.
- */
- enum PixelFormat pix_fmt;
-
- /**
- * Frame rate emulation. If not zero lower layer (i.e. format handler)
- * has to read frames at native frame rate.
- * - encoding: set by user.
- * - decoding: unused.
- */
- int rate_emu;
-
- /**
- * if non NULL, 'draw_horiz_band' is called by the libavcodec
- * decoder to draw an horizontal band. It improve cache usage. Not
- * all codecs can do that. You must check the codec capabilities
- * before
- * - encoding: unused
- * - decoding: set by user.
- * @param height the height of the slice
- * @param y the y position of the slice
- * @param type 1->top field, 2->bottom field, 3->frame
- * @param offset offset into the AVFrame.data from which the slice should be read
- */
- void (*draw_horiz_band)(struct AVCodecContext *s,
- const AVFrame *src, int offset[4],
- int y, int type, int height);
-
- /* audio only */
- int sample_rate; ///< samples per sec
- int channels;
-
- /**
- * audio sample format.
- * - encoding: set by user.
- * - decoding: set by lavc.
- */
- enum SampleFormat sample_fmt; ///< sample format, currenly unused
-
- /* the following data should not be initialized */
- /**
- * samples per packet. initialized when calling 'init'
- */
- int frame_size;
- int frame_number; ///< audio or video frame number
- int real_pict_num; ///< returns the real picture number of previous encoded frame
-
- /**
- * number of frames the decoded output will be delayed relative to
- * the encoded input.
- * - encoding: set by lavc.
- * - decoding: unused
- */
- int delay;
-
- /* - encoding parameters */
- float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
- float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
-
- /**
- * minimum quantizer.
- * - encoding: set by user.
- * - decoding: unused
- */
- int qmin;
-
- /**
- * maximum quantizer.
- * - encoding: set by user.
- * - decoding: unused
- */
- int qmax;
-
- /**
- * maximum quantizer difference between frames.
- * - encoding: set by user.
- * - decoding: unused
- */
- int max_qdiff;
-
- /**
- * maximum number of b frames between non b frames.
- * note: the output will be delayed by max_b_frames+1 relative to the input
- * - encoding: set by user.
- * - decoding: unused
- */
- int max_b_frames;
-
- /**
- * qscale factor between ip and b frames.
- * - encoding: set by user.
- * - decoding: unused
- */
- float b_quant_factor;
-
- /** obsolete FIXME remove */
- int rc_strategy;
-#define FF_RC_STRATEGY_XVID 1
-
- int b_frame_strategy;
-
- /**
- * hurry up amount.
- * - encoding: unused
- * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
- * @deprecated Deprecated in favor of skip_idct and skip_frame.
- */
- int hurry_up;
-
- struct AVCodec *codec;
-
- void *priv_data;
-
-#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
- /* unused, FIXME remove*/
- int rtp_mode;
-#endif
-
- int rtp_payload_size; /* The size of the RTP payload: the coder will */
- /* do it's best to deliver a chunk with size */
- /* below rtp_payload_size, the chunk will start */
- /* with a start code on some codecs like H.263 */
- /* This doesn't take account of any particular */
- /* headers inside the transmited RTP payload */
-
-
- /* The RTP callback: This function is called */
- /* every time the encoder has a packet to send */
- /* Depends on the encoder if the data starts */
- /* with a Start Code (it should) H.263 does. */
- /* mb_nb contains the number of macroblocks */
- /* encoded in the RTP payload */
- void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
-
- /* statistics, used for 2-pass encoding */
- int mv_bits;
- int header_bits;
- int i_tex_bits;
- int p_tex_bits;
- int i_count;
- int p_count;
- int skip_count;
- int misc_bits;
-
- /**
- * number of bits used for the previously encoded frame.
- * - encoding: set by lavc
- * - decoding: unused
- */
- int frame_bits;
-
- /**
- * private data of the user, can be used to carry app specific stuff.
- * - encoding: set by user
- * - decoding: set by user
- */
- void *opaque;
-
- char codec_name[32];
- enum CodecType codec_type; /* see CODEC_TYPE_xxx */
- enum CodecID codec_id; /* see CODEC_ID_xxx */
-
- /**
- * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * this is used to workaround some encoder bugs
- * - encoding: set by user, if not then the default based on codec_id will be used
- * - decoding: set by user, will be converted to upper case by lavc during init
- */
- unsigned int codec_tag;
-
- /**
- * workaround bugs in encoders which sometimes cannot be detected automatically.
- * - encoding: set by user
- * - decoding: set by user
- */
- int workaround_bugs;
-#define FF_BUG_AUTODETECT 1 ///< autodetection
-#define FF_BUG_OLD_MSMPEG4 2
-#define FF_BUG_XVID_ILACE 4
-#define FF_BUG_UMP4 8
-#define FF_BUG_NO_PADDING 16
-#define FF_BUG_AMV 32
-#define FF_BUG_AC_VLC 0 ///< will be removed, libavcodec can now handle these non compliant files by default
-#define FF_BUG_QPEL_CHROMA 64
-#define FF_BUG_STD_QPEL 128
-#define FF_BUG_QPEL_CHROMA2 256
-#define FF_BUG_DIRECT_BLOCKSIZE 512
-#define FF_BUG_EDGE 1024
-#define FF_BUG_HPEL_CHROMA 2048
-#define FF_BUG_DC_CLIP 4096
-#define FF_BUG_MS 8192 ///< workaround various bugs in microsofts broken decoders
-//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
-
- /**
- * luma single coeff elimination threshold.
- * - encoding: set by user
- * - decoding: unused
- */
- int luma_elim_threshold;
-
- /**
- * chroma single coeff elimination threshold.
- * - encoding: set by user
- * - decoding: unused
- */
- int chroma_elim_threshold;
-
- /**
- * strictly follow the std (MPEG4, ...).
- * - encoding: set by user
- * - decoding: unused
- */
- int strict_std_compliance;
-#define FF_COMPLIANCE_VERY_STRICT 2 ///< strictly conform to a older more strict version of the spec or reference software
-#define FF_COMPLIANCE_STRICT 1 ///< strictly conform to all the things in the spec no matter what consequences
-#define FF_COMPLIANCE_NORMAL 0
-#define FF_COMPLIANCE_INOFFICIAL -1 ///< allow inofficial extensions
-#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< allow non standarized experimental things
-
- /**
- * qscale offset between ip and b frames.
- * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
- * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
- * - encoding: set by user.
- * - decoding: unused
- */
- float b_quant_offset;
-
- /**
- * error resilience higher values will detect more errors but may missdetect
- * some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: set by user
- */
- int error_resilience;
-#define FF_ER_CAREFUL 1
-#define FF_ER_COMPLIANT 2
-#define FF_ER_AGGRESSIVE 3
-#define FF_ER_VERY_AGGRESSIVE 4
-
- /**
- * called at the beginning of each frame to get a buffer for it.
- * if pic.reference is set then the frame will be read later by lavc
- * avcodec_align_dimensions() should be used to find the required width and
- * height, as they normally need to be rounded up to the next multiple of 16
- * - encoding: unused
- * - decoding: set by lavc, user can override
- */
- int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * called to release buffers which where allocated with get_buffer.
- * a released buffer can be reused in get_buffer()
- * pic.data[*] must be set to NULL
- * - encoding: unused
- * - decoding: set by lavc, user can override
- */
- void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * if 1 the stream has a 1 frame delay during decoding.
- * - encoding: set by lavc
- * - decoding: set by lavc
- */
- int has_b_frames;
-
- /**
- * number of bytes per packet if constant and known or 0
- * used by some WAV based audio codecs
- */
- int block_align;
-
- int parse_only; /* - decoding only: if true, only parsing is done
- (function avcodec_parse_frame()). The frame
- data is returned. Only MPEG codecs support this now. */
-
- /**
- * 0-> h263 quant 1-> mpeg quant.
- * - encoding: set by user.
- * - decoding: unused
- */
- int mpeg_quant;
-
- /**
- * pass1 encoding statistics output buffer.
- * - encoding: set by lavc
- * - decoding: unused
- */
- char *stats_out;
-
- /**
- * pass2 encoding statistics input buffer.
- * concatenated stuff from stats_out of pass1 should be placed here
- * - encoding: allocated/set/freed by user
- * - decoding: unused
- */
- char *stats_in;
-
- /**
- * ratecontrol qmin qmax limiting method.
- * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
- * - encoding: set by user.
- * - decoding: unused
- */
- float rc_qsquish;
-
- float rc_qmod_amp;
- int rc_qmod_freq;
-
- /**
- * ratecontrol override, see RcOverride.
- * - encoding: allocated/set/freed by user.
- * - decoding: unused
- */
- RcOverride *rc_override;
- int rc_override_count;
-
- /**
- * rate control equation.
- * - encoding: set by user
- * - decoding: unused
- */
- char *rc_eq;
-
- /**
- * maximum bitrate.
- * - encoding: set by user.
- * - decoding: unused
- */
- int rc_max_rate;
-
- /**
- * minimum bitrate.
- * - encoding: set by user.
- * - decoding: unused
- */
- int rc_min_rate;
-
- /**
- * decoder bitstream buffer size.
- * - encoding: set by user.
- * - decoding: unused
- */
- int rc_buffer_size;
- float rc_buffer_aggressivity;
-
- /**
- * qscale factor between p and i frames.
- * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
- * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
- * - encoding: set by user.
- * - decoding: unused
- */
- float i_quant_factor;
-
- /**
- * qscale offset between p and i frames.
- * - encoding: set by user.
- * - decoding: unused
- */
- float i_quant_offset;
-
- /**
- * initial complexity for pass1 ratecontrol.
- * - encoding: set by user.
- * - decoding: unused
- */
- float rc_initial_cplx;
-
- /**
- * dct algorithm, see FF_DCT_* below.
- * - encoding: set by user
- * - decoding: unused
- */
- int dct_algo;
-#define FF_DCT_AUTO 0
-#define FF_DCT_FASTINT 1
-#define FF_DCT_INT 2
-#define FF_DCT_MMX 3
-#define FF_DCT_MLIB 4
-#define FF_DCT_ALTIVEC 5
-#define FF_DCT_FAAN 6
-
- /**
- * luminance masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float lumi_masking;
-
- /**
- * temporary complexity masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float temporal_cplx_masking;
-
- /**
- * spatial complexity masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float spatial_cplx_masking;
-
- /**
- * p block masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float p_masking;
-
- /**
- * darkness masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused
- */
- float dark_masking;
-
-
- /* for binary compatibility */
- int unused;
-
- /**
- * idct algorithm, see FF_IDCT_* below.
- * - encoding: set by user
- * - decoding: set by user
- */
- int idct_algo;
-#define FF_IDCT_AUTO 0
-#define FF_IDCT_INT 1
-#define FF_IDCT_SIMPLE 2
-#define FF_IDCT_SIMPLEMMX 3
-#define FF_IDCT_LIBMPEG2MMX 4
-#define FF_IDCT_PS2 5
-#define FF_IDCT_MLIB 6
-#define FF_IDCT_ARM 7
-#define FF_IDCT_ALTIVEC 8
-#define FF_IDCT_SH4 9
-#define FF_IDCT_SIMPLEARM 10
-#define FF_IDCT_H264 11
-#define FF_IDCT_VP3 12
-#define FF_IDCT_IPP 13
-#define FF_IDCT_XVIDMMX 14
-#define FF_IDCT_CAVS 15
-#define FF_IDCT_SIMPLEARMV5TE 16
-#define FF_IDCT_SIMPLEARMV6 17
-
- /**
- * slice count.
- * - encoding: set by lavc
- * - decoding: set by user (or 0)
- */
- int slice_count;
- /**
- * slice offsets in the frame in bytes.
- * - encoding: set/allocated by lavc
- * - decoding: set/allocated by user (or NULL)
- */
- int *slice_offset;
-
- /**
- * error concealment flags.
- * - encoding: unused
- * - decoding: set by user
- */
- int error_concealment;
-#define FF_EC_GUESS_MVS 1
-#define FF_EC_DEBLOCK 2
-
- /**
- * dsp_mask could be add used to disable unwanted CPU features
- * CPU features (i.e. MMX, SSE. ...)
- *
- * with FORCE flag you may instead enable given CPU features
- * (Dangerous: usable in case of misdetection, improper usage however will
- * result into program crash)
- */
- unsigned dsp_mask;
-#define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */
- /* lower 16 bits - CPU features */
-#ifdef HAVE_MMX
-#define FF_MM_MMX 0x0001 /* standard MMX */
-#define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */
-#define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
-#define FF_MM_SSE 0x0008 /* SSE functions */
-#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
-#define FF_MM_3DNOWEXT 0x0020 /* AMD 3DNowExt */
-#endif /* HAVE_MMX */
-#ifdef HAVE_IWMMXT
-#define FF_MM_IWMMXT 0x0100 /* XScale IWMMXT */
-#endif /* HAVE_IWMMXT */
-
- /**
- * bits per sample/pixel from the demuxer (needed for huffyuv).
- * - encoding: set by lavc
- * - decoding: set by user
- */
- int bits_per_sample;
-
- /**
- * prediction method (needed for huffyuv).
- * - encoding: set by user
- * - decoding: unused
- */
- int prediction_method;
-#define FF_PRED_LEFT 0
-#define FF_PRED_PLANE 1
-#define FF_PRED_MEDIAN 2
-
- /**
- * sample aspect ratio (0 if unknown).
- * numerator and denominator must be relative prime and smaller then 256 for some video standards
- * - encoding: set by user.
- * - decoding: set by lavc.
- */
- AVRational sample_aspect_ratio;
-
- /**
- * the picture in the bitstream.
- * - encoding: set by lavc
- * - decoding: set by lavc
- */
- AVFrame *coded_frame;
-
- /**
- * debug.
- * - encoding: set by user.
- * - decoding: set by user.
- */
- int debug;
-#define FF_DEBUG_PICT_INFO 1
-#define FF_DEBUG_RC 2
-#define FF_DEBUG_BITSTREAM 4
-#define FF_DEBUG_MB_TYPE 8
-#define FF_DEBUG_QP 16
-#define FF_DEBUG_MV 32
-#define FF_DEBUG_DCT_COEFF 0x00000040
-#define FF_DEBUG_SKIP 0x00000080
-#define FF_DEBUG_STARTCODE 0x00000100
-#define FF_DEBUG_PTS 0x00000200
-#define FF_DEBUG_ER 0x00000400
-#define FF_DEBUG_MMCO 0x00000800
-#define FF_DEBUG_BUGS 0x00001000
-#define FF_DEBUG_VIS_QP 0x00002000
-#define FF_DEBUG_VIS_MB_TYPE 0x00004000
-
- /**
- * debug.
- * - encoding: set by user.
- * - decoding: set by user.
- */
- int debug_mv;
-#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
-#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
-#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
-
- /**
- * error.
- * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
- * - decoding: unused
- */
- uint64_t error[4];
-
- /**
- * minimum MB quantizer.
- * - encoding: unused
- * - decoding: unused
- */
- int mb_qmin;
-
- /**
- * maximum MB quantizer.
- * - encoding: unused
- * - decoding: unused
- */
- int mb_qmax;
-
- /**
- * motion estimation compare function.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_cmp;
- /**
- * subpixel motion estimation compare function.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_sub_cmp;
- /**
- * macroblock compare function (not supported yet).
- * - encoding: set by user.
- * - decoding: unused
- */
- int mb_cmp;
- /**
- * interlaced dct compare function
- * - encoding: set by user.
- * - decoding: unused
- */
- int ildct_cmp;
-#define FF_CMP_SAD 0
-#define FF_CMP_SSE 1
-#define FF_CMP_SATD 2
-#define FF_CMP_DCT 3
-#define FF_CMP_PSNR 4
-#define FF_CMP_BIT 5
-#define FF_CMP_RD 6
-#define FF_CMP_ZERO 7
-#define FF_CMP_VSAD 8
-#define FF_CMP_VSSE 9
-#define FF_CMP_NSSE 10
-#define FF_CMP_W53 11
-#define FF_CMP_W97 12
-#define FF_CMP_DCTMAX 13
-#define FF_CMP_DCT264 14
-#define FF_CMP_CHROMA 256
-
- /**
- * ME diamond size & shape.
- * - encoding: set by user.
- * - decoding: unused
- */
- int dia_size;
-
- /**
- * amount of previous MV predictors (2a+1 x 2a+1 square).
- * - encoding: set by user.
- * - decoding: unused
- */
- int last_predictor_count;
-
- /**
- * pre pass for motion estimation.
- * - encoding: set by user.
- * - decoding: unused
- */
- int pre_me;
-
- /**
- * motion estimation pre pass compare function.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_pre_cmp;
-
- /**
- * ME pre pass diamond size & shape.
- * - encoding: set by user.
- * - decoding: unused
- */
- int pre_dia_size;
-
- /**
- * subpel ME quality.
- * - encoding: set by user.
- * - decoding: unused
- */
- int me_subpel_quality;
-
- /**
- * callback to negotiate the pixelFormat.
- * @param fmt is the list of formats which are supported by the codec,
- * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
- * the first is allways the native one
- * @return the choosen format
- * - encoding: unused
- * - decoding: set by user, if not set then the native format will always be choosen
- */
- enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
-
- /**
- * DTG active format information (additionnal aspect ratio
- * information only used in DVB MPEG2 transport streams). 0 if
- * not set.
- *
- * - encoding: unused.
- * - decoding: set by decoder
- */
- int dtg_active_format;
-#define FF_DTG_AFD_SAME 8
-#define FF_DTG_AFD_4_3 9
-#define FF_DTG_AFD_16_9 10
-#define FF_DTG_AFD_14_9 11
-#define FF_DTG_AFD_4_3_SP_14_9 13
-#define FF_DTG_AFD_16_9_SP_14_9 14
-#define FF_DTG_AFD_SP_4_3 15
-
- /**
- * Maximum motion estimation search range in subpel units.
- * if 0 then no limit
- *
- * - encoding: set by user.
- * - decoding: unused.
- */
- int me_range;
-
- /**
- * intra quantizer bias.
- * - encoding: set by user.
- * - decoding: unused
- */
- int intra_quant_bias;
-#define FF_DEFAULT_QUANT_BIAS 999999
-
- /**
- * inter quantizer bias.
- * - encoding: set by user.
- * - decoding: unused
- */
- int inter_quant_bias;
-
- /**
- * color table ID.
- * - encoding: unused.
- * - decoding: which clrtable should be used for 8bit RGB images
- * table have to be stored somewhere FIXME
- */
- int color_table_id;
-
- /**
- * internal_buffer count.
- * Don't touch, used by lavc default_get_buffer()
- */
- int internal_buffer_count;
-
- /**
- * internal_buffers.
- * Don't touch, used by lavc default_get_buffer()
- */
- void *internal_buffer;
-
-#define FF_LAMBDA_SHIFT 7
-#define FF_LAMBDA_SCALE (1<