--- /dev/null
+This is a FFmpeg Win64 shared build by Kyle Schwarz.
+
+Zeranoe's FFmpeg Builds Home Page: <http://ffmpeg.zeranoe.com/builds/>
+
+This build was compiled on: Jun 19 2014, at: 20:36:23
+
+FFmpeg version: 2.2.3
+ libavutil 52. 66.100 / 52. 66.100
+ libavcodec 55. 52.102 / 55. 52.102
+ libavformat 55. 33.100 / 55. 33.100
+ libavdevice 55. 10.100 / 55. 10.100
+ libavfilter 4. 2.100 / 4. 2.100
+ libswscale 2. 5.102 / 2. 5.102
+ libswresample 0. 18.100 / 0. 18.100
+ libpostproc 52. 3.100 / 52. 3.100
+
+This FFmpeg build was configured with:
+ --disable-static
+ --enable-shared
+ --enable-gpl
+ --enable-version3
+ --disable-w32threads
+ --enable-avisynth
+ --enable-bzlib
+ --enable-fontconfig
+ --enable-frei0r
+ --enable-gnutls
+ --enable-iconv
+ --enable-libass
+ --enable-libbluray
+ --enable-libcaca
+ --enable-libfreetype
+ --enable-libgme
+ --enable-libgsm
+ --enable-libilbc
+ --enable-libmodplug
+ --enable-libmp3lame
+ --enable-libopencore-amrnb
+ --enable-libopencore-amrwb
+ --enable-libopenjpeg
+ --enable-libopus
+ --enable-librtmp
+ --enable-libschroedinger
+ --enable-libsoxr
+ --enable-libspeex
+ --enable-libtheora
+ --enable-libtwolame
+ --enable-libvidstab
+ --enable-libvo-aacenc
+ --enable-libvo-amrwbenc
+ --enable-libvorbis
+ --enable-libvpx
+ --enable-libwavpack
+ --enable-libwebp
+ --enable-libx264
+ --enable-libx265
+ --enable-libxavs
+ --enable-libxvid
+ --enable-decklink
+ --enable-zlib
+
+This build was compiled with the following external libraries:
+ bzip2 1.0.6 <http://bzip.org/>
+ Fontconfig 2.11.1 <http://freedesktop.org/wiki/Software/fontconfig>
+ Frei0r 20130909-git-10d8360 <http://frei0r.dyne.org/>
+ GnuTLS 3.2.15 <http://gnutls.org/>
+ libiconv 1.14 <http://gnu.org/software/libiconv/>
+ libass 0.10.2 <http://code.google.com/p/libass/>
+ libbluray 0.6.0 <http://videolan.org/developers/libbluray.html>
+ libcaca 0.99.beta18 <http://caca.zoy.org/wiki/libcaca>
+ FreeType 2.5.3 <http://freetype.sourceforge.net/>
+ Game Music Emu 0.6.0 <http://code.google.com/p/game-music-emu/>
+ GSM 1.0.13-4 <http://packages.debian.org/source/squeeze/libgsm>
+ iLBC 20120913-git-b5f9b10 <https://github.com/dekkers/libilbc/>
+ Modplug-XMMS 0.8.8.4 <http://modplug-xmms.sourceforge.net/>
+ LAME 3.99.5 <http://lame.sourceforge.net/>
+ OpenCORE AMR 0.1.3 <http://sourceforge.net/projects/opencore-amr/>
+ OpenJPEG 1.5.1 <http://www.openjpeg.org/>
+ Opus 1.1 <http://opus-codec.org/>
+ RTMPDump 20140302-git-79459a2 <http://rtmpdump.mplayerhq.hu/>
+ Schroedinger 1.0.11 <http://diracvideo.org/>
+ libsoxr 0.1.1 <http://sourceforge.net/projects/soxr/>
+ Speex 1.2rc1 <http://speex.org/>
+ Theora 1.1.1 <http://theora.org/>
+ TwoLAME 0.3.13 <http://twolame.org/>
+ vid.stab 0.98 <http://public.hronopik.de/vid.stab/>
+ VisualOn AAC 0.1.3 <https://github.com/mstorsjo/vo-aacenc>
+ VisualOn AMR-WB 0.1.2 <https://github.com/mstorsjo/vo-amrwbenc>
+ Vorbis 1.3.4 <http://vorbis.com/>
+ vpx 1.3.0 <http://webmproject.org/>
+ WavPack 4.70.0 <http://wavpack.com/>
+ WebP 0.4.0 <https://developers.google.com/speed/webp/>
+ x264 20140422-git-ac76440 <http://videolan.org/developers/x264.html>
+ x265 1.1 <http://x265.org/>
+ XAVS svn-r55 <http://xavs.sourceforge.net/>
+ Xvid 1.3.3 <http://xvid.org/>
+ zlib 1.2.8 <http://zlib.net/>
+
+The source code for this FFmpeg build can be found at: <http://ffmpeg.zeranoe.com/builds/source/>
+
+This build was compiled on Debian jessie/sid (64-bit): <http://www.debian.org/>
+
+GCC 4.8.3 was used to compile this FFmpeg build: <http://gcc.gnu.org/>
+
+This build was compiled using the MinGW-w64 toolchain: <http://mingw-w64.sourceforge.net/>
+
+Licenses for each library can be found in the 'licenses' folder.
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Developer </title>
+
+<meta name="description" content="Developer Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Developer ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Developer Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Developers-Guide" href="#Developers-Guide">1. Developers Guide</a>
+ <ul class="toc">
+ <li><a name="toc-Notes-for-external-developers" href="#Notes-for-external-developers">1.1 Notes for external developers</a></li>
+ <li><a name="toc-Contributing" href="#Contributing">1.2 Contributing</a></li>
+ <li><a name="toc-Coding-Rules-1" href="#Coding-Rules-1">1.3 Coding Rules</a>
+ <ul class="toc">
+ <li><a name="toc-Code-formatting-conventions" href="#Code-formatting-conventions">1.3.1 Code formatting conventions</a></li>
+ <li><a name="toc-Comments" href="#Comments">1.3.2 Comments</a></li>
+ <li><a name="toc-C-language-features" href="#C-language-features">1.3.3 C language features</a></li>
+ <li><a name="toc-Naming-conventions" href="#Naming-conventions">1.3.4 Naming conventions</a></li>
+ <li><a name="toc-Miscellaneous-conventions" href="#Miscellaneous-conventions">1.3.5 Miscellaneous conventions</a></li>
+ <li><a name="toc-Editor-configuration" href="#Editor-configuration">1.3.6 Editor configuration</a></li>
+ </ul></li>
+ <li><a name="toc-Development-Policy" href="#Development-Policy">1.4 Development Policy</a></li>
+ <li><a name="toc-Submitting-patches-1" href="#Submitting-patches-1">1.5 Submitting patches</a></li>
+ <li><a name="toc-New-codecs-or-formats-checklist" href="#New-codecs-or-formats-checklist">1.6 New codecs or formats checklist</a></li>
+ <li><a name="toc-patch-submission-checklist" href="#patch-submission-checklist">1.7 patch submission checklist</a></li>
+ <li><a name="toc-Patch-review-process" href="#Patch-review-process">1.8 Patch review process</a></li>
+ <li><a name="toc-Regression-tests-1" href="#Regression-tests-1">1.9 Regression tests</a>
+ <ul class="toc">
+ <li><a name="toc-Adding-files-to-the-fate_002dsuite-dataset" href="#Adding-files-to-the-fate_002dsuite-dataset">1.9.1 Adding files to the fate-suite dataset</a></li>
+ <li><a name="toc-Visualizing-Test-Coverage" href="#Visualizing-Test-Coverage">1.9.2 Visualizing Test Coverage</a></li>
+ <li><a name="toc-Using-Valgrind" href="#Using-Valgrind">1.9.3 Using Valgrind</a></li>
+ </ul></li>
+ <li><a name="toc-Release-process-1" href="#Release-process-1">1.10 Release process</a>
+ <ul class="toc">
+ <li><a name="toc-Criteria-for-Point-Releases-1" href="#Criteria-for-Point-Releases-1">1.10.1 Criteria for Point Releases</a></li>
+ <li><a name="toc-Release-Checklist" href="#Release-Checklist">1.10.2 Release Checklist</a></li>
+ </ul>
+</li>
+ </ul>
+</li>
+</ul>
+</div>
+
+<a name="Developers-Guide"></a>
+<h1 class="chapter"><a href="developer.html#toc-Developers-Guide">1. Developers Guide</a></h1>
+
+<a name="Notes-for-external-developers"></a>
+<h2 class="section"><a href="developer.html#toc-Notes-for-external-developers">1.1 Notes for external developers</a></h2>
+
+<p>This document is mostly useful for internal FFmpeg developers.
+External developers who need to use the API in their application should
+refer to the API doxygen documentation in the public headers, and
+check the examples in ‘<tt>doc/examples</tt>’ and in the source code to
+see how the public API is employed.
+</p>
+<p>You can use the FFmpeg libraries in your commercial program, but you
+are encouraged to <em>publish any patch you make</em>. In this case the
+best way to proceed is to send your patches to the ffmpeg-devel
+mailing list following the guidelines illustrated in the remainder of
+this document.
+</p>
+<p>For more detailed legal information about the use of FFmpeg in
+external programs read the ‘<tt>LICENSE</tt>’ file in the source tree and
+consult <a href="http://ffmpeg.org/legal.html">http://ffmpeg.org/legal.html</a>.
+</p>
+<a name="Contributing"></a>
+<h2 class="section"><a href="developer.html#toc-Contributing">1.2 Contributing</a></h2>
+
+<p>There are 3 ways by which code gets into ffmpeg.
+</p><ul>
+<li> Submitting Patches to the main developer mailing list
+ see <a href="#Submitting-patches">Submitting patches</a> for details.
+</li><li> Directly committing changes to the main tree.
+</li><li> Committing changes to a git clone, for example on github.com or
+ gitorious.org. And asking us to merge these changes.
+</li></ul>
+
+<p>Whichever way, changes should be reviewed by the maintainer of the code
+before they are committed. And they should follow the <a href="#Coding-Rules">Coding Rules</a>.
+The developer making the commit and the author are responsible for their changes
+and should try to fix issues their commit causes.
+</p>
+<p><a name="Coding-Rules"></a>
+</p><a name="Coding-Rules-1"></a>
+<h2 class="section"><a href="developer.html#toc-Coding-Rules-1">1.3 Coding Rules</a></h2>
+
+<a name="Code-formatting-conventions"></a>
+<h3 class="subsection"><a href="developer.html#toc-Code-formatting-conventions">1.3.1 Code formatting conventions</a></h3>
+
+<p>There are the following guidelines regarding the indentation in files:
+</p>
+<ul>
+<li>
+Indent size is 4.
+
+</li><li>
+The TAB character is forbidden outside of Makefiles as is any
+form of trailing whitespace. Commits containing either will be
+rejected by the git repository.
+
+</li><li>
+You should try to limit your code lines to 80 characters; however, do so if
+and only if this improves readability.
+</li></ul>
+<p>The presentation is one inspired by ’indent -i4 -kr -nut’.
+</p>
+<p>The main priority in FFmpeg is simplicity and small code size in order to
+minimize the bug count.
+</p>
+<a name="Comments"></a>
+<h3 class="subsection"><a href="developer.html#toc-Comments">1.3.2 Comments</a></h3>
+<p>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.
+</p>
+<p>Avoid Qt-style and similar Doxygen syntax with <code>!</code> in it, i.e. replace
+<code>//!</code> with <code>///</code> and similar. Also @ syntax should be employed
+for markup commands, i.e. use <code>@param</code> and not <code>\param</code>.
+</p>
+<table><tr><td> </td><td><pre class="example">/**
+ * @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)
+...
+</pre></td></tr></table>
+
+<a name="C-language-features"></a>
+<h3 class="subsection"><a href="developer.html#toc-C-language-features">1.3.3 C language features</a></h3>
+
+<p>FFmpeg is programmed in the ISO C90 language with a few additional
+features from ISO C99, namely:
+</p>
+<ul>
+<li>
+the ‘<samp>inline</samp>’ keyword;
+
+</li><li>
+‘<samp>//</samp>’ comments;
+
+</li><li>
+designated struct initializers (‘<samp>struct s x = { .i = 17 };</samp>’)
+
+</li><li>
+compound literals (‘<samp>x = (struct s) { 17, 23 };</samp>’)
+</li></ul>
+
+<p>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.
+</p>
+<p>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:
+</p>
+<ul>
+<li>
+mixing statements and declarations;
+
+</li><li>
+‘<samp>long long</samp>’ (use ‘<samp>int64_t</samp>’ instead);
+
+</li><li>
+‘<samp>__attribute__</samp>’ not protected by ‘<samp>#ifdef __GNUC__</samp>’ or similar;
+
+</li><li>
+GCC statement expressions (‘<samp>(x = ({ int y = 4; y; })</samp>’).
+</li></ul>
+
+<a name="Naming-conventions"></a>
+<h3 class="subsection"><a href="developer.html#toc-Naming-conventions">1.3.4 Naming conventions</a></h3>
+<p>All names should be composed with underscores (_), not CamelCase. For example,
+‘<samp>avfilter_get_video_buffer</samp>’ is an acceptable function name and
+‘<samp>AVFilterGetVideo</samp>’ is not. The exception from this are type names, like
+for example structs and enums; they should always be in the CamelCase
+</p>
+<p>There are the following conventions for naming variables and functions:
+</p>
+<ul>
+<li>
+For local variables no prefix is required.
+
+</li><li>
+For file-scope variables and functions declared as <code>static</code>, no prefix
+is required.
+
+</li><li>
+For variables and functions visible outside of file scope, but only used
+internally by a library, an <code>ff_</code> prefix should be used,
+e.g. ‘<samp>ff_w64_demuxer</samp>’.
+
+</li><li>
+For variables and functions visible outside of file scope, used internally
+across multiple libraries, use <code>avpriv_</code> as prefix, for example,
+‘<samp>avpriv_aac_parse_header</samp>’.
+
+</li><li>
+Each library has its own prefix for public symbols, in addition to the
+commonly used <code>av_</code> (<code>avformat_</code> for libavformat,
+<code>avcodec_</code> for libavcodec, <code>swr_</code> for libswresample, etc).
+Check the existing code and choose names accordingly.
+Note that some symbols without these prefixes are also exported for
+retro-compatibility reasons. These exceptions are declared in the
+<code>lib<name>/lib<name>.v</code> files.
+</li></ul>
+
+<p>Furthermore, name space reserved for the system should not be invaded.
+Identifiers ending in <code>_t</code> are reserved by
+<a href="http://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html#tag_02_02_02">POSIX</a>.
+Also avoid names starting with <code>__</code> or <code>_</code> followed by an uppercase
+letter as they are reserved by the C standard. Names starting with <code>_</code>
+are reserved at the file level and may not be used for externally visible
+symbols. If in doubt, just avoid names starting with <code>_</code> altogether.
+</p>
+<a name="Miscellaneous-conventions"></a>
+<h3 class="subsection"><a href="developer.html#toc-Miscellaneous-conventions">1.3.5 Miscellaneous conventions</a></h3>
+
+<ul>
+<li>
+fprintf and printf are forbidden in libavformat and libavcodec,
+please use av_log() instead.
+
+</li><li>
+Casts should be used only when necessary. Unneeded parentheses
+should also be avoided if they don’t make the code easier to understand.
+</li></ul>
+
+<a name="Editor-configuration"></a>
+<h3 class="subsection"><a href="developer.html#toc-Editor-configuration">1.3.6 Editor configuration</a></h3>
+<p>In order to configure Vim to follow FFmpeg formatting conventions, paste
+the following snippet into your ‘<tt>.vimrc</tt>’:
+</p><table><tr><td> </td><td><pre class="example">" indentation rules for FFmpeg: 4 spaces, no tabs
+set expandtab
+set shiftwidth=4
+set softtabstop=4
+set cindent
+set cinoptions=(0
+" Allow tabs in Makefiles.
+autocmd FileType make,automake 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\+\%#\@<!$/
+</pre></td></tr></table>
+
+<p>For Emacs, add these roughly equivalent lines to your ‘<tt>.emacs.d/init.el</tt>’:
+</p><table><tr><td> </td><td><pre class="example">(c-add-style "ffmpeg"
+ '("k&r"
+ (c-basic-offset . 4)
+ (indent-tabs-mode . nil)
+ (show-trailing-whitespace . t)
+ (c-offsets-alist
+ (statement-cont . (c-lineup-assignments +)))
+ )
+ )
+(setq c-default-style "ffmpeg")
+</pre></td></tr></table>
+
+<a name="Development-Policy"></a>
+<h2 class="section"><a href="developer.html#toc-Development-Policy">1.4 Development Policy</a></h2>
+
+<ol>
+<li>
+Contributions should be licensed under the
+<a href="http://www.gnu.org/licenses/lgpl-2.1.html">LGPL 2.1</a>,
+including an "or any later version" clause, or, if you prefer
+a gift-style license, the
+<a href="http://opensource.org/licenses/isc-license.txt">ISC</a> or
+<a href="http://mit-license.org/">MIT</a> license.
+<a href="http://www.gnu.org/licenses/gpl-2.0.html">GPL 2</a> including
+an "or any later version" clause is also acceptable, but LGPL is
+preferred.
+If you add a new file, give it a proper license header. Do not copy and
+paste it from a random place, use an existing file as template.
+
+</li><li>
+You must not commit code which breaks FFmpeg! (Meaning unfinished but
+enabled code which breaks compilation or compiles but does not work or
+breaks the regression tests)
+You can commit unfinished stuff (for testing etc), but it must be disabled
+(#ifdef etc) by default so it does not interfere with other developers’
+work.
+
+</li><li>
+The commit message should have a short first line in the form of
+a ‘<samp>topic: short description</samp>’ as a header, separated by a newline
+from the body consisting of an explanation of why the change is necessary.
+If the commit fixes a known bug on the bug tracker, the commit message
+should include its bug ID. Referring to the issue on the bug tracker does
+not exempt you from writing an excerpt of the bug in the commit message.
+
+</li><li>
+You do not have to over-test things. If it works for you, and you think it
+should work for others, then commit. If your code has problems
+(portability, triggers compiler bugs, unusual environment etc) they will be
+reported and eventually fixed.
+
+</li><li>
+Do not commit unrelated changes together, split them into self-contained
+pieces. Also do not forget that if part B depends on part A, but A does not
+depend on B, then A can and should be committed first and separate from B.
+Keeping changes well split into self-contained parts makes reviewing and
+understanding them on the commit log mailing list easier. This also helps
+in case of debugging later on.
+Also if you have doubts about splitting or not splitting, do not hesitate to
+ask/discuss it on the developer mailing list.
+
+</li><li>
+Do not change behavior of the programs (renaming options etc) or public
+API or ABI without first discussing it on the ffmpeg-devel mailing list.
+Do not remove functionality from the code. Just improve!
+
+<p>Note: Redundant code can be removed.
+</p>
+</li><li>
+Do not commit changes to the build system (Makefiles, configure script)
+which change behavior, defaults etc, without asking first. The same
+applies to compiler warning fixes, trivial looking fixes and to code
+maintained by other developers. We usually have a reason for doing things
+the way we do. Send your changes as patches to the ffmpeg-devel mailing
+list, and if the code maintainers say OK, you may commit. This does not
+apply to files you wrote and/or maintain.
+
+</li><li>
+We refuse source indentation and other cosmetic changes if they are mixed
+with functional changes, such commits will be rejected and removed. Every
+developer has his own indentation style, you should not change it. Of course
+if you (re)write something, you can use your own style, even though we would
+prefer if the indentation throughout FFmpeg was consistent (Many projects
+force a given indentation style - we do not.). If you really need to make
+indentation changes (try to avoid this), separate them strictly from real
+changes.
+
+<p>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
+</p>
+</li><li>
+Always fill out the commit log message. Describe in a few lines what you
+changed and why. You can refer to mailing list postings if you fix a
+particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
+Recommended format:
+area changed: Short 1 line description
+
+<p>details describing what and why and giving references.
+</p>
+</li><li>
+Make sure the author of the commit is set correctly. (see git commit –author)
+If you apply a patch, send an
+answer to ffmpeg-devel (or wherever you got the patch from) saying that
+you applied the patch.
+
+</li><li>
+When applying patches that have been discussed (at length) on the mailing
+list, reference the thread in the log message.
+
+</li><li>
+Do NOT commit to code actively maintained by others without permission.
+Send a patch to ffmpeg-devel instead. If no one answers within a reasonable
+timeframe (12h for build failures and security fixes, 3 days small changes,
+1 week for big patches) then commit your patch if you think it is OK.
+Also note, the maintainer can simply ask for more time to review!
+
+</li><li>
+Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits
+are sent there and reviewed by all the other developers. Bugs and possible
+improvements or general questions regarding commits are discussed there. We
+expect you to react if problems with your code are uncovered.
+
+</li><li>
+Update the documentation if you change behavior or add features. If you are
+unsure how best to do this, send a patch to ffmpeg-devel, the documentation
+maintainer(s) will review and commit your stuff.
+
+</li><li>
+Try to keep important discussions and requests (also) on the public
+developer mailing list, so that all developers can benefit from them.
+
+</li><li>
+Never write to unallocated memory, never write over the end of arrays,
+always check values read from some untrusted source before using them
+as array index or other risky things.
+
+</li><li>
+Remember to check if you need to bump versions for the specific libav*
+parts (libavutil, libavcodec, libavformat) you are changing. You need
+to change the version integer.
+Incrementing the first component means no backward compatibility to
+previous versions (e.g. removal of a function from the public API).
+Incrementing the second component means backward compatible change
+(e.g. addition of a function to the public API or extension of an
+existing data structure).
+Incrementing the third component means a noteworthy binary compatible
+change (e.g. encoder bug fix that matters for the decoder). The third
+component always starts at 100 to distinguish FFmpeg from Libav.
+
+</li><li>
+Compiler warnings indicate potential bugs or code with bad style. If a type of
+warning always points to correct and clean code, that warning should
+be disabled, not the code changed.
+Thus the remaining warnings can either be bugs or correct code.
+If it is a bug, the bug has to be fixed. If it is not, the code should
+be changed to not generate a warning unless that causes a slowdown
+or obfuscates the code.
+
+</li><li>
+Make sure that no parts of the codebase that you maintain are missing from the
+‘<tt>MAINTAINERS</tt>’ file. If something that you want to maintain is missing add it with
+your name after it.
+If at some point you no longer want to maintain some code, then please help
+finding a new maintainer and also don’t forget updating the ‘<tt>MAINTAINERS</tt>’ file.
+</li></ol>
+
+<p>We think our rules are not too hard. If you have comments, contact us.
+</p>
+<p><a name="Submitting-patches"></a>
+</p><a name="Submitting-patches-1"></a>
+<h2 class="section"><a href="developer.html#toc-Submitting-patches-1">1.5 Submitting patches</a></h2>
+
+<p>First, read the <a href="#Coding-Rules">Coding Rules</a> above if you did not yet, in particular
+the rules regarding patch submission.
+</p>
+<p>When you submit your patch, please use <code>git format-patch</code> or
+<code>git send-email</code>. We cannot read other diffs :-)
+</p>
+<p>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.
+</p>
+<p>Use the patcheck tool of FFmpeg to check your patch.
+The tool is located in the tools directory.
+</p>
+<p>Run the <a href="#Regression-tests">Regression tests</a> before submitting a patch in order to verify
+it does not cause unexpected problems.
+</p>
+<p>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()’)
+</p>
+<p>Also please if you send several patches, send each patch as a separate mail,
+do not attach several unrelated patches to the same mail.
+</p>
+<p>Patches should be posted to the
+<a href="http://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel">ffmpeg-devel</a>
+mailing list. Use <code>git send-email</code> when possible since it will properly
+send patches without requiring extra care. If you cannot, then send patches
+as base64-encoded attachments, so your patch is not trashed during
+transmission.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+
+<a name="New-codecs-or-formats-checklist"></a>
+<h2 class="section"><a href="developer.html#toc-New-codecs-or-formats-checklist">1.6 New codecs or formats checklist</a></h2>
+
+<ol>
+<li>
+Did you use av_cold for codec initialization and close functions?
+
+</li><li>
+Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or
+AVInputFormat/AVOutputFormat struct?
+
+</li><li>
+Did you bump the minor version number (and reset the micro version
+number) in ‘<tt>libavcodec/version.h</tt>’ or ‘<tt>libavformat/version.h</tt>’?
+
+</li><li>
+Did you register it in ‘<tt>allcodecs.c</tt>’ or ‘<tt>allformats.c</tt>’?
+
+</li><li>
+Did you add the AVCodecID to ‘<tt>avcodec.h</tt>’?
+When adding new codec IDs, also add an entry to the codec descriptor
+list in ‘<tt>libavcodec/codec_desc.c</tt>’.
+
+</li><li>
+If it has a FourCC, did you add it to ‘<tt>libavformat/riff.c</tt>’,
+even if it is only a decoder?
+
+</li><li>
+Did you add a rule to compile the appropriate files in the Makefile?
+Remember to do this even if you’re just adding a format to a file that is
+already being compiled by some other rule, like a raw demuxer.
+
+</li><li>
+Did you add an entry to the table of supported formats or codecs in
+‘<tt>doc/general.texi</tt>’?
+
+</li><li>
+Did you add an entry in the Changelog?
+
+</li><li>
+If it depends on a parser or a library, did you add that dependency in
+configure?
+
+</li><li>
+Did you <code>git add</code> the appropriate files before committing?
+
+</li><li>
+Did you make sure it compiles standalone, i.e. with
+<code>configure --disable-everything --enable-decoder=foo</code>
+(or <code>--enable-demuxer</code> or whatever your component is)?
+</li></ol>
+
+
+<a name="patch-submission-checklist"></a>
+<h2 class="section"><a href="developer.html#toc-patch-submission-checklist">1.7 patch submission checklist</a></h2>
+
+<ol>
+<li>
+Does <code>make fate</code> pass with the patch applied?
+
+</li><li>
+Was the patch generated with git format-patch or send-email?
+
+</li><li>
+Did you sign off your patch? (git commit -s)
+See <a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=Documentation/SubmittingPatches">http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=Documentation/SubmittingPatches</a> for the meaning
+of sign off.
+
+</li><li>
+Did you provide a clear git commit log message?
+
+</li><li>
+Is the patch against latest FFmpeg git master branch?
+
+</li><li>
+Are you subscribed to ffmpeg-devel?
+(the list is subscribers only due to spam)
+
+</li><li>
+Have you checked that the changes are minimal, so that the same cannot be
+achieved with a smaller patch and/or simpler final code?
+
+</li><li>
+If the change is to speed critical code, did you benchmark it?
+
+</li><li>
+If you did any benchmarks, did you provide them in the mail?
+
+</li><li>
+Have you checked that the patch does not introduce buffer overflows or
+other security issues?
+
+</li><li>
+Did you test your decoder or demuxer against damaged data? If no, see
+tools/trasher, the noise bitstream filter, and
+<a href="http://caca.zoy.org/wiki/zzuf">zzuf</a>. Your decoder or demuxer
+should not crash, end in a (near) infinite loop, or allocate ridiculous
+amounts of memory when fed damaged data.
+
+</li><li>
+Does the patch not mix functional and cosmetic changes?
+
+</li><li>
+Did you add tabs or trailing whitespace to the code? Both are forbidden.
+
+</li><li>
+Is the patch attached to the email you send?
+
+</li><li>
+Is the mime type of the patch correct? It should be text/x-diff or
+text/x-patch or at least text/plain and not application/octet-stream.
+
+</li><li>
+If the patch fixes a bug, did you provide a verbose analysis of the bug?
+
+</li><li>
+If the patch fixes a bug, did you provide enough information, including
+a sample, so the bug can be reproduced and the fix can be verified?
+Note please do not attach samples >100k to mails but rather provide a
+URL, you can upload to ftp://upload.ffmpeg.org
+
+</li><li>
+Did you provide a verbose summary about what the patch does change?
+
+</li><li>
+Did you provide a verbose explanation why it changes things like it does?
+
+</li><li>
+Did you provide a verbose summary of the user visible advantages and
+disadvantages if the patch is applied?
+
+</li><li>
+Did you provide an example so we can verify the new feature added by the
+patch easily?
+
+</li><li>
+If you added a new file, did you insert a license header? It should be
+taken from FFmpeg, not randomly copied and pasted from somewhere else.
+
+</li><li>
+You should maintain alphabetical order in alphabetically ordered lists as
+long as doing so does not break API/ABI compatibility.
+
+</li><li>
+Lines with similar content should be aligned vertically when doing so
+improves readability.
+
+</li><li>
+Consider to add a regression test for your code.
+
+</li><li>
+If you added YASM code please check that things still work with –disable-yasm
+
+</li><li>
+Make sure you check the return values of function and return appropriate
+error codes. Especially memory allocation functions like <code>av_malloc()</code>
+are notoriously left unchecked, which is a serious problem.
+
+</li><li>
+Test your code with valgrind and or Address Sanitizer to ensure it’s free
+of leaks, out of array accesses, etc.
+</li></ol>
+
+<a name="Patch-review-process"></a>
+<h2 class="section"><a href="developer.html#toc-Patch-review-process">1.8 Patch review process</a></h2>
+
+<p>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.
+</p>
+<p>We will review all submitted patches, but sometimes we are quite busy so
+especially for large patches this can take several weeks.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p><a name="Regression-tests"></a>
+</p><a name="Regression-tests-1"></a>
+<h2 class="section"><a href="developer.html#toc-Regression-tests-1">1.9 Regression tests</a></h2>
+
+<p>Before submitting a patch (or committing to the repository), you should at least
+test that you did not break anything.
+</p>
+<p>Running ’make fate’ accomplishes this, please see <a href="fate.html">fate.html</a> for details.
+</p>
+<p>[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].
+</p>
+<a name="Adding-files-to-the-fate_002dsuite-dataset"></a>
+<h3 class="subsection"><a href="developer.html#toc-Adding-files-to-the-fate_002dsuite-dataset">1.9.1 Adding files to the fate-suite dataset</a></h3>
+
+<p>When there is no muxer or encoder available to generate test media for a
+specific test then the media has to be inlcuded in the fate-suite.
+First please make sure that the sample file is as small as possible to test the
+respective decoder or demuxer sufficiently. Large files increase network
+bandwidth and disk space requirements.
+Once you have a working fate test and fate sample, provide in the commit
+message or introductionary message for the patch series that you post to
+the ffmpeg-devel mailing list, a direct link to download the sample media.
+</p>
+
+<a name="Visualizing-Test-Coverage"></a>
+<h3 class="subsection"><a href="developer.html#toc-Visualizing-Test-Coverage">1.9.2 Visualizing Test Coverage</a></h3>
+
+<p>The FFmpeg build system allows visualizing the test coverage in an easy
+manner with the coverage tools <code>gcov</code>/<code>lcov</code>. This involves
+the following steps:
+</p>
+<ol>
+<li>
+ Configure to compile with instrumentation enabled:
+ <code>configure --toolchain=gcov</code>.
+
+</li><li>
+ Run your test case, either manually or via FATE. This can be either
+ the full FATE regression suite, or any arbitrary invocation of any
+ front-end tool provided by FFmpeg, in any combination.
+
+</li><li>
+ Run <code>make lcov</code> to generate coverage data in HTML format.
+
+</li><li>
+ View <code>lcov/index.html</code> in your preferred HTML viewer.
+</li></ol>
+
+<p>You can use the command <code>make lcov-reset</code> to reset the coverage
+measurements. You will need to rerun <code>make lcov</code> after running a
+new test.
+</p>
+<a name="Using-Valgrind"></a>
+<h3 class="subsection"><a href="developer.html#toc-Using-Valgrind">1.9.3 Using Valgrind</a></h3>
+
+<p>The configure script provides a shortcut for using valgrind to spot bugs
+related to memory handling. Just add the option
+<code>--toolchain=valgrind-memcheck</code> or <code>--toolchain=valgrind-massif</code>
+to your configure line, and reasonable defaults will be set for running
+FATE under the supervision of either the <strong>memcheck</strong> or the
+<strong>massif</strong> tool of the valgrind suite.
+</p>
+<p>In case you need finer control over how valgrind is invoked, use the
+<code>--target-exec='valgrind <your_custom_valgrind_options></code> option in
+your configure line instead.
+</p>
+<p><a name="Release-process"></a>
+</p><a name="Release-process-1"></a>
+<h2 class="section"><a href="developer.html#toc-Release-process-1">1.10 Release process</a></h2>
+
+<p>FFmpeg maintains a set of <strong>release branches</strong>, which are the
+recommended deliverable for system integrators and distributors (such as
+Linux distributions, etc.). At regular times, a <strong>release
+manager</strong> prepares, tests and publishes tarballs on the
+<a href="http://ffmpeg.org">http://ffmpeg.org</a> website.
+</p>
+<p>There are two kinds of releases:
+</p>
+<ol>
+<li>
+<strong>Major releases</strong> always include the latest and greatest
+features and functionality.
+
+</li><li>
+<strong>Point releases</strong> are cut from <strong>release</strong> branches,
+which are named <code>release/X</code>, with <code>X</code> being the release
+version number.
+</li></ol>
+
+<p>Note that we promise to our users that shared libraries from any FFmpeg
+release never break programs that have been <strong>compiled</strong> against
+previous versions of <strong>the same release series</strong> in any case!
+</p>
+<p>However, from time to time, we do make API changes that require adaptations
+in applications. Such changes are only allowed in (new) major releases and
+require further steps such as bumping library version numbers and/or
+adjustments to the symbol versioning file. Please discuss such changes
+on the <strong>ffmpeg-devel</strong> mailing list in time to allow forward planning.
+</p>
+<p><a name="Criteria-for-Point-Releases"></a>
+</p><a name="Criteria-for-Point-Releases-1"></a>
+<h3 class="subsection"><a href="developer.html#toc-Criteria-for-Point-Releases-1">1.10.1 Criteria for Point Releases</a></h3>
+
+<p>Changes that match the following criteria are valid candidates for
+inclusion into a point release:
+</p>
+<ol>
+<li>
+Fixes a security issue, preferably identified by a <strong>CVE
+number</strong> issued by <a href="http://cve.mitre.org/">http://cve.mitre.org/</a>.
+
+</li><li>
+Fixes a documented bug in <a href="https://trac.ffmpeg.org">https://trac.ffmpeg.org</a>.
+
+</li><li>
+Improves the included documentation.
+
+</li><li>
+Retains both source code and binary compatibility with previous
+point releases of the same release branch.
+</li></ol>
+
+<p>The order for checking the rules is (1 OR 2 OR 3) AND 4.
+</p>
+
+<a name="Release-Checklist"></a>
+<h3 class="subsection"><a href="developer.html#toc-Release-Checklist">1.10.2 Release Checklist</a></h3>
+
+<p>The release process involves the following steps:
+</p>
+<ol>
+<li>
+Ensure that the ‘<tt>RELEASE</tt>’ file contains the version number for
+the upcoming release.
+
+</li><li>
+Add the release at <a href="https://trac.ffmpeg.org/admin/ticket/versions">https://trac.ffmpeg.org/admin/ticket/versions</a>.
+
+</li><li>
+Announce the intent to do a release to the mailing list.
+
+</li><li>
+Make sure all relevant security fixes have been backported. See
+<a href="https://ffmpeg.org/security.html">https://ffmpeg.org/security.html</a>.
+
+</li><li>
+Ensure that the FATE regression suite still passes in the release
+branch on at least <strong>i386</strong> and <strong>amd64</strong>
+(cf. <a href="#Regression-tests">Regression tests</a>).
+
+</li><li>
+Prepare the release tarballs in <code>bz2</code> and <code>gz</code> formats, and
+supplementing files that contain <code>gpg</code> signatures
+
+</li><li>
+Publish the tarballs at <a href="http://ffmpeg.org/releases">http://ffmpeg.org/releases</a>. Create and
+push an annotated tag in the form <code>nX</code>, with <code>X</code>
+containing the version number.
+
+</li><li>
+Propose and send a patch to the <strong>ffmpeg-devel</strong> mailing list
+with a news entry for the website.
+
+</li><li>
+Publish the news entry.
+
+</li><li>
+Send announcement to the mailing list.
+</li></ol>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+# use pkg-config for getting CFLAGS and LDLIBS
+FFMPEG_LIBS= libavdevice \
+ libavformat \
+ libavfilter \
+ libavcodec \
+ libswresample \
+ libswscale \
+ libavutil \
+
+CFLAGS += -Wall -g
+CFLAGS := $(shell pkg-config --cflags $(FFMPEG_LIBS)) $(CFLAGS)
+LDLIBS := $(shell pkg-config --libs $(FFMPEG_LIBS)) $(LDLIBS)
+
+EXAMPLES= avio_reading \
+ avcodec \
+ demuxing_decoding \
+ filtering_video \
+ filtering_audio \
+ metadata \
+ muxing \
+ remuxing \
+ resampling_audio \
+ scaling_video \
+ transcode_aac \
+
+OBJS=$(addsuffix .o,$(EXAMPLES))
+
+# the following examples make explicit use of the math library
+avcodec: LDLIBS += -lm
+muxing: LDLIBS += -lm
+resampling_audio: LDLIBS += -lm
+
+.phony: all clean-test clean
+
+all: $(OBJS) $(EXAMPLES)
+
+clean-test:
+ $(RM) test*.pgm test.h264 test.mp2 test.sw test.mpg
+
+clean: clean-test
+ $(RM) $(EXAMPLES) $(OBJS)
--- /dev/null
+FFmpeg examples README
+----------------------
+
+Both following use cases rely on pkg-config and make, thus make sure
+that you have them installed and working on your system.
+
+
+Method 1: build the installed examples in a generic read/write user directory
+
+Copy to a read/write user directory and just use "make", it will link
+to the libraries on your system, assuming the PKG_CONFIG_PATH is
+correctly configured.
+
+Method 2: build the examples in-tree
+
+Assuming you are in the source FFmpeg checkout directory, you need to build
+FFmpeg (no need to make install in any prefix). Then just run "make examples".
+This will build the examples using the FFmpeg build system. You can clean those
+examples using "make examplesclean"
+
+If you want to try the dedicated Makefile examples (to emulate the first
+method), go into doc/examples and run a command such as
+PKG_CONFIG_PATH=pc-uninstalled make.
--- /dev/null
+/*
+ * Copyright (c) 2001 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * libavcodec API use example.
+ *
+ * @example avcodec.c
+ * Note that libavcodec only handles codecs (mpeg, mpeg4, etc...),
+ * not file formats (avi, vob, mp4, mov, mkv, mxf, flv, mpegts, mpegps, etc...). See library 'libavformat' for the
+ * format handling
+ */
+
+#include <math.h>
+
+#include <libavutil/opt.h>
+#include <libavcodec/avcodec.h>
+#include <libavutil/channel_layout.h>
+#include <libavutil/common.h>
+#include <libavutil/imgutils.h>
+#include <libavutil/mathematics.h>
+#include <libavutil/samplefmt.h>
+
+#define INBUF_SIZE 4096
+#define AUDIO_INBUF_SIZE 20480
+#define AUDIO_REFILL_THRESH 4096
+
+/* check that a given sample format is supported by the encoder */
+static int check_sample_fmt(AVCodec *codec, enum AVSampleFormat sample_fmt)
+{
+ const enum AVSampleFormat *p = codec->sample_fmts;
+
+ while (*p != AV_SAMPLE_FMT_NONE) {
+ if (*p == sample_fmt)
+ return 1;
+ p++;
+ }
+ return 0;
+}
+
+/* just pick the highest supported samplerate */
+static int select_sample_rate(AVCodec *codec)
+{
+ const int *p;
+ int best_samplerate = 0;
+
+ if (!codec->supported_samplerates)
+ return 44100;
+
+ p = codec->supported_samplerates;
+ while (*p) {
+ best_samplerate = FFMAX(*p, best_samplerate);
+ p++;
+ }
+ return best_samplerate;
+}
+
+/* select layout with the highest channel count */
+static int select_channel_layout(AVCodec *codec)
+{
+ const uint64_t *p;
+ uint64_t best_ch_layout = 0;
+ int best_nb_channels = 0;
+
+ if (!codec->channel_layouts)
+ return AV_CH_LAYOUT_STEREO;
+
+ p = codec->channel_layouts;
+ while (*p) {
+ int nb_channels = av_get_channel_layout_nb_channels(*p);
+
+ if (nb_channels > best_nb_channels) {
+ best_ch_layout = *p;
+ best_nb_channels = nb_channels;
+ }
+ p++;
+ }
+ return best_ch_layout;
+}
+
+/*
+ * Audio encoding example
+ */
+static void audio_encode_example(const char *filename)
+{
+ AVCodec *codec;
+ AVCodecContext *c= NULL;
+ AVFrame *frame;
+ AVPacket pkt;
+ int i, j, k, ret, got_output;
+ int buffer_size;
+ FILE *f;
+ uint16_t *samples;
+ float t, tincr;
+
+ printf("Encode audio file %s\n", filename);
+
+ /* find the MP2 encoder */
+ codec = avcodec_find_encoder(AV_CODEC_ID_MP2);
+ if (!codec) {
+ fprintf(stderr, "Codec not found\n");
+ exit(1);
+ }
+
+ c = avcodec_alloc_context3(codec);
+ if (!c) {
+ fprintf(stderr, "Could not allocate audio codec context\n");
+ exit(1);
+ }
+
+ /* put sample parameters */
+ c->bit_rate = 64000;
+
+ /* check that the encoder supports s16 pcm input */
+ c->sample_fmt = AV_SAMPLE_FMT_S16;
+ if (!check_sample_fmt(codec, c->sample_fmt)) {
+ fprintf(stderr, "Encoder does not support sample format %s",
+ av_get_sample_fmt_name(c->sample_fmt));
+ exit(1);
+ }
+
+ /* select other audio parameters supported by the encoder */
+ c->sample_rate = select_sample_rate(codec);
+ c->channel_layout = select_channel_layout(codec);
+ c->channels = av_get_channel_layout_nb_channels(c->channel_layout);
+
+ /* open it */
+ if (avcodec_open2(c, codec, NULL) < 0) {
+ fprintf(stderr, "Could not open codec\n");
+ exit(1);
+ }
+
+ f = fopen(filename, "wb");
+ if (!f) {
+ fprintf(stderr, "Could not open %s\n", filename);
+ exit(1);
+ }
+
+ /* frame containing input raw audio */
+ frame = av_frame_alloc();
+ if (!frame) {
+ fprintf(stderr, "Could not allocate audio frame\n");
+ exit(1);
+ }
+
+ frame->nb_samples = c->frame_size;
+ frame->format = c->sample_fmt;
+ frame->channel_layout = c->channel_layout;
+
+ /* the codec gives us the frame size, in samples,
+ * we calculate the size of the samples buffer in bytes */
+ buffer_size = av_samples_get_buffer_size(NULL, c->channels, c->frame_size,
+ c->sample_fmt, 0);
+ if (buffer_size < 0) {
+ fprintf(stderr, "Could not get sample buffer size\n");
+ exit(1);
+ }
+ samples = av_malloc(buffer_size);
+ if (!samples) {
+ fprintf(stderr, "Could not allocate %d bytes for samples buffer\n",
+ buffer_size);
+ exit(1);
+ }
+ /* setup the data pointers in the AVFrame */
+ ret = avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt,
+ (const uint8_t*)samples, buffer_size, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Could not setup audio frame\n");
+ exit(1);
+ }
+
+ /* encode a single tone sound */
+ t = 0;
+ tincr = 2 * M_PI * 440.0 / c->sample_rate;
+ for (i = 0; i < 200; i++) {
+ av_init_packet(&pkt);
+ pkt.data = NULL; // packet data will be allocated by the encoder
+ pkt.size = 0;
+
+ for (j = 0; j < c->frame_size; j++) {
+ samples[2*j] = (int)(sin(t) * 10000);
+
+ for (k = 1; k < c->channels; k++)
+ samples[2*j + k] = samples[2*j];
+ t += tincr;
+ }
+ /* encode the samples */
+ ret = avcodec_encode_audio2(c, &pkt, frame, &got_output);
+ if (ret < 0) {
+ fprintf(stderr, "Error encoding audio frame\n");
+ exit(1);
+ }
+ if (got_output) {
+ fwrite(pkt.data, 1, pkt.size, f);
+ av_free_packet(&pkt);
+ }
+ }
+
+ /* get the delayed frames */
+ for (got_output = 1; got_output; i++) {
+ ret = avcodec_encode_audio2(c, &pkt, NULL, &got_output);
+ if (ret < 0) {
+ fprintf(stderr, "Error encoding frame\n");
+ exit(1);
+ }
+
+ if (got_output) {
+ fwrite(pkt.data, 1, pkt.size, f);
+ av_free_packet(&pkt);
+ }
+ }
+ fclose(f);
+
+ av_freep(&samples);
+ av_frame_free(&frame);
+ avcodec_close(c);
+ av_free(c);
+}
+
+/*
+ * Audio decoding.
+ */
+static void audio_decode_example(const char *outfilename, const char *filename)
+{
+ AVCodec *codec;
+ AVCodecContext *c= NULL;
+ int len;
+ FILE *f, *outfile;
+ uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
+ AVPacket avpkt;
+ AVFrame *decoded_frame = NULL;
+
+ av_init_packet(&avpkt);
+
+ printf("Decode audio file %s to %s\n", filename, outfilename);
+
+ /* find the mpeg audio decoder */
+ codec = avcodec_find_decoder(AV_CODEC_ID_MP2);
+ if (!codec) {
+ fprintf(stderr, "Codec not found\n");
+ exit(1);
+ }
+
+ c = avcodec_alloc_context3(codec);
+ if (!c) {
+ fprintf(stderr, "Could not allocate audio codec context\n");
+ exit(1);
+ }
+
+ /* open it */
+ if (avcodec_open2(c, codec, NULL) < 0) {
+ fprintf(stderr, "Could not open codec\n");
+ exit(1);
+ }
+
+ f = fopen(filename, "rb");
+ if (!f) {
+ fprintf(stderr, "Could not open %s\n", filename);
+ exit(1);
+ }
+ outfile = fopen(outfilename, "wb");
+ if (!outfile) {
+ av_free(c);
+ exit(1);
+ }
+
+ /* decode until eof */
+ avpkt.data = inbuf;
+ avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, f);
+
+ while (avpkt.size > 0) {
+ int got_frame = 0;
+
+ if (!decoded_frame) {
+ if (!(decoded_frame = av_frame_alloc())) {
+ fprintf(stderr, "Could not allocate audio frame\n");
+ exit(1);
+ }
+ }
+
+ len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
+ if (len < 0) {
+ fprintf(stderr, "Error while decoding\n");
+ exit(1);
+ }
+ if (got_frame) {
+ /* if a frame has been decoded, output it */
+ int data_size = av_samples_get_buffer_size(NULL, c->channels,
+ decoded_frame->nb_samples,
+ c->sample_fmt, 1);
+ if (data_size < 0) {
+ /* This should not occur, checking just for paranoia */
+ fprintf(stderr, "Failed to calculate data size\n");
+ exit(1);
+ }
+ fwrite(decoded_frame->data[0], 1, data_size, outfile);
+ }
+ avpkt.size -= len;
+ avpkt.data += len;
+ avpkt.dts =
+ avpkt.pts = AV_NOPTS_VALUE;
+ if (avpkt.size < AUDIO_REFILL_THRESH) {
+ /* Refill the input buffer, to avoid trying to decode
+ * incomplete frames. Instead of this, one could also use
+ * a parser, or use a proper container format through
+ * libavformat. */
+ memmove(inbuf, avpkt.data, avpkt.size);
+ avpkt.data = inbuf;
+ len = fread(avpkt.data + avpkt.size, 1,
+ AUDIO_INBUF_SIZE - avpkt.size, f);
+ if (len > 0)
+ avpkt.size += len;
+ }
+ }
+
+ fclose(outfile);
+ fclose(f);
+
+ avcodec_close(c);
+ av_free(c);
+ av_frame_free(&decoded_frame);
+}
+
+/*
+ * Video encoding example
+ */
+static void video_encode_example(const char *filename, int codec_id)
+{
+ AVCodec *codec;
+ AVCodecContext *c= NULL;
+ int i, ret, x, y, got_output;
+ FILE *f;
+ AVFrame *frame;
+ AVPacket pkt;
+ uint8_t endcode[] = { 0, 0, 1, 0xb7 };
+
+ printf("Encode video file %s\n", filename);
+
+ /* find the mpeg1 video encoder */
+ codec = avcodec_find_encoder(codec_id);
+ if (!codec) {
+ fprintf(stderr, "Codec not found\n");
+ exit(1);
+ }
+
+ c = avcodec_alloc_context3(codec);
+ if (!c) {
+ fprintf(stderr, "Could not allocate video codec context\n");
+ exit(1);
+ }
+
+ /* put sample parameters */
+ c->bit_rate = 400000;
+ /* resolution must be a multiple of two */
+ c->width = 352;
+ c->height = 288;
+ /* frames per second */
+ c->time_base = (AVRational){1,25};
+ c->gop_size = 10; /* emit one intra frame every ten frames */
+ c->max_b_frames = 1;
+ c->pix_fmt = AV_PIX_FMT_YUV420P;
+
+ if (codec_id == AV_CODEC_ID_H264)
+ av_opt_set(c->priv_data, "preset", "slow", 0);
+
+ /* open it */
+ if (avcodec_open2(c, codec, NULL) < 0) {
+ fprintf(stderr, "Could not open codec\n");
+ exit(1);
+ }
+
+ f = fopen(filename, "wb");
+ if (!f) {
+ fprintf(stderr, "Could not open %s\n", filename);
+ exit(1);
+ }
+
+ frame = av_frame_alloc();
+ if (!frame) {
+ fprintf(stderr, "Could not allocate video frame\n");
+ exit(1);
+ }
+ frame->format = c->pix_fmt;
+ frame->width = c->width;
+ frame->height = c->height;
+
+ /* the image can be allocated by any means and av_image_alloc() is
+ * just the most convenient way if av_malloc() is to be used */
+ ret = av_image_alloc(frame->data, frame->linesize, c->width, c->height,
+ c->pix_fmt, 32);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate raw picture buffer\n");
+ exit(1);
+ }
+
+ /* encode 1 second of video */
+ for (i = 0; i < 25; i++) {
+ av_init_packet(&pkt);
+ pkt.data = NULL; // packet data will be allocated by the encoder
+ pkt.size = 0;
+
+ fflush(stdout);
+ /* prepare a dummy image */
+ /* Y */
+ for (y = 0; y < c->height; y++) {
+ for (x = 0; x < c->width; x++) {
+ frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3;
+ }
+ }
+
+ /* Cb and Cr */
+ for (y = 0; y < c->height/2; y++) {
+ for (x = 0; x < c->width/2; x++) {
+ frame->data[1][y * frame->linesize[1] + x] = 128 + y + i * 2;
+ frame->data[2][y * frame->linesize[2] + x] = 64 + x + i * 5;
+ }
+ }
+
+ frame->pts = i;
+
+ /* encode the image */
+ ret = avcodec_encode_video2(c, &pkt, frame, &got_output);
+ if (ret < 0) {
+ fprintf(stderr, "Error encoding frame\n");
+ exit(1);
+ }
+
+ if (got_output) {
+ printf("Write frame %3d (size=%5d)\n", i, pkt.size);
+ fwrite(pkt.data, 1, pkt.size, f);
+ av_free_packet(&pkt);
+ }
+ }
+
+ /* get the delayed frames */
+ for (got_output = 1; got_output; i++) {
+ fflush(stdout);
+
+ ret = avcodec_encode_video2(c, &pkt, NULL, &got_output);
+ if (ret < 0) {
+ fprintf(stderr, "Error encoding frame\n");
+ exit(1);
+ }
+
+ if (got_output) {
+ printf("Write frame %3d (size=%5d)\n", i, pkt.size);
+ fwrite(pkt.data, 1, pkt.size, f);
+ av_free_packet(&pkt);
+ }
+ }
+
+ /* add sequence end code to have a real mpeg file */
+ fwrite(endcode, 1, sizeof(endcode), f);
+ fclose(f);
+
+ avcodec_close(c);
+ av_free(c);
+ av_freep(&frame->data[0]);
+ av_frame_free(&frame);
+ printf("\n");
+}
+
+/*
+ * Video decoding example
+ */
+
+static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
+ char *filename)
+{
+ FILE *f;
+ int i;
+
+ f = fopen(filename,"w");
+ fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);
+ for (i = 0; i < ysize; i++)
+ fwrite(buf + i * wrap, 1, xsize, f);
+ fclose(f);
+}
+
+static int decode_write_frame(const char *outfilename, AVCodecContext *avctx,
+ AVFrame *frame, int *frame_count, AVPacket *pkt, int last)
+{
+ int len, got_frame;
+ char buf[1024];
+
+ len = avcodec_decode_video2(avctx, frame, &got_frame, pkt);
+ if (len < 0) {
+ fprintf(stderr, "Error while decoding frame %d\n", *frame_count);
+ return len;
+ }
+ if (got_frame) {
+ printf("Saving %sframe %3d\n", last ? "last " : "", *frame_count);
+ fflush(stdout);
+
+ /* the picture is allocated by the decoder, no need to free it */
+ snprintf(buf, sizeof(buf), outfilename, *frame_count);
+ pgm_save(frame->data[0], frame->linesize[0],
+ avctx->width, avctx->height, buf);
+ (*frame_count)++;
+ }
+ if (pkt->data) {
+ pkt->size -= len;
+ pkt->data += len;
+ }
+ return 0;
+}
+
+static void video_decode_example(const char *outfilename, const char *filename)
+{
+ AVCodec *codec;
+ AVCodecContext *c= NULL;
+ int frame_count;
+ FILE *f;
+ AVFrame *frame;
+ uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
+ AVPacket avpkt;
+
+ av_init_packet(&avpkt);
+
+ /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
+ memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+
+ printf("Decode video file %s to %s\n", filename, outfilename);
+
+ /* find the mpeg1 video decoder */
+ codec = avcodec_find_decoder(AV_CODEC_ID_MPEG1VIDEO);
+ if (!codec) {
+ fprintf(stderr, "Codec not found\n");
+ exit(1);
+ }
+
+ c = avcodec_alloc_context3(codec);
+ if (!c) {
+ fprintf(stderr, "Could not allocate video codec context\n");
+ exit(1);
+ }
+
+ if(codec->capabilities&CODEC_CAP_TRUNCATED)
+ c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */
+
+ /* For some codecs, such as msmpeg4 and mpeg4, width and height
+ MUST be initialized there because this information is not
+ available in the bitstream. */
+
+ /* open it */
+ if (avcodec_open2(c, codec, NULL) < 0) {
+ fprintf(stderr, "Could not open codec\n");
+ exit(1);
+ }
+
+ f = fopen(filename, "rb");
+ if (!f) {
+ fprintf(stderr, "Could not open %s\n", filename);
+ exit(1);
+ }
+
+ frame = av_frame_alloc();
+ if (!frame) {
+ fprintf(stderr, "Could not allocate video frame\n");
+ exit(1);
+ }
+
+ frame_count = 0;
+ for (;;) {
+ avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
+ if (avpkt.size == 0)
+ break;
+
+ /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
+ and this is the only method to use them because you cannot
+ know the compressed data size before analysing it.
+
+ BUT some other codecs (msmpeg4, mpeg4) are inherently frame
+ based, so you must call them with all the data for one
+ frame exactly. You must also initialize 'width' and
+ 'height' before initializing them. */
+
+ /* NOTE2: some codecs allow the raw parameters (frame size,
+ sample rate) to be changed at any frame. We handle this, so
+ you should also take care of it */
+
+ /* here, we use a stream based decoder (mpeg1video), so we
+ feed decoder and see if it could decode a frame */
+ avpkt.data = inbuf;
+ while (avpkt.size > 0)
+ if (decode_write_frame(outfilename, c, frame, &frame_count, &avpkt, 0) < 0)
+ exit(1);
+ }
+
+ /* some codecs, such as MPEG, transmit the I and P frame with a
+ latency of one frame. You must do the following to have a
+ chance to get the last frame of the video */
+ avpkt.data = NULL;
+ avpkt.size = 0;
+ decode_write_frame(outfilename, c, frame, &frame_count, &avpkt, 1);
+
+ fclose(f);
+
+ avcodec_close(c);
+ av_free(c);
+ av_frame_free(&frame);
+ printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+ const char *output_type;
+
+ /* register all the codecs */
+ avcodec_register_all();
+
+ if (argc < 2) {
+ printf("usage: %s output_type\n"
+ "API example program to decode/encode a media stream with libavcodec.\n"
+ "This program generates a synthetic stream and encodes it to a file\n"
+ "named test.h264, test.mp2 or test.mpg depending on output_type.\n"
+ "The encoded stream is then decoded and written to a raw data output.\n"
+ "output_type must be choosen between 'h264', 'mp2', 'mpg'.\n",
+ argv[0]);
+ return 1;
+ }
+ output_type = argv[1];
+
+ if (!strcmp(output_type, "h264")) {
+ video_encode_example("test.h264", AV_CODEC_ID_H264);
+ } else if (!strcmp(output_type, "mp2")) {
+ audio_encode_example("test.mp2");
+ audio_decode_example("test.sw", "test.mp2");
+ } else if (!strcmp(output_type, "mpg")) {
+ video_encode_example("test.mpg", AV_CODEC_ID_MPEG1VIDEO);
+ video_decode_example("test%02d.pgm", "test.mpg");
+ } else {
+ fprintf(stderr, "Invalid output type '%s', choose between 'h264', 'mp2', or 'mpg'\n",
+ output_type);
+ return 1;
+ }
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2014 Stefano Sabatini
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * libavformat AVIOContext API example.
+ *
+ * Make libavformat demuxer access media content through a custom
+ * AVIOContext read callback.
+ * @example avio_reading.c
+ */
+
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libavformat/avio.h>
+#include <libavutil/file.h>
+
+struct buffer_data {
+ uint8_t *ptr;
+ size_t size; ///< size left in the buffer
+};
+
+static int read_packet(void *opaque, uint8_t *buf, int buf_size)
+{
+ struct buffer_data *bd = (struct buffer_data *)opaque;
+ buf_size = FFMIN(buf_size, bd->size);
+
+ printf("ptr:%p size:%zu\n", bd->ptr, bd->size);
+
+ /* copy internal buffer data to buf */
+ memcpy(buf, bd->ptr, buf_size);
+ bd->ptr += buf_size;
+ bd->size -= buf_size;
+
+ return buf_size;
+}
+
+int main(int argc, char *argv[])
+{
+ AVFormatContext *fmt_ctx = NULL;
+ AVIOContext *avio_ctx = NULL;
+ uint8_t *buffer = NULL, *avio_ctx_buffer = NULL;
+ size_t buffer_size, avio_ctx_buffer_size = 4096;
+ char *input_filename = NULL;
+ int ret = 0;
+ struct buffer_data bd = { 0 };
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s input_file\n"
+ "API example program to show how to read from a custom buffer "
+ "accessed through AVIOContext.\n", argv[0]);
+ return 1;
+ }
+ input_filename = argv[1];
+
+ /* register codecs and formats and other lavf/lavc components*/
+ av_register_all();
+
+ /* slurp file content into buffer */
+ ret = av_file_map(input_filename, &buffer, &buffer_size, 0, NULL);
+ if (ret < 0)
+ goto end;
+
+ /* fill opaque structure used by the AVIOContext read callback */
+ bd.ptr = buffer;
+ bd.size = buffer_size;
+
+ if (!(fmt_ctx = avformat_alloc_context())) {
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+
+ avio_ctx_buffer = av_malloc(avio_ctx_buffer_size);
+ if (!avio_ctx_buffer) {
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+ avio_ctx = avio_alloc_context(avio_ctx_buffer, avio_ctx_buffer_size,
+ 0, &bd, &read_packet, NULL, NULL);
+ if (!avio_ctx) {
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+ fmt_ctx->pb = avio_ctx;
+
+ ret = avformat_open_input(&fmt_ctx, NULL, NULL, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Could not open input\n");
+ goto end;
+ }
+
+ ret = avformat_find_stream_info(fmt_ctx, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Could not find stream information\n");
+ goto end;
+ }
+
+ av_dump_format(fmt_ctx, 0, input_filename, 0);
+
+end:
+ avformat_close_input(&fmt_ctx);
+ /* note: the internal buffer could have changed, and be != avio_ctx_buffer */
+ if (avio_ctx) {
+ av_freep(&avio_ctx->buffer);
+ av_freep(&avio_ctx);
+ }
+ av_file_unmap(buffer, buffer_size);
+
+ if (ret < 0) {
+ fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
+ return 1;
+ }
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2012 Stefano Sabatini
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * Demuxing and decoding example.
+ *
+ * Show how to use the libavformat and libavcodec API to demux and
+ * decode audio and video data.
+ * @example demuxing_decoding.c
+ */
+
+#include <libavutil/imgutils.h>
+#include <libavutil/samplefmt.h>
+#include <libavutil/timestamp.h>
+#include <libavformat/avformat.h>
+
+static AVFormatContext *fmt_ctx = NULL;
+static AVCodecContext *video_dec_ctx = NULL, *audio_dec_ctx;
+static AVStream *video_stream = NULL, *audio_stream = NULL;
+static const char *src_filename = NULL;
+static const char *video_dst_filename = NULL;
+static const char *audio_dst_filename = NULL;
+static FILE *video_dst_file = NULL;
+static FILE *audio_dst_file = NULL;
+
+static uint8_t *video_dst_data[4] = {NULL};
+static int video_dst_linesize[4];
+static int video_dst_bufsize;
+
+static int video_stream_idx = -1, audio_stream_idx = -1;
+static AVFrame *frame = NULL;
+static AVPacket pkt;
+static int video_frame_count = 0;
+static int audio_frame_count = 0;
+
+/* The different ways of decoding and managing data memory. You are not
+ * supposed to support all the modes in your application but pick the one most
+ * appropriate to your needs. Look for the use of api_mode in this example to
+ * see what are the differences of API usage between them */
+enum {
+ API_MODE_OLD = 0, /* old method, deprecated */
+ API_MODE_NEW_API_REF_COUNT = 1, /* new method, using the frame reference counting */
+ API_MODE_NEW_API_NO_REF_COUNT = 2, /* new method, without reference counting */
+};
+
+static int api_mode = API_MODE_OLD;
+
+static int decode_packet(int *got_frame, int cached)
+{
+ int ret = 0;
+ int decoded = pkt.size;
+
+ *got_frame = 0;
+
+ if (pkt.stream_index == video_stream_idx) {
+ /* decode video frame */
+ ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
+ if (ret < 0) {
+ fprintf(stderr, "Error decoding video frame (%s)\n", av_err2str(ret));
+ return ret;
+ }
+
+ if (*got_frame) {
+ printf("video_frame%s n:%d coded_n:%d pts:%s\n",
+ cached ? "(cached)" : "",
+ video_frame_count++, frame->coded_picture_number,
+ av_ts2timestr(frame->pts, &video_dec_ctx->time_base));
+
+ /* copy decoded frame to destination buffer:
+ * this is required since rawvideo expects non aligned data */
+ av_image_copy(video_dst_data, video_dst_linesize,
+ (const uint8_t **)(frame->data), frame->linesize,
+ video_dec_ctx->pix_fmt, video_dec_ctx->width, video_dec_ctx->height);
+
+ /* write to rawvideo file */
+ fwrite(video_dst_data[0], 1, video_dst_bufsize, video_dst_file);
+ }
+ } else if (pkt.stream_index == audio_stream_idx) {
+ /* decode audio frame */
+ ret = avcodec_decode_audio4(audio_dec_ctx, frame, got_frame, &pkt);
+ if (ret < 0) {
+ fprintf(stderr, "Error decoding audio frame (%s)\n", av_err2str(ret));
+ return ret;
+ }
+ /* Some audio decoders decode only part of the packet, and have to be
+ * called again with the remainder of the packet data.
+ * Sample: fate-suite/lossless-audio/luckynight-partial.shn
+ * Also, some decoders might over-read the packet. */
+ decoded = FFMIN(ret, pkt.size);
+
+ if (*got_frame) {
+ size_t unpadded_linesize = frame->nb_samples * av_get_bytes_per_sample(frame->format);
+ printf("audio_frame%s n:%d nb_samples:%d pts:%s\n",
+ cached ? "(cached)" : "",
+ audio_frame_count++, frame->nb_samples,
+ av_ts2timestr(frame->pts, &audio_dec_ctx->time_base));
+
+ /* Write the raw audio data samples of the first plane. This works
+ * fine for packed formats (e.g. AV_SAMPLE_FMT_S16). However,
+ * most audio decoders output planar audio, which uses a separate
+ * plane of audio samples for each channel (e.g. AV_SAMPLE_FMT_S16P).
+ * In other words, this code will write only the first audio channel
+ * in these cases.
+ * You should use libswresample or libavfilter to convert the frame
+ * to packed data. */
+ fwrite(frame->extended_data[0], 1, unpadded_linesize, audio_dst_file);
+ }
+ }
+
+ /* If we use the new API with reference counting, we own the data and need
+ * to de-reference it when we don't use it anymore */
+ if (*got_frame && api_mode == API_MODE_NEW_API_REF_COUNT)
+ av_frame_unref(frame);
+
+ return decoded;
+}
+
+static int open_codec_context(int *stream_idx,
+ AVFormatContext *fmt_ctx, enum AVMediaType type)
+{
+ int ret;
+ AVStream *st;
+ AVCodecContext *dec_ctx = NULL;
+ AVCodec *dec = NULL;
+ AVDictionary *opts = NULL;
+
+ ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Could not find %s stream in input file '%s'\n",
+ av_get_media_type_string(type), src_filename);
+ return ret;
+ } else {
+ *stream_idx = ret;
+ st = fmt_ctx->streams[*stream_idx];
+
+ /* find decoder for the stream */
+ dec_ctx = st->codec;
+ dec = avcodec_find_decoder(dec_ctx->codec_id);
+ if (!dec) {
+ fprintf(stderr, "Failed to find %s codec\n",
+ av_get_media_type_string(type));
+ return AVERROR(EINVAL);
+ }
+
+ /* Init the decoders, with or without reference counting */
+ if (api_mode == API_MODE_NEW_API_REF_COUNT)
+ av_dict_set(&opts, "refcounted_frames", "1", 0);
+ if ((ret = avcodec_open2(dec_ctx, dec, &opts)) < 0) {
+ fprintf(stderr, "Failed to open %s codec\n",
+ av_get_media_type_string(type));
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int get_format_from_sample_fmt(const char **fmt,
+ enum AVSampleFormat sample_fmt)
+{
+ int i;
+ struct sample_fmt_entry {
+ enum AVSampleFormat sample_fmt; const char *fmt_be, *fmt_le;
+ } sample_fmt_entries[] = {
+ { AV_SAMPLE_FMT_U8, "u8", "u8" },
+ { AV_SAMPLE_FMT_S16, "s16be", "s16le" },
+ { AV_SAMPLE_FMT_S32, "s32be", "s32le" },
+ { AV_SAMPLE_FMT_FLT, "f32be", "f32le" },
+ { AV_SAMPLE_FMT_DBL, "f64be", "f64le" },
+ };
+ *fmt = NULL;
+
+ for (i = 0; i < FF_ARRAY_ELEMS(sample_fmt_entries); i++) {
+ struct sample_fmt_entry *entry = &sample_fmt_entries[i];
+ if (sample_fmt == entry->sample_fmt) {
+ *fmt = AV_NE(entry->fmt_be, entry->fmt_le);
+ return 0;
+ }
+ }
+
+ fprintf(stderr,
+ "sample format %s is not supported as output format\n",
+ av_get_sample_fmt_name(sample_fmt));
+ return -1;
+}
+
+int main (int argc, char **argv)
+{
+ int ret = 0, got_frame;
+
+ if (argc != 4 && argc != 5) {
+ fprintf(stderr, "usage: %s [-refcount=<old|new_norefcount|new_refcount>] "
+ "input_file video_output_file audio_output_file\n"
+ "API example program to show how to read frames from an input file.\n"
+ "This program reads frames from a file, decodes them, and writes decoded\n"
+ "video frames to a rawvideo file named video_output_file, and decoded\n"
+ "audio frames to a rawaudio file named audio_output_file.\n\n"
+ "If the -refcount option is specified, the program use the\n"
+ "reference counting frame system which allows keeping a copy of\n"
+ "the data for longer than one decode call. If unset, it's using\n"
+ "the classic old method.\n"
+ "\n", argv[0]);
+ exit(1);
+ }
+ if (argc == 5) {
+ const char *mode = argv[1] + strlen("-refcount=");
+ if (!strcmp(mode, "old")) api_mode = API_MODE_OLD;
+ else if (!strcmp(mode, "new_norefcount")) api_mode = API_MODE_NEW_API_NO_REF_COUNT;
+ else if (!strcmp(mode, "new_refcount")) api_mode = API_MODE_NEW_API_REF_COUNT;
+ else {
+ fprintf(stderr, "unknow mode '%s'\n", mode);
+ exit(1);
+ }
+ argv++;
+ }
+ src_filename = argv[1];
+ video_dst_filename = argv[2];
+ audio_dst_filename = argv[3];
+
+ /* register all formats and codecs */
+ av_register_all();
+
+ /* open input file, and allocate format context */
+ if (avformat_open_input(&fmt_ctx, src_filename, NULL, NULL) < 0) {
+ fprintf(stderr, "Could not open source file %s\n", src_filename);
+ exit(1);
+ }
+
+ /* retrieve stream information */
+ if (avformat_find_stream_info(fmt_ctx, NULL) < 0) {
+ fprintf(stderr, "Could not find stream information\n");
+ exit(1);
+ }
+
+ if (open_codec_context(&video_stream_idx, fmt_ctx, AVMEDIA_TYPE_VIDEO) >= 0) {
+ video_stream = fmt_ctx->streams[video_stream_idx];
+ video_dec_ctx = video_stream->codec;
+
+ video_dst_file = fopen(video_dst_filename, "wb");
+ if (!video_dst_file) {
+ fprintf(stderr, "Could not open destination file %s\n", video_dst_filename);
+ ret = 1;
+ goto end;
+ }
+
+ /* allocate image where the decoded image will be put */
+ ret = av_image_alloc(video_dst_data, video_dst_linesize,
+ video_dec_ctx->width, video_dec_ctx->height,
+ video_dec_ctx->pix_fmt, 1);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate raw video buffer\n");
+ goto end;
+ }
+ video_dst_bufsize = ret;
+ }
+
+ if (open_codec_context(&audio_stream_idx, fmt_ctx, AVMEDIA_TYPE_AUDIO) >= 0) {
+ audio_stream = fmt_ctx->streams[audio_stream_idx];
+ audio_dec_ctx = audio_stream->codec;
+ audio_dst_file = fopen(audio_dst_filename, "wb");
+ if (!audio_dst_file) {
+ fprintf(stderr, "Could not open destination file %s\n", video_dst_filename);
+ ret = 1;
+ goto end;
+ }
+ }
+
+ /* dump input information to stderr */
+ av_dump_format(fmt_ctx, 0, src_filename, 0);
+
+ if (!audio_stream && !video_stream) {
+ fprintf(stderr, "Could not find audio or video stream in the input, aborting\n");
+ ret = 1;
+ goto end;
+ }
+
+ /* When using the new API, you need to use the libavutil/frame.h API, while
+ * the classic frame management is available in libavcodec */
+ if (api_mode == API_MODE_OLD)
+ frame = avcodec_alloc_frame();
+ else
+ frame = av_frame_alloc();
+ if (!frame) {
+ fprintf(stderr, "Could not allocate frame\n");
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+
+ /* initialize packet, set data to NULL, let the demuxer fill it */
+ av_init_packet(&pkt);
+ pkt.data = NULL;
+ pkt.size = 0;
+
+ if (video_stream)
+ printf("Demuxing video from file '%s' into '%s'\n", src_filename, video_dst_filename);
+ if (audio_stream)
+ printf("Demuxing audio from file '%s' into '%s'\n", src_filename, audio_dst_filename);
+
+ /* read frames from the file */
+ while (av_read_frame(fmt_ctx, &pkt) >= 0) {
+ AVPacket orig_pkt = pkt;
+ do {
+ ret = decode_packet(&got_frame, 0);
+ if (ret < 0)
+ break;
+ pkt.data += ret;
+ pkt.size -= ret;
+ } while (pkt.size > 0);
+ av_free_packet(&orig_pkt);
+ }
+
+ /* flush cached frames */
+ pkt.data = NULL;
+ pkt.size = 0;
+ do {
+ decode_packet(&got_frame, 1);
+ } while (got_frame);
+
+ printf("Demuxing succeeded.\n");
+
+ if (video_stream) {
+ printf("Play the output video file with the command:\n"
+ "ffplay -f rawvideo -pix_fmt %s -video_size %dx%d %s\n",
+ av_get_pix_fmt_name(video_dec_ctx->pix_fmt), video_dec_ctx->width, video_dec_ctx->height,
+ video_dst_filename);
+ }
+
+ if (audio_stream) {
+ enum AVSampleFormat sfmt = audio_dec_ctx->sample_fmt;
+ int n_channels = audio_dec_ctx->channels;
+ const char *fmt;
+
+ if (av_sample_fmt_is_planar(sfmt)) {
+ const char *packed = av_get_sample_fmt_name(sfmt);
+ printf("Warning: the sample format the decoder produced is planar "
+ "(%s). This example will output the first channel only.\n",
+ packed ? packed : "?");
+ sfmt = av_get_packed_sample_fmt(sfmt);
+ n_channels = 1;
+ }
+
+ if ((ret = get_format_from_sample_fmt(&fmt, sfmt)) < 0)
+ goto end;
+
+ printf("Play the output audio file with the command:\n"
+ "ffplay -f %s -ac %d -ar %d %s\n",
+ fmt, n_channels, audio_dec_ctx->sample_rate,
+ audio_dst_filename);
+ }
+
+end:
+ avcodec_close(video_dec_ctx);
+ avcodec_close(audio_dec_ctx);
+ avformat_close_input(&fmt_ctx);
+ if (video_dst_file)
+ fclose(video_dst_file);
+ if (audio_dst_file)
+ fclose(audio_dst_file);
+ if (api_mode == API_MODE_OLD)
+ avcodec_free_frame(&frame);
+ else
+ av_frame_free(&frame);
+ av_free(video_dst_data[0]);
+
+ return ret < 0;
+}
--- /dev/null
+/*
+ * copyright (c) 2013 Andrew Kelley
+ *
+ * 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
+ */
+
+/**
+ * @file
+ * libavfilter API usage example.
+ *
+ * @example filter_audio.c
+ * This example will generate a sine wave audio,
+ * pass it through a simple filter chain, and then compute the MD5 checksum of
+ * the output data.
+ *
+ * The filter chain it uses is:
+ * (input) -> abuffer -> volume -> aformat -> abuffersink -> (output)
+ *
+ * abuffer: This provides the endpoint where you can feed the decoded samples.
+ * volume: In this example we hardcode it to 0.90.
+ * aformat: This converts the samples to the samplefreq, channel layout,
+ * and sample format required by the audio device.
+ * abuffersink: This provides the endpoint where you can read the samples after
+ * they have passed through the filter chain.
+ */
+
+#include <inttypes.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "libavutil/channel_layout.h"
+#include "libavutil/md5.h"
+#include "libavutil/opt.h"
+#include "libavutil/samplefmt.h"
+
+#include "libavfilter/avfilter.h"
+#include "libavfilter/buffersink.h"
+#include "libavfilter/buffersrc.h"
+
+#define INPUT_SAMPLERATE 48000
+#define INPUT_FORMAT AV_SAMPLE_FMT_FLTP
+#define INPUT_CHANNEL_LAYOUT AV_CH_LAYOUT_5POINT0
+
+#define VOLUME_VAL 0.90
+
+static int init_filter_graph(AVFilterGraph **graph, AVFilterContext **src,
+ AVFilterContext **sink)
+{
+ AVFilterGraph *filter_graph;
+ AVFilterContext *abuffer_ctx;
+ AVFilter *abuffer;
+ AVFilterContext *volume_ctx;
+ AVFilter *volume;
+ AVFilterContext *aformat_ctx;
+ AVFilter *aformat;
+ AVFilterContext *abuffersink_ctx;
+ AVFilter *abuffersink;
+
+ AVDictionary *options_dict = NULL;
+ uint8_t options_str[1024];
+ uint8_t ch_layout[64];
+
+ int err;
+
+ /* Create a new filtergraph, which will contain all the filters. */
+ filter_graph = avfilter_graph_alloc();
+ if (!filter_graph) {
+ fprintf(stderr, "Unable to create filter graph.\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /* Create the abuffer filter;
+ * it will be used for feeding the data into the graph. */
+ abuffer = avfilter_get_by_name("abuffer");
+ if (!abuffer) {
+ fprintf(stderr, "Could not find the abuffer filter.\n");
+ return AVERROR_FILTER_NOT_FOUND;
+ }
+
+ abuffer_ctx = avfilter_graph_alloc_filter(filter_graph, abuffer, "src");
+ if (!abuffer_ctx) {
+ fprintf(stderr, "Could not allocate the abuffer instance.\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /* Set the filter options through the AVOptions API. */
+ av_get_channel_layout_string(ch_layout, sizeof(ch_layout), 0, INPUT_CHANNEL_LAYOUT);
+ av_opt_set (abuffer_ctx, "channel_layout", ch_layout, AV_OPT_SEARCH_CHILDREN);
+ av_opt_set (abuffer_ctx, "sample_fmt", av_get_sample_fmt_name(INPUT_FORMAT), AV_OPT_SEARCH_CHILDREN);
+ av_opt_set_q (abuffer_ctx, "time_base", (AVRational){ 1, INPUT_SAMPLERATE }, AV_OPT_SEARCH_CHILDREN);
+ av_opt_set_int(abuffer_ctx, "sample_rate", INPUT_SAMPLERATE, AV_OPT_SEARCH_CHILDREN);
+
+ /* Now initialize the filter; we pass NULL options, since we have already
+ * set all the options above. */
+ err = avfilter_init_str(abuffer_ctx, NULL);
+ if (err < 0) {
+ fprintf(stderr, "Could not initialize the abuffer filter.\n");
+ return err;
+ }
+
+ /* Create volume filter. */
+ volume = avfilter_get_by_name("volume");
+ if (!volume) {
+ fprintf(stderr, "Could not find the volume filter.\n");
+ return AVERROR_FILTER_NOT_FOUND;
+ }
+
+ volume_ctx = avfilter_graph_alloc_filter(filter_graph, volume, "volume");
+ if (!volume_ctx) {
+ fprintf(stderr, "Could not allocate the volume instance.\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /* A different way of passing the options is as key/value pairs in a
+ * dictionary. */
+ av_dict_set(&options_dict, "volume", AV_STRINGIFY(VOLUME_VAL), 0);
+ err = avfilter_init_dict(volume_ctx, &options_dict);
+ av_dict_free(&options_dict);
+ if (err < 0) {
+ fprintf(stderr, "Could not initialize the volume filter.\n");
+ return err;
+ }
+
+ /* Create the aformat filter;
+ * it ensures that the output is of the format we want. */
+ aformat = avfilter_get_by_name("aformat");
+ if (!aformat) {
+ fprintf(stderr, "Could not find the aformat filter.\n");
+ return AVERROR_FILTER_NOT_FOUND;
+ }
+
+ aformat_ctx = avfilter_graph_alloc_filter(filter_graph, aformat, "aformat");
+ if (!aformat_ctx) {
+ fprintf(stderr, "Could not allocate the aformat instance.\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /* A third way of passing the options is in a string of the form
+ * key1=value1:key2=value2.... */
+ snprintf(options_str, sizeof(options_str),
+ "sample_fmts=%s:sample_rates=%d:channel_layouts=0x%"PRIx64,
+ av_get_sample_fmt_name(AV_SAMPLE_FMT_S16), 44100,
+ (uint64_t)AV_CH_LAYOUT_STEREO);
+ err = avfilter_init_str(aformat_ctx, options_str);
+ if (err < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Could not initialize the aformat filter.\n");
+ return err;
+ }
+
+ /* Finally create the abuffersink filter;
+ * it will be used to get the filtered data out of the graph. */
+ abuffersink = avfilter_get_by_name("abuffersink");
+ if (!abuffersink) {
+ fprintf(stderr, "Could not find the abuffersink filter.\n");
+ return AVERROR_FILTER_NOT_FOUND;
+ }
+
+ abuffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "sink");
+ if (!abuffersink_ctx) {
+ fprintf(stderr, "Could not allocate the abuffersink instance.\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /* This filter takes no options. */
+ err = avfilter_init_str(abuffersink_ctx, NULL);
+ if (err < 0) {
+ fprintf(stderr, "Could not initialize the abuffersink instance.\n");
+ return err;
+ }
+
+ /* Connect the filters;
+ * in this simple case the filters just form a linear chain. */
+ err = avfilter_link(abuffer_ctx, 0, volume_ctx, 0);
+ if (err >= 0)
+ err = avfilter_link(volume_ctx, 0, aformat_ctx, 0);
+ if (err >= 0)
+ err = avfilter_link(aformat_ctx, 0, abuffersink_ctx, 0);
+ if (err < 0) {
+ fprintf(stderr, "Error connecting filters\n");
+ return err;
+ }
+
+ /* Configure the graph. */
+ err = avfilter_graph_config(filter_graph, NULL);
+ if (err < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Error configuring the filter graph\n");
+ return err;
+ }
+
+ *graph = filter_graph;
+ *src = abuffer_ctx;
+ *sink = abuffersink_ctx;
+
+ return 0;
+}
+
+/* Do something useful with the filtered data: this simple
+ * example just prints the MD5 checksum of each plane to stdout. */
+static int process_output(struct AVMD5 *md5, AVFrame *frame)
+{
+ int planar = av_sample_fmt_is_planar(frame->format);
+ int channels = av_get_channel_layout_nb_channels(frame->channel_layout);
+ int planes = planar ? channels : 1;
+ int bps = av_get_bytes_per_sample(frame->format);
+ int plane_size = bps * frame->nb_samples * (planar ? 1 : channels);
+ int i, j;
+
+ for (i = 0; i < planes; i++) {
+ uint8_t checksum[16];
+
+ av_md5_init(md5);
+ av_md5_sum(checksum, frame->extended_data[i], plane_size);
+
+ fprintf(stdout, "plane %d: 0x", i);
+ for (j = 0; j < sizeof(checksum); j++)
+ fprintf(stdout, "%02X", checksum[j]);
+ fprintf(stdout, "\n");
+ }
+ fprintf(stdout, "\n");
+
+ return 0;
+}
+
+/* Construct a frame of audio data to be filtered;
+ * this simple example just synthesizes a sine wave. */
+static int get_input(AVFrame *frame, int frame_num)
+{
+ int err, i, j;
+
+#define FRAME_SIZE 1024
+
+ /* Set up the frame properties and allocate the buffer for the data. */
+ frame->sample_rate = INPUT_SAMPLERATE;
+ frame->format = INPUT_FORMAT;
+ frame->channel_layout = INPUT_CHANNEL_LAYOUT;
+ frame->nb_samples = FRAME_SIZE;
+ frame->pts = frame_num * FRAME_SIZE;
+
+ err = av_frame_get_buffer(frame, 0);
+ if (err < 0)
+ return err;
+
+ /* Fill the data for each channel. */
+ for (i = 0; i < 5; i++) {
+ float *data = (float*)frame->extended_data[i];
+
+ for (j = 0; j < frame->nb_samples; j++)
+ data[j] = sin(2 * M_PI * (frame_num + j) * (i + 1) / FRAME_SIZE);
+ }
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ struct AVMD5 *md5;
+ AVFilterGraph *graph;
+ AVFilterContext *src, *sink;
+ AVFrame *frame;
+ uint8_t errstr[1024];
+ float duration;
+ int err, nb_frames, i;
+
+ if (argc < 2) {
+ fprintf(stderr, "Usage: %s <duration>\n", argv[0]);
+ return 1;
+ }
+
+ duration = atof(argv[1]);
+ nb_frames = duration * INPUT_SAMPLERATE / FRAME_SIZE;
+ if (nb_frames <= 0) {
+ fprintf(stderr, "Invalid duration: %s\n", argv[1]);
+ return 1;
+ }
+
+ avfilter_register_all();
+
+ /* Allocate the frame we will be using to store the data. */
+ frame = av_frame_alloc();
+ if (!frame) {
+ fprintf(stderr, "Error allocating the frame\n");
+ return 1;
+ }
+
+ md5 = av_md5_alloc();
+ if (!md5) {
+ fprintf(stderr, "Error allocating the MD5 context\n");
+ return 1;
+ }
+
+ /* Set up the filtergraph. */
+ err = init_filter_graph(&graph, &src, &sink);
+ if (err < 0) {
+ fprintf(stderr, "Unable to init filter graph:");
+ goto fail;
+ }
+
+ /* the main filtering loop */
+ for (i = 0; i < nb_frames; i++) {
+ /* get an input frame to be filtered */
+ err = get_input(frame, i);
+ if (err < 0) {
+ fprintf(stderr, "Error generating input frame:");
+ goto fail;
+ }
+
+ /* Send the frame to the input of the filtergraph. */
+ err = av_buffersrc_add_frame(src, frame);
+ if (err < 0) {
+ av_frame_unref(frame);
+ fprintf(stderr, "Error submitting the frame to the filtergraph:");
+ goto fail;
+ }
+
+ /* Get all the filtered output that is available. */
+ while ((err = av_buffersink_get_frame(sink, frame)) >= 0) {
+ /* now do something with our filtered frame */
+ err = process_output(md5, frame);
+ if (err < 0) {
+ fprintf(stderr, "Error processing the filtered frame:");
+ goto fail;
+ }
+ av_frame_unref(frame);
+ }
+
+ if (err == AVERROR(EAGAIN)) {
+ /* Need to feed more frames in. */
+ continue;
+ } else if (err == AVERROR_EOF) {
+ /* Nothing more to do, finish. */
+ break;
+ } else if (err < 0) {
+ /* An error occurred. */
+ fprintf(stderr, "Error filtering the data:");
+ goto fail;
+ }
+ }
+
+ avfilter_graph_free(&graph);
+ av_frame_free(&frame);
+ av_freep(&md5);
+
+ return 0;
+
+fail:
+ av_strerror(err, errstr, sizeof(errstr));
+ fprintf(stderr, "%s\n", errstr);
+ return 1;
+}
--- /dev/null
+/*
+ * Copyright (c) 2010 Nicolas George
+ * Copyright (c) 2011 Stefano Sabatini
+ * Copyright (c) 2012 Clément Bœsch
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * API example for audio decoding and filtering
+ * @example filtering_audio.c
+ */
+
+#include <unistd.h>
+
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libavfilter/avfiltergraph.h>
+#include <libavfilter/avcodec.h>
+#include <libavfilter/buffersink.h>
+#include <libavfilter/buffersrc.h>
+#include <libavutil/opt.h>
+
+static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
+static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -";
+
+static AVFormatContext *fmt_ctx;
+static AVCodecContext *dec_ctx;
+AVFilterContext *buffersink_ctx;
+AVFilterContext *buffersrc_ctx;
+AVFilterGraph *filter_graph;
+static int audio_stream_index = -1;
+
+static int open_input_file(const char *filename)
+{
+ int ret;
+ AVCodec *dec;
+
+ if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
+ return ret;
+ }
+
+ if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
+ return ret;
+ }
+
+ /* select the audio stream */
+ ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot find a audio stream in the input file\n");
+ return ret;
+ }
+ audio_stream_index = ret;
+ dec_ctx = fmt_ctx->streams[audio_stream_index]->codec;
+ av_opt_set_int(dec_ctx, "refcounted_frames", 1, 0);
+
+ /* init the audio decoder */
+ if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static int init_filters(const char *filters_descr)
+{
+ char args[512];
+ int ret = 0;
+ AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
+ AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
+ AVFilterInOut *outputs = avfilter_inout_alloc();
+ AVFilterInOut *inputs = avfilter_inout_alloc();
+ static const enum AVSampleFormat out_sample_fmts[] = { AV_SAMPLE_FMT_S16, -1 };
+ static const int64_t out_channel_layouts[] = { AV_CH_LAYOUT_MONO, -1 };
+ static const int out_sample_rates[] = { 8000, -1 };
+ const AVFilterLink *outlink;
+ AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
+
+ filter_graph = avfilter_graph_alloc();
+ if (!outputs || !inputs || !filter_graph) {
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+
+ /* buffer audio source: the decoded frames from the decoder will be inserted here. */
+ if (!dec_ctx->channel_layout)
+ dec_ctx->channel_layout = av_get_default_channel_layout(dec_ctx->channels);
+ snprintf(args, sizeof(args),
+ "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%"PRIx64,
+ time_base.num, time_base.den, dec_ctx->sample_rate,
+ av_get_sample_fmt_name(dec_ctx->sample_fmt), dec_ctx->channel_layout);
+ ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
+ args, NULL, filter_graph);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
+ goto end;
+ }
+
+ /* buffer audio sink: to terminate the filter chain. */
+ ret = avfilter_graph_create_filter(&buffersink_ctx, abuffersink, "out",
+ NULL, NULL, filter_graph);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
+ goto end;
+ }
+
+ ret = av_opt_set_int_list(buffersink_ctx, "sample_fmts", out_sample_fmts, -1,
+ AV_OPT_SEARCH_CHILDREN);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
+ goto end;
+ }
+
+ ret = av_opt_set_int_list(buffersink_ctx, "channel_layouts", out_channel_layouts, -1,
+ AV_OPT_SEARCH_CHILDREN);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
+ goto end;
+ }
+
+ ret = av_opt_set_int_list(buffersink_ctx, "sample_rates", out_sample_rates, -1,
+ AV_OPT_SEARCH_CHILDREN);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
+ goto end;
+ }
+
+ /* Endpoints for the filter graph. */
+ outputs->name = av_strdup("in");
+ outputs->filter_ctx = buffersrc_ctx;
+ outputs->pad_idx = 0;
+ outputs->next = NULL;
+
+ inputs->name = av_strdup("out");
+ inputs->filter_ctx = buffersink_ctx;
+ inputs->pad_idx = 0;
+ inputs->next = NULL;
+
+ if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
+ &inputs, &outputs, NULL)) < 0)
+ goto end;
+
+ if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
+ goto end;
+
+ /* Print summary of the sink buffer
+ * Note: args buffer is reused to store channel layout string */
+ outlink = buffersink_ctx->inputs[0];
+ av_get_channel_layout_string(args, sizeof(args), -1, outlink->channel_layout);
+ av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
+ (int)outlink->sample_rate,
+ (char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
+ args);
+
+end:
+ avfilter_inout_free(&inputs);
+ avfilter_inout_free(&outputs);
+
+ return ret;
+}
+
+static void print_frame(const AVFrame *frame)
+{
+ const int n = frame->nb_samples * av_get_channel_layout_nb_channels(av_frame_get_channel_layout(frame));
+ const uint16_t *p = (uint16_t*)frame->data[0];
+ const uint16_t *p_end = p + n;
+
+ while (p < p_end) {
+ fputc(*p & 0xff, stdout);
+ fputc(*p>>8 & 0xff, stdout);
+ p++;
+ }
+ fflush(stdout);
+}
+
+int main(int argc, char **argv)
+{
+ int ret;
+ AVPacket packet0, packet;
+ AVFrame *frame = av_frame_alloc();
+ AVFrame *filt_frame = av_frame_alloc();
+ int got_frame;
+
+ if (!frame || !filt_frame) {
+ perror("Could not allocate frame");
+ exit(1);
+ }
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
+ exit(1);
+ }
+
+ av_register_all();
+ avfilter_register_all();
+
+ if ((ret = open_input_file(argv[1])) < 0)
+ goto end;
+ if ((ret = init_filters(filter_descr)) < 0)
+ goto end;
+
+ /* read all packets */
+ packet0.data = NULL;
+ packet.data = NULL;
+ while (1) {
+ if (!packet0.data) {
+ if ((ret = av_read_frame(fmt_ctx, &packet)) < 0)
+ break;
+ packet0 = packet;
+ }
+
+ if (packet.stream_index == audio_stream_index) {
+ got_frame = 0;
+ ret = avcodec_decode_audio4(dec_ctx, frame, &got_frame, &packet);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Error decoding audio\n");
+ continue;
+ }
+ packet.size -= ret;
+ packet.data += ret;
+
+ if (got_frame) {
+ /* push the audio data from decoded frame into the filtergraph */
+ if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, 0) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
+ break;
+ }
+
+ /* pull filtered audio from the filtergraph */
+ while (1) {
+ ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
+ if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
+ break;
+ if (ret < 0)
+ goto end;
+ print_frame(filt_frame);
+ av_frame_unref(filt_frame);
+ }
+ }
+
+ if (packet.size <= 0)
+ av_free_packet(&packet0);
+ } else {
+ /* discard non-wanted packets */
+ av_free_packet(&packet0);
+ }
+ }
+end:
+ avfilter_graph_free(&filter_graph);
+ avcodec_close(dec_ctx);
+ avformat_close_input(&fmt_ctx);
+ av_frame_free(&frame);
+ av_frame_free(&filt_frame);
+
+ if (ret < 0 && ret != AVERROR_EOF) {
+ fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
+ exit(1);
+ }
+
+ exit(0);
+}
--- /dev/null
+/*
+ * Copyright (c) 2010 Nicolas George
+ * Copyright (c) 2011 Stefano Sabatini
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * API example for decoding and filtering
+ * @example filtering_video.c
+ */
+
+#define _XOPEN_SOURCE 600 /* for usleep */
+#include <unistd.h>
+
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libavfilter/avfiltergraph.h>
+#include <libavfilter/avcodec.h>
+#include <libavfilter/buffersink.h>
+#include <libavfilter/buffersrc.h>
+#include <libavutil/opt.h>
+
+const char *filter_descr = "scale=78:24";
+
+static AVFormatContext *fmt_ctx;
+static AVCodecContext *dec_ctx;
+AVFilterContext *buffersink_ctx;
+AVFilterContext *buffersrc_ctx;
+AVFilterGraph *filter_graph;
+static int video_stream_index = -1;
+static int64_t last_pts = AV_NOPTS_VALUE;
+
+static int open_input_file(const char *filename)
+{
+ int ret;
+ AVCodec *dec;
+
+ if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
+ return ret;
+ }
+
+ if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
+ return ret;
+ }
+
+ /* select the video stream */
+ ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");
+ return ret;
+ }
+ video_stream_index = ret;
+ dec_ctx = fmt_ctx->streams[video_stream_index]->codec;
+ av_opt_set_int(dec_ctx, "refcounted_frames", 1, 0);
+
+ /* init the video decoder */
+ if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static int init_filters(const char *filters_descr)
+{
+ char args[512];
+ int ret = 0;
+ AVFilter *buffersrc = avfilter_get_by_name("buffer");
+ AVFilter *buffersink = avfilter_get_by_name("buffersink");
+ AVFilterInOut *outputs = avfilter_inout_alloc();
+ AVFilterInOut *inputs = avfilter_inout_alloc();
+ enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE };
+
+ filter_graph = avfilter_graph_alloc();
+ if (!outputs || !inputs || !filter_graph) {
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+
+ /* buffer video source: the decoded frames from the decoder will be inserted here. */
+ snprintf(args, sizeof(args),
+ "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
+ dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,
+ dec_ctx->time_base.num, dec_ctx->time_base.den,
+ dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
+
+ ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in",
+ args, NULL, filter_graph);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");
+ goto end;
+ }
+
+ /* buffer video sink: to terminate the filter chain. */
+ ret = avfilter_graph_create_filter(&buffersink_ctx, buffersink, "out",
+ NULL, NULL, filter_graph);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");
+ goto end;
+ }
+
+ ret = av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts,
+ AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Cannot set output pixel format\n");
+ goto end;
+ }
+
+ /* Endpoints for the filter graph. */
+ outputs->name = av_strdup("in");
+ outputs->filter_ctx = buffersrc_ctx;
+ outputs->pad_idx = 0;
+ outputs->next = NULL;
+
+ inputs->name = av_strdup("out");
+ inputs->filter_ctx = buffersink_ctx;
+ inputs->pad_idx = 0;
+ inputs->next = NULL;
+
+ if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
+ &inputs, &outputs, NULL)) < 0)
+ goto end;
+
+ if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
+ goto end;
+
+end:
+ avfilter_inout_free(&inputs);
+ avfilter_inout_free(&outputs);
+
+ return ret;
+}
+
+static void display_frame(const AVFrame *frame, AVRational time_base)
+{
+ int x, y;
+ uint8_t *p0, *p;
+ int64_t delay;
+
+ if (frame->pts != AV_NOPTS_VALUE) {
+ if (last_pts != AV_NOPTS_VALUE) {
+ /* sleep roughly the right amount of time;
+ * usleep is in microseconds, just like AV_TIME_BASE. */
+ delay = av_rescale_q(frame->pts - last_pts,
+ time_base, AV_TIME_BASE_Q);
+ if (delay > 0 && delay < 1000000)
+ usleep(delay);
+ }
+ last_pts = frame->pts;
+ }
+
+ /* Trivial ASCII grayscale display. */
+ p0 = frame->data[0];
+ puts("\033c");
+ for (y = 0; y < frame->height; y++) {
+ p = p0;
+ for (x = 0; x < frame->width; x++)
+ putchar(" .-+#"[*(p++) / 52]);
+ putchar('\n');
+ p0 += frame->linesize[0];
+ }
+ fflush(stdout);
+}
+
+int main(int argc, char **argv)
+{
+ int ret;
+ AVPacket packet;
+ AVFrame *frame = av_frame_alloc();
+ AVFrame *filt_frame = av_frame_alloc();
+ int got_frame;
+
+ if (!frame || !filt_frame) {
+ perror("Could not allocate frame");
+ exit(1);
+ }
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s file\n", argv[0]);
+ exit(1);
+ }
+
+ av_register_all();
+ avfilter_register_all();
+
+ if ((ret = open_input_file(argv[1])) < 0)
+ goto end;
+ if ((ret = init_filters(filter_descr)) < 0)
+ goto end;
+
+ /* read all packets */
+ while (1) {
+ if ((ret = av_read_frame(fmt_ctx, &packet)) < 0)
+ break;
+
+ if (packet.stream_index == video_stream_index) {
+ got_frame = 0;
+ ret = avcodec_decode_video2(dec_ctx, frame, &got_frame, &packet);
+ if (ret < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Error decoding video\n");
+ break;
+ }
+
+ if (got_frame) {
+ frame->pts = av_frame_get_best_effort_timestamp(frame);
+
+ /* push the decoded frame into the filtergraph */
+ if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n");
+ break;
+ }
+
+ /* pull filtered frames from the filtergraph */
+ while (1) {
+ ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
+ if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
+ break;
+ if (ret < 0)
+ goto end;
+ display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
+ av_frame_unref(filt_frame);
+ }
+ av_frame_unref(frame);
+ }
+ }
+ av_free_packet(&packet);
+ }
+end:
+ avfilter_graph_free(&filter_graph);
+ avcodec_close(dec_ctx);
+ avformat_close_input(&fmt_ctx);
+ av_frame_free(&frame);
+ av_frame_free(&filt_frame);
+
+ if (ret < 0 && ret != AVERROR_EOF) {
+ fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
+ exit(1);
+ }
+
+ exit(0);
+}
--- /dev/null
+/*
+ * Copyright (c) 2011 Reinhard Tartler
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * Shows how the metadata API can be used in application programs.
+ * @example metadata.c
+ */
+
+#include <stdio.h>
+
+#include <libavformat/avformat.h>
+#include <libavutil/dict.h>
+
+int main (int argc, char **argv)
+{
+ AVFormatContext *fmt_ctx = NULL;
+ AVDictionaryEntry *tag = NULL;
+ int ret;
+
+ if (argc != 2) {
+ printf("usage: %s <input_file>\n"
+ "example program to demonstrate the use of the libavformat metadata API.\n"
+ "\n", argv[0]);
+ return 1;
+ }
+
+ av_register_all();
+ if ((ret = avformat_open_input(&fmt_ctx, argv[1], NULL, NULL)))
+ return ret;
+
+ while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
+ printf("%s=%s\n", tag->key, tag->value);
+
+ avformat_close_input(&fmt_ctx);
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * libavformat API example.
+ *
+ * Output a media file in any supported libavformat format. The default
+ * codecs are used.
+ * @example muxing.c
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include <libavutil/opt.h>
+#include <libavutil/mathematics.h>
+#include <libavutil/timestamp.h>
+#include <libavformat/avformat.h>
+#include <libswscale/swscale.h>
+#include <libswresample/swresample.h>
+
+static int audio_is_eof, video_is_eof;
+
+#define STREAM_DURATION 10.0
+#define STREAM_FRAME_RATE 25 /* 25 images/s */
+#define STREAM_PIX_FMT AV_PIX_FMT_YUV420P /* default pix_fmt */
+
+static int sws_flags = SWS_BICUBIC;
+
+static void log_packet(const AVFormatContext *fmt_ctx, const AVPacket *pkt)
+{
+ AVRational *time_base = &fmt_ctx->streams[pkt->stream_index]->time_base;
+
+ printf("pts:%s pts_time:%s dts:%s dts_time:%s duration:%s duration_time:%s stream_index:%d\n",
+ av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, time_base),
+ av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, time_base),
+ av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, time_base),
+ pkt->stream_index);
+}
+
+static int write_frame(AVFormatContext *fmt_ctx, const AVRational *time_base, AVStream *st, AVPacket *pkt)
+{
+ /* rescale output packet timestamp values from codec to stream timebase */
+ pkt->pts = av_rescale_q_rnd(pkt->pts, *time_base, st->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+ pkt->dts = av_rescale_q_rnd(pkt->dts, *time_base, st->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+ pkt->duration = av_rescale_q(pkt->duration, *time_base, st->time_base);
+ pkt->stream_index = st->index;
+
+ /* Write the compressed frame to the media file. */
+ log_packet(fmt_ctx, pkt);
+ return av_interleaved_write_frame(fmt_ctx, pkt);
+}
+
+/* Add an output stream. */
+static AVStream *add_stream(AVFormatContext *oc, AVCodec **codec,
+ enum AVCodecID codec_id)
+{
+ AVCodecContext *c;
+ AVStream *st;
+
+ /* find the encoder */
+ *codec = avcodec_find_encoder(codec_id);
+ if (!(*codec)) {
+ fprintf(stderr, "Could not find encoder for '%s'\n",
+ avcodec_get_name(codec_id));
+ exit(1);
+ }
+
+ st = avformat_new_stream(oc, *codec);
+ if (!st) {
+ fprintf(stderr, "Could not allocate stream\n");
+ exit(1);
+ }
+ st->id = oc->nb_streams-1;
+ c = st->codec;
+
+ switch ((*codec)->type) {
+ case AVMEDIA_TYPE_AUDIO:
+ c->sample_fmt = (*codec)->sample_fmts ?
+ (*codec)->sample_fmts[0] : AV_SAMPLE_FMT_FLTP;
+ c->bit_rate = 64000;
+ c->sample_rate = 44100;
+ c->channels = 2;
+ break;
+
+ case AVMEDIA_TYPE_VIDEO:
+ c->codec_id = codec_id;
+
+ c->bit_rate = 400000;
+ /* Resolution must be a multiple of two. */
+ c->width = 352;
+ c->height = 288;
+ /* timebase: 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
+ * identical to 1. */
+ c->time_base.den = STREAM_FRAME_RATE;
+ c->time_base.num = 1;
+ c->gop_size = 12; /* emit one intra frame every twelve frames at most */
+ c->pix_fmt = STREAM_PIX_FMT;
+ if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
+ /* just for testing, we also add B frames */
+ c->max_b_frames = 2;
+ }
+ if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
+ /* Needed to avoid using macroblocks in which some coeffs overflow.
+ * This does not happen with normal video, it just happens here as
+ * the motion of the chroma plane does not match the luma plane. */
+ c->mb_decision = 2;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /* Some formats want stream headers to be separate. */
+ if (oc->oformat->flags & AVFMT_GLOBALHEADER)
+ c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+
+ return st;
+}
+
+/**************************************************************/
+/* audio output */
+
+static float t, tincr, tincr2;
+
+AVFrame *audio_frame;
+static uint8_t **src_samples_data;
+static int src_samples_linesize;
+static int src_nb_samples;
+
+static int max_dst_nb_samples;
+uint8_t **dst_samples_data;
+int dst_samples_linesize;
+int dst_samples_size;
+int samples_count;
+
+struct SwrContext *swr_ctx = NULL;
+
+static void open_audio(AVFormatContext *oc, AVCodec *codec, AVStream *st)
+{
+ AVCodecContext *c;
+ int ret;
+
+ c = st->codec;
+
+ /* allocate and init a re-usable frame */
+ audio_frame = av_frame_alloc();
+ if (!audio_frame) {
+ fprintf(stderr, "Could not allocate audio frame\n");
+ exit(1);
+ }
+
+ /* open it */
+ ret = avcodec_open2(c, codec, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Could not open audio codec: %s\n", av_err2str(ret));
+ exit(1);
+ }
+
+ /* init signal generator */
+ t = 0;
+ tincr = 2 * M_PI * 110.0 / c->sample_rate;
+ /* increment frequency by 110 Hz per second */
+ tincr2 = 2 * M_PI * 110.0 / c->sample_rate / c->sample_rate;
+
+ src_nb_samples = c->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE ?
+ 10000 : c->frame_size;
+
+ ret = av_samples_alloc_array_and_samples(&src_samples_data, &src_samples_linesize, c->channels,
+ src_nb_samples, AV_SAMPLE_FMT_S16, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate source samples\n");
+ exit(1);
+ }
+
+ /* compute the number of converted samples: buffering is avoided
+ * ensuring that the output buffer will contain at least all the
+ * converted input samples */
+ max_dst_nb_samples = src_nb_samples;
+
+ /* create resampler context */
+ if (c->sample_fmt != AV_SAMPLE_FMT_S16) {
+ swr_ctx = swr_alloc();
+ if (!swr_ctx) {
+ fprintf(stderr, "Could not allocate resampler context\n");
+ exit(1);
+ }
+
+ /* set options */
+ av_opt_set_int (swr_ctx, "in_channel_count", c->channels, 0);
+ av_opt_set_int (swr_ctx, "in_sample_rate", c->sample_rate, 0);
+ av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", AV_SAMPLE_FMT_S16, 0);
+ av_opt_set_int (swr_ctx, "out_channel_count", c->channels, 0);
+ av_opt_set_int (swr_ctx, "out_sample_rate", c->sample_rate, 0);
+ av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", c->sample_fmt, 0);
+
+ /* initialize the resampling context */
+ if ((ret = swr_init(swr_ctx)) < 0) {
+ fprintf(stderr, "Failed to initialize the resampling context\n");
+ exit(1);
+ }
+
+ ret = av_samples_alloc_array_and_samples(&dst_samples_data, &dst_samples_linesize, c->channels,
+ max_dst_nb_samples, c->sample_fmt, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate destination samples\n");
+ exit(1);
+ }
+ } else {
+ dst_samples_data = src_samples_data;
+ }
+ dst_samples_size = av_samples_get_buffer_size(NULL, c->channels, max_dst_nb_samples,
+ c->sample_fmt, 0);
+}
+
+/* Prepare a 16 bit dummy audio frame of 'frame_size' samples and
+ * 'nb_channels' channels. */
+static void get_audio_frame(int16_t *samples, int frame_size, int nb_channels)
+{
+ int j, i, v;
+ int16_t *q;
+
+ q = samples;
+ for (j = 0; j < frame_size; j++) {
+ v = (int)(sin(t) * 10000);
+ for (i = 0; i < nb_channels; i++)
+ *q++ = v;
+ t += tincr;
+ tincr += tincr2;
+ }
+}
+
+static void write_audio_frame(AVFormatContext *oc, AVStream *st, int flush)
+{
+ AVCodecContext *c;
+ AVPacket pkt = { 0 }; // data and size must be 0;
+ int got_packet, ret, dst_nb_samples;
+
+ av_init_packet(&pkt);
+ c = st->codec;
+
+ if (!flush) {
+ get_audio_frame((int16_t *)src_samples_data[0], src_nb_samples, c->channels);
+
+ /* convert samples from native format to destination codec format, using the resampler */
+ if (swr_ctx) {
+ /* compute destination number of samples */
+ dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, c->sample_rate) + src_nb_samples,
+ c->sample_rate, c->sample_rate, AV_ROUND_UP);
+ if (dst_nb_samples > max_dst_nb_samples) {
+ av_free(dst_samples_data[0]);
+ ret = av_samples_alloc(dst_samples_data, &dst_samples_linesize, c->channels,
+ dst_nb_samples, c->sample_fmt, 0);
+ if (ret < 0)
+ exit(1);
+ max_dst_nb_samples = dst_nb_samples;
+ dst_samples_size = av_samples_get_buffer_size(NULL, c->channels, dst_nb_samples,
+ c->sample_fmt, 0);
+ }
+
+ /* convert to destination format */
+ ret = swr_convert(swr_ctx,
+ dst_samples_data, dst_nb_samples,
+ (const uint8_t **)src_samples_data, src_nb_samples);
+ if (ret < 0) {
+ fprintf(stderr, "Error while converting\n");
+ exit(1);
+ }
+ } else {
+ dst_nb_samples = src_nb_samples;
+ }
+
+ audio_frame->nb_samples = dst_nb_samples;
+ audio_frame->pts = av_rescale_q(samples_count, (AVRational){1, c->sample_rate}, c->time_base);
+ avcodec_fill_audio_frame(audio_frame, c->channels, c->sample_fmt,
+ dst_samples_data[0], dst_samples_size, 0);
+ samples_count += dst_nb_samples;
+ }
+
+ ret = avcodec_encode_audio2(c, &pkt, flush ? NULL : audio_frame, &got_packet);
+ if (ret < 0) {
+ fprintf(stderr, "Error encoding audio frame: %s\n", av_err2str(ret));
+ exit(1);
+ }
+
+ if (!got_packet) {
+ if (flush)
+ audio_is_eof = 1;
+ return;
+ }
+
+ ret = write_frame(oc, &c->time_base, st, &pkt);
+ if (ret < 0) {
+ fprintf(stderr, "Error while writing audio frame: %s\n",
+ av_err2str(ret));
+ exit(1);
+ }
+}
+
+static void close_audio(AVFormatContext *oc, AVStream *st)
+{
+ avcodec_close(st->codec);
+ if (dst_samples_data != src_samples_data) {
+ av_free(dst_samples_data[0]);
+ av_free(dst_samples_data);
+ }
+ av_free(src_samples_data[0]);
+ av_free(src_samples_data);
+ av_frame_free(&audio_frame);
+}
+
+/**************************************************************/
+/* video output */
+
+static AVFrame *frame;
+static AVPicture src_picture, dst_picture;
+static int frame_count;
+
+static void open_video(AVFormatContext *oc, AVCodec *codec, AVStream *st)
+{
+ int ret;
+ AVCodecContext *c = st->codec;
+
+ /* open the codec */
+ ret = avcodec_open2(c, codec, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Could not open video codec: %s\n", av_err2str(ret));
+ exit(1);
+ }
+
+ /* allocate and init a re-usable frame */
+ frame = av_frame_alloc();
+ if (!frame) {
+ fprintf(stderr, "Could not allocate video frame\n");
+ exit(1);
+ }
+ frame->format = c->pix_fmt;
+ frame->width = c->width;
+ frame->height = c->height;
+
+ /* Allocate the encoded raw picture. */
+ ret = avpicture_alloc(&dst_picture, c->pix_fmt, c->width, c->height);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate picture: %s\n", av_err2str(ret));
+ exit(1);
+ }
+
+ /* If the output format is not YUV420P, then a temporary YUV420P
+ * picture is needed too. It is then converted to the required
+ * output format. */
+ if (c->pix_fmt != AV_PIX_FMT_YUV420P) {
+ ret = avpicture_alloc(&src_picture, AV_PIX_FMT_YUV420P, c->width, c->height);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate temporary picture: %s\n",
+ av_err2str(ret));
+ exit(1);
+ }
+ }
+
+ /* copy data and linesize picture pointers to frame */
+ *((AVPicture *)frame) = dst_picture;
+}
+
+/* Prepare a dummy image. */
+static void fill_yuv_image(AVPicture *pict, int frame_index,
+ int width, int height)
+{
+ int x, y, i;
+
+ i = frame_index;
+
+ /* Y */
+ for (y = 0; y < height; y++)
+ for (x = 0; x < width; x++)
+ pict->data[0][y * pict->linesize[0] + x] = x + y + i * 3;
+
+ /* Cb and Cr */
+ for (y = 0; y < height / 2; y++) {
+ for (x = 0; x < width / 2; x++) {
+ pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
+ pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
+ }
+ }
+}
+
+static void write_video_frame(AVFormatContext *oc, AVStream *st, int flush)
+{
+ int ret;
+ static struct SwsContext *sws_ctx;
+ AVCodecContext *c = st->codec;
+
+ if (!flush) {
+ if (c->pix_fmt != AV_PIX_FMT_YUV420P) {
+ /* as we only generate a YUV420P picture, we must convert it
+ * to the codec pixel format if needed */
+ if (!sws_ctx) {
+ sws_ctx = sws_getContext(c->width, c->height, AV_PIX_FMT_YUV420P,
+ c->width, c->height, c->pix_fmt,
+ sws_flags, NULL, NULL, NULL);
+ if (!sws_ctx) {
+ fprintf(stderr,
+ "Could not initialize the conversion context\n");
+ exit(1);
+ }
+ }
+ fill_yuv_image(&src_picture, frame_count, c->width, c->height);
+ sws_scale(sws_ctx,
+ (const uint8_t * const *)src_picture.data, src_picture.linesize,
+ 0, c->height, dst_picture.data, dst_picture.linesize);
+ } else {
+ fill_yuv_image(&dst_picture, frame_count, c->width, c->height);
+ }
+ }
+
+ if (oc->oformat->flags & AVFMT_RAWPICTURE && !flush) {
+ /* Raw video case - directly store the picture in the packet */
+ AVPacket pkt;
+ av_init_packet(&pkt);
+
+ pkt.flags |= AV_PKT_FLAG_KEY;
+ pkt.stream_index = st->index;
+ pkt.data = dst_picture.data[0];
+ pkt.size = sizeof(AVPicture);
+
+ ret = av_interleaved_write_frame(oc, &pkt);
+ } else {
+ AVPacket pkt = { 0 };
+ int got_packet;
+ av_init_packet(&pkt);
+
+ /* encode the image */
+ frame->pts = frame_count;
+ ret = avcodec_encode_video2(c, &pkt, flush ? NULL : frame, &got_packet);
+ if (ret < 0) {
+ fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret));
+ exit(1);
+ }
+ /* If size is zero, it means the image was buffered. */
+
+ if (got_packet) {
+ ret = write_frame(oc, &c->time_base, st, &pkt);
+ } else {
+ if (flush)
+ video_is_eof = 1;
+ ret = 0;
+ }
+ }
+
+ if (ret < 0) {
+ fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
+ exit(1);
+ }
+ frame_count++;
+}
+
+static void close_video(AVFormatContext *oc, AVStream *st)
+{
+ avcodec_close(st->codec);
+ av_free(src_picture.data[0]);
+ av_free(dst_picture.data[0]);
+ av_frame_free(&frame);
+}
+
+/**************************************************************/
+/* media file output */
+
+int main(int argc, char **argv)
+{
+ const char *filename;
+ AVOutputFormat *fmt;
+ AVFormatContext *oc;
+ AVStream *audio_st, *video_st;
+ AVCodec *audio_codec, *video_codec;
+ double audio_time, video_time;
+ int flush, ret;
+
+ /* Initialize libavcodec, and register all codecs and formats. */
+ av_register_all();
+
+ if (argc != 2) {
+ printf("usage: %s output_file\n"
+ "API example program to output a media file with libavformat.\n"
+ "This program generates a synthetic audio and video stream, encodes and\n"
+ "muxes them into a file named output_file.\n"
+ "The output format is automatically guessed according to the file extension.\n"
+ "Raw images can also be output by using '%%d' in the filename.\n"
+ "\n", argv[0]);
+ return 1;
+ }
+
+ filename = argv[1];
+
+ /* allocate the output media context */
+ avformat_alloc_output_context2(&oc, NULL, NULL, filename);
+ if (!oc) {
+ printf("Could not deduce output format from file extension: using MPEG.\n");
+ avformat_alloc_output_context2(&oc, NULL, "mpeg", filename);
+ }
+ if (!oc)
+ return 1;
+
+ fmt = oc->oformat;
+
+ /* Add the audio and video streams using the default format codecs
+ * and initialize the codecs. */
+ video_st = NULL;
+ audio_st = NULL;
+
+ if (fmt->video_codec != AV_CODEC_ID_NONE)
+ video_st = add_stream(oc, &video_codec, fmt->video_codec);
+ if (fmt->audio_codec != AV_CODEC_ID_NONE)
+ audio_st = add_stream(oc, &audio_codec, fmt->audio_codec);
+
+ /* Now that all the parameters are set, we can open the audio and
+ * video codecs and allocate the necessary encode buffers. */
+ if (video_st)
+ open_video(oc, video_codec, video_st);
+ if (audio_st)
+ open_audio(oc, audio_codec, audio_st);
+
+ av_dump_format(oc, 0, filename, 1);
+
+ /* open the output file, if needed */
+ if (!(fmt->flags & AVFMT_NOFILE)) {
+ ret = avio_open(&oc->pb, filename, AVIO_FLAG_WRITE);
+ if (ret < 0) {
+ fprintf(stderr, "Could not open '%s': %s\n", filename,
+ av_err2str(ret));
+ return 1;
+ }
+ }
+
+ /* Write the stream header, if any. */
+ ret = avformat_write_header(oc, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Error occurred when opening output file: %s\n",
+ av_err2str(ret));
+ return 1;
+ }
+
+ flush = 0;
+ while ((video_st && !video_is_eof) || (audio_st && !audio_is_eof)) {
+ /* Compute current audio and video time. */
+ audio_time = (audio_st && !audio_is_eof) ? audio_st->pts.val * av_q2d(audio_st->time_base) : INFINITY;
+ video_time = (video_st && !video_is_eof) ? video_st->pts.val * av_q2d(video_st->time_base) : INFINITY;
+
+ if (!flush &&
+ (!audio_st || audio_time >= STREAM_DURATION) &&
+ (!video_st || video_time >= STREAM_DURATION)) {
+ flush = 1;
+ }
+
+ /* write interleaved audio and video frames */
+ if (audio_st && !audio_is_eof && audio_time <= video_time) {
+ write_audio_frame(oc, audio_st, flush);
+ } else if (video_st && !video_is_eof && video_time < audio_time) {
+ write_video_frame(oc, video_st, flush);
+ }
+ }
+
+ /* Write the trailer, if any. The trailer must be written before you
+ * close the CodecContexts open when you wrote the header; otherwise
+ * av_write_trailer() may try to use memory that was freed on
+ * av_codec_close(). */
+ av_write_trailer(oc);
+
+ /* Close each codec. */
+ if (video_st)
+ close_video(oc, video_st);
+ if (audio_st)
+ close_audio(oc, audio_st);
+
+ if (!(fmt->flags & AVFMT_NOFILE))
+ /* Close the output file. */
+ avio_close(oc->pb);
+
+ /* free the stream */
+ avformat_free_context(oc);
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2013 Stefano Sabatini
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * libavformat/libavcodec demuxing and muxing API example.
+ *
+ * Remux streams from one container format to another.
+ * @example remuxing.c
+ */
+
+#include <libavutil/timestamp.h>
+#include <libavformat/avformat.h>
+
+static void log_packet(const AVFormatContext *fmt_ctx, const AVPacket *pkt, const char *tag)
+{
+ AVRational *time_base = &fmt_ctx->streams[pkt->stream_index]->time_base;
+
+ printf("%s: pts:%s pts_time:%s dts:%s dts_time:%s duration:%s duration_time:%s stream_index:%d\n",
+ tag,
+ av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, time_base),
+ av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, time_base),
+ av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, time_base),
+ pkt->stream_index);
+}
+
+int main(int argc, char **argv)
+{
+ AVOutputFormat *ofmt = NULL;
+ AVFormatContext *ifmt_ctx = NULL, *ofmt_ctx = NULL;
+ AVPacket pkt;
+ const char *in_filename, *out_filename;
+ int ret, i;
+
+ if (argc < 3) {
+ printf("usage: %s input output\n"
+ "API example program to remux a media file with libavformat and libavcodec.\n"
+ "The output format is guessed according to the file extension.\n"
+ "\n", argv[0]);
+ return 1;
+ }
+
+ in_filename = argv[1];
+ out_filename = argv[2];
+
+ av_register_all();
+
+ if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) {
+ fprintf(stderr, "Could not open input file '%s'", in_filename);
+ goto end;
+ }
+
+ if ((ret = avformat_find_stream_info(ifmt_ctx, 0)) < 0) {
+ fprintf(stderr, "Failed to retrieve input stream information");
+ goto end;
+ }
+
+ av_dump_format(ifmt_ctx, 0, in_filename, 0);
+
+ avformat_alloc_output_context2(&ofmt_ctx, NULL, NULL, out_filename);
+ if (!ofmt_ctx) {
+ fprintf(stderr, "Could not create output context\n");
+ ret = AVERROR_UNKNOWN;
+ goto end;
+ }
+
+ ofmt = ofmt_ctx->oformat;
+
+ for (i = 0; i < ifmt_ctx->nb_streams; i++) {
+ AVStream *in_stream = ifmt_ctx->streams[i];
+ AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
+ if (!out_stream) {
+ fprintf(stderr, "Failed allocating output stream\n");
+ ret = AVERROR_UNKNOWN;
+ goto end;
+ }
+
+ ret = avcodec_copy_context(out_stream->codec, in_stream->codec);
+ if (ret < 0) {
+ fprintf(stderr, "Failed to copy context from input to output stream codec context\n");
+ goto end;
+ }
+ if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
+ out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
+ }
+ av_dump_format(ofmt_ctx, 0, out_filename, 1);
+
+ if (!(ofmt->flags & AVFMT_NOFILE)) {
+ ret = avio_open(&ofmt_ctx->pb, out_filename, AVIO_FLAG_WRITE);
+ if (ret < 0) {
+ fprintf(stderr, "Could not open output file '%s'", out_filename);
+ goto end;
+ }
+ }
+
+ ret = avformat_write_header(ofmt_ctx, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "Error occurred when opening output file\n");
+ goto end;
+ }
+
+ while (1) {
+ AVStream *in_stream, *out_stream;
+
+ ret = av_read_frame(ifmt_ctx, &pkt);
+ if (ret < 0)
+ break;
+
+ in_stream = ifmt_ctx->streams[pkt.stream_index];
+ out_stream = ofmt_ctx->streams[pkt.stream_index];
+
+ log_packet(ifmt_ctx, &pkt, "in");
+
+ /* copy packet */
+ pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+ pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
+ pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);
+ pkt.pos = -1;
+ log_packet(ofmt_ctx, &pkt, "out");
+
+ ret = av_interleaved_write_frame(ofmt_ctx, &pkt);
+ if (ret < 0) {
+ fprintf(stderr, "Error muxing packet\n");
+ break;
+ }
+ av_free_packet(&pkt);
+ }
+
+ av_write_trailer(ofmt_ctx);
+end:
+
+ avformat_close_input(&ifmt_ctx);
+
+ /* close output */
+ if (ofmt_ctx && !(ofmt->flags & AVFMT_NOFILE))
+ avio_close(ofmt_ctx->pb);
+ avformat_free_context(ofmt_ctx);
+
+ if (ret < 0 && ret != AVERROR_EOF) {
+ fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
+ return 1;
+ }
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2012 Stefano Sabatini
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @example resampling_audio.c
+ * libswresample API use example.
+ */
+
+#include <libavutil/opt.h>
+#include <libavutil/channel_layout.h>
+#include <libavutil/samplefmt.h>
+#include <libswresample/swresample.h>
+
+static int get_format_from_sample_fmt(const char **fmt,
+ enum AVSampleFormat sample_fmt)
+{
+ int i;
+ struct sample_fmt_entry {
+ enum AVSampleFormat sample_fmt; const char *fmt_be, *fmt_le;
+ } sample_fmt_entries[] = {
+ { AV_SAMPLE_FMT_U8, "u8", "u8" },
+ { AV_SAMPLE_FMT_S16, "s16be", "s16le" },
+ { AV_SAMPLE_FMT_S32, "s32be", "s32le" },
+ { AV_SAMPLE_FMT_FLT, "f32be", "f32le" },
+ { AV_SAMPLE_FMT_DBL, "f64be", "f64le" },
+ };
+ *fmt = NULL;
+
+ for (i = 0; i < FF_ARRAY_ELEMS(sample_fmt_entries); i++) {
+ struct sample_fmt_entry *entry = &sample_fmt_entries[i];
+ if (sample_fmt == entry->sample_fmt) {
+ *fmt = AV_NE(entry->fmt_be, entry->fmt_le);
+ return 0;
+ }
+ }
+
+ fprintf(stderr,
+ "Sample format %s not supported as output format\n",
+ av_get_sample_fmt_name(sample_fmt));
+ return AVERROR(EINVAL);
+}
+
+/**
+ * Fill dst buffer with nb_samples, generated starting from t.
+ */
+static void fill_samples(double *dst, int nb_samples, int nb_channels, int sample_rate, double *t)
+{
+ int i, j;
+ double tincr = 1.0 / sample_rate, *dstp = dst;
+ const double c = 2 * M_PI * 440.0;
+
+ /* generate sin tone with 440Hz frequency and duplicated channels */
+ for (i = 0; i < nb_samples; i++) {
+ *dstp = sin(c * *t);
+ for (j = 1; j < nb_channels; j++)
+ dstp[j] = dstp[0];
+ dstp += nb_channels;
+ *t += tincr;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ int64_t src_ch_layout = AV_CH_LAYOUT_STEREO, dst_ch_layout = AV_CH_LAYOUT_SURROUND;
+ int src_rate = 48000, dst_rate = 44100;
+ uint8_t **src_data = NULL, **dst_data = NULL;
+ int src_nb_channels = 0, dst_nb_channels = 0;
+ int src_linesize, dst_linesize;
+ int src_nb_samples = 1024, dst_nb_samples, max_dst_nb_samples;
+ enum AVSampleFormat src_sample_fmt = AV_SAMPLE_FMT_DBL, dst_sample_fmt = AV_SAMPLE_FMT_S16;
+ const char *dst_filename = NULL;
+ FILE *dst_file;
+ int dst_bufsize;
+ const char *fmt;
+ struct SwrContext *swr_ctx;
+ double t;
+ int ret;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s output_file\n"
+ "API example program to show how to resample an audio stream with libswresample.\n"
+ "This program generates a series of audio frames, resamples them to a specified "
+ "output format and rate and saves them to an output file named output_file.\n",
+ argv[0]);
+ exit(1);
+ }
+ dst_filename = argv[1];
+
+ dst_file = fopen(dst_filename, "wb");
+ if (!dst_file) {
+ fprintf(stderr, "Could not open destination file %s\n", dst_filename);
+ exit(1);
+ }
+
+ /* create resampler context */
+ swr_ctx = swr_alloc();
+ if (!swr_ctx) {
+ fprintf(stderr, "Could not allocate resampler context\n");
+ ret = AVERROR(ENOMEM);
+ goto end;
+ }
+
+ /* set options */
+ av_opt_set_int(swr_ctx, "in_channel_layout", src_ch_layout, 0);
+ av_opt_set_int(swr_ctx, "in_sample_rate", src_rate, 0);
+ av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", src_sample_fmt, 0);
+
+ av_opt_set_int(swr_ctx, "out_channel_layout", dst_ch_layout, 0);
+ av_opt_set_int(swr_ctx, "out_sample_rate", dst_rate, 0);
+ av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", dst_sample_fmt, 0);
+
+ /* initialize the resampling context */
+ if ((ret = swr_init(swr_ctx)) < 0) {
+ fprintf(stderr, "Failed to initialize the resampling context\n");
+ goto end;
+ }
+
+ /* allocate source and destination samples buffers */
+
+ src_nb_channels = av_get_channel_layout_nb_channels(src_ch_layout);
+ ret = av_samples_alloc_array_and_samples(&src_data, &src_linesize, src_nb_channels,
+ src_nb_samples, src_sample_fmt, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate source samples\n");
+ goto end;
+ }
+
+ /* compute the number of converted samples: buffering is avoided
+ * ensuring that the output buffer will contain at least all the
+ * converted input samples */
+ max_dst_nb_samples = dst_nb_samples =
+ av_rescale_rnd(src_nb_samples, dst_rate, src_rate, AV_ROUND_UP);
+
+ /* buffer is going to be directly written to a rawaudio file, no alignment */
+ dst_nb_channels = av_get_channel_layout_nb_channels(dst_ch_layout);
+ ret = av_samples_alloc_array_and_samples(&dst_data, &dst_linesize, dst_nb_channels,
+ dst_nb_samples, dst_sample_fmt, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Could not allocate destination samples\n");
+ goto end;
+ }
+
+ t = 0;
+ do {
+ /* generate synthetic audio */
+ fill_samples((double *)src_data[0], src_nb_samples, src_nb_channels, src_rate, &t);
+
+ /* compute destination number of samples */
+ dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, src_rate) +
+ src_nb_samples, dst_rate, src_rate, AV_ROUND_UP);
+ if (dst_nb_samples > max_dst_nb_samples) {
+ av_free(dst_data[0]);
+ ret = av_samples_alloc(dst_data, &dst_linesize, dst_nb_channels,
+ dst_nb_samples, dst_sample_fmt, 1);
+ if (ret < 0)
+ break;
+ max_dst_nb_samples = dst_nb_samples;
+ }
+
+ /* convert to destination format */
+ ret = swr_convert(swr_ctx, dst_data, dst_nb_samples, (const uint8_t **)src_data, src_nb_samples);
+ if (ret < 0) {
+ fprintf(stderr, "Error while converting\n");
+ goto end;
+ }
+ dst_bufsize = av_samples_get_buffer_size(&dst_linesize, dst_nb_channels,
+ ret, dst_sample_fmt, 1);
+ if (dst_bufsize < 0) {
+ fprintf(stderr, "Could not get sample buffer size\n");
+ goto end;
+ }
+ printf("t:%f in:%d out:%d\n", t, src_nb_samples, ret);
+ fwrite(dst_data[0], 1, dst_bufsize, dst_file);
+ } while (t < 10);
+
+ if ((ret = get_format_from_sample_fmt(&fmt, dst_sample_fmt)) < 0)
+ goto end;
+ fprintf(stderr, "Resampling succeeded. Play the output file with the command:\n"
+ "ffplay -f %s -channel_layout %"PRId64" -channels %d -ar %d %s\n",
+ fmt, dst_ch_layout, dst_nb_channels, dst_rate, dst_filename);
+
+end:
+ if (dst_file)
+ fclose(dst_file);
+
+ if (src_data)
+ av_freep(&src_data[0]);
+ av_freep(&src_data);
+
+ if (dst_data)
+ av_freep(&dst_data[0]);
+ av_freep(&dst_data);
+
+ swr_free(&swr_ctx);
+ return ret < 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2012 Stefano Sabatini
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * @file
+ * libswscale API use example.
+ * @example scaling_video.c
+ */
+
+#include <libavutil/imgutils.h>
+#include <libavutil/parseutils.h>
+#include <libswscale/swscale.h>
+
+static void fill_yuv_image(uint8_t *data[4], int linesize[4],
+ int width, int height, int frame_index)
+{
+ int x, y;
+
+ /* Y */
+ for (y = 0; y < height; y++)
+ for (x = 0; x < width; x++)
+ data[0][y * linesize[0] + x] = x + y + frame_index * 3;
+
+ /* Cb and Cr */
+ for (y = 0; y < height / 2; y++) {
+ for (x = 0; x < width / 2; x++) {
+ data[1][y * linesize[1] + x] = 128 + y + frame_index * 2;
+ data[2][y * linesize[2] + x] = 64 + x + frame_index * 5;
+ }
+ }
+}
+
+int main(int argc, char **argv)
+{
+ uint8_t *src_data[4], *dst_data[4];
+ int src_linesize[4], dst_linesize[4];
+ int src_w = 320, src_h = 240, dst_w, dst_h;
+ enum AVPixelFormat src_pix_fmt = AV_PIX_FMT_YUV420P, dst_pix_fmt = AV_PIX_FMT_RGB24;
+ const char *dst_size = NULL;
+ const char *dst_filename = NULL;
+ FILE *dst_file;
+ int dst_bufsize;
+ struct SwsContext *sws_ctx;
+ int i, ret;
+
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s output_file output_size\n"
+ "API example program to show how to scale an image with libswscale.\n"
+ "This program generates a series of pictures, rescales them to the given "
+ "output_size and saves them to an output file named output_file\n."
+ "\n", argv[0]);
+ exit(1);
+ }
+ dst_filename = argv[1];
+ dst_size = argv[2];
+
+ if (av_parse_video_size(&dst_w, &dst_h, dst_size) < 0) {
+ fprintf(stderr,
+ "Invalid size '%s', must be in the form WxH or a valid size abbreviation\n",
+ dst_size);
+ exit(1);
+ }
+
+ dst_file = fopen(dst_filename, "wb");
+ if (!dst_file) {
+ fprintf(stderr, "Could not open destination file %s\n", dst_filename);
+ exit(1);
+ }
+
+ /* create scaling context */
+ sws_ctx = sws_getContext(src_w, src_h, src_pix_fmt,
+ dst_w, dst_h, dst_pix_fmt,
+ SWS_BILINEAR, NULL, NULL, NULL);
+ if (!sws_ctx) {
+ fprintf(stderr,
+ "Impossible to create scale context for the conversion "
+ "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
+ av_get_pix_fmt_name(src_pix_fmt), src_w, src_h,
+ av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h);
+ ret = AVERROR(EINVAL);
+ goto end;
+ }
+
+ /* allocate source and destination image buffers */
+ if ((ret = av_image_alloc(src_data, src_linesize,
+ src_w, src_h, src_pix_fmt, 16)) < 0) {
+ fprintf(stderr, "Could not allocate source image\n");
+ goto end;
+ }
+
+ /* buffer is going to be written to rawvideo file, no alignment */
+ if ((ret = av_image_alloc(dst_data, dst_linesize,
+ dst_w, dst_h, dst_pix_fmt, 1)) < 0) {
+ fprintf(stderr, "Could not allocate destination image\n");
+ goto end;
+ }
+ dst_bufsize = ret;
+
+ for (i = 0; i < 100; i++) {
+ /* generate synthetic video */
+ fill_yuv_image(src_data, src_linesize, src_w, src_h, i);
+
+ /* convert to destination format */
+ sws_scale(sws_ctx, (const uint8_t * const*)src_data,
+ src_linesize, 0, src_h, dst_data, dst_linesize);
+
+ /* write scaled image to file */
+ fwrite(dst_data[0], 1, dst_bufsize, dst_file);
+ }
+
+ fprintf(stderr, "Scaling succeeded. Play the output file with the command:\n"
+ "ffplay -f rawvideo -pix_fmt %s -video_size %dx%d %s\n",
+ av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h, dst_filename);
+
+end:
+ if (dst_file)
+ fclose(dst_file);
+ av_freep(&src_data[0]);
+ av_freep(&dst_data[0]);
+ sws_freeContext(sws_ctx);
+ return ret < 0;
+}
--- /dev/null
+/*
+ * 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
+ */
+
+/**
+ * @file
+ * simple audio converter
+ *
+ * @example transcode_aac.c
+ * Convert an input audio file to AAC in an MP4 container using FFmpeg.
+ * @author Andreas Unterweger (dustsigns@gmail.com)
+ */
+
+#include <stdio.h>
+
+#include "libavformat/avformat.h"
+#include "libavformat/avio.h"
+
+#include "libavcodec/avcodec.h"
+
+#include "libavutil/audio_fifo.h"
+#include "libavutil/avassert.h"
+#include "libavutil/avstring.h"
+#include "libavutil/frame.h"
+#include "libavutil/opt.h"
+
+#include "libswresample/swresample.h"
+
+/** The output bit rate in kbit/s */
+#define OUTPUT_BIT_RATE 48000
+/** The number of output channels */
+#define OUTPUT_CHANNELS 2
+/** The audio sample output format */
+#define OUTPUT_SAMPLE_FORMAT AV_SAMPLE_FMT_S16
+
+/**
+ * Convert an error code into a text message.
+ * @param error Error code to be converted
+ * @return Corresponding error text (not thread-safe)
+ */
+static char *const get_error_text(const int error)
+{
+ static char error_buffer[255];
+ av_strerror(error, error_buffer, sizeof(error_buffer));
+ return error_buffer;
+}
+
+/** Open an input file and the required decoder. */
+static int open_input_file(const char *filename,
+ AVFormatContext **input_format_context,
+ AVCodecContext **input_codec_context)
+{
+ AVCodec *input_codec;
+ int error;
+
+ /** Open the input file to read from it. */
+ if ((error = avformat_open_input(input_format_context, filename, NULL,
+ NULL)) < 0) {
+ fprintf(stderr, "Could not open input file '%s' (error '%s')\n",
+ filename, get_error_text(error));
+ *input_format_context = NULL;
+ return error;
+ }
+
+ /** Get information on the input file (number of streams etc.). */
+ if ((error = avformat_find_stream_info(*input_format_context, NULL)) < 0) {
+ fprintf(stderr, "Could not open find stream info (error '%s')\n",
+ get_error_text(error));
+ avformat_close_input(input_format_context);
+ return error;
+ }
+
+ /** Make sure that there is only one stream in the input file. */
+ if ((*input_format_context)->nb_streams != 1) {
+ fprintf(stderr, "Expected one audio input stream, but found %d\n",
+ (*input_format_context)->nb_streams);
+ avformat_close_input(input_format_context);
+ return AVERROR_EXIT;
+ }
+
+ /** Find a decoder for the audio stream. */
+ if (!(input_codec = avcodec_find_decoder((*input_format_context)->streams[0]->codec->codec_id))) {
+ fprintf(stderr, "Could not find input codec\n");
+ avformat_close_input(input_format_context);
+ return AVERROR_EXIT;
+ }
+
+ /** Open the decoder for the audio stream to use it later. */
+ if ((error = avcodec_open2((*input_format_context)->streams[0]->codec,
+ input_codec, NULL)) < 0) {
+ fprintf(stderr, "Could not open input codec (error '%s')\n",
+ get_error_text(error));
+ avformat_close_input(input_format_context);
+ return error;
+ }
+
+ /** Save the decoder context for easier access later. */
+ *input_codec_context = (*input_format_context)->streams[0]->codec;
+
+ return 0;
+}
+
+/**
+ * Open an output file and the required encoder.
+ * Also set some basic encoder parameters.
+ * Some of these parameters are based on the input file's parameters.
+ */
+static int open_output_file(const char *filename,
+ AVCodecContext *input_codec_context,
+ AVFormatContext **output_format_context,
+ AVCodecContext **output_codec_context)
+{
+ AVIOContext *output_io_context = NULL;
+ AVStream *stream = NULL;
+ AVCodec *output_codec = NULL;
+ int error;
+
+ /** Open the output file to write to it. */
+ if ((error = avio_open(&output_io_context, filename,
+ AVIO_FLAG_WRITE)) < 0) {
+ fprintf(stderr, "Could not open output file '%s' (error '%s')\n",
+ filename, get_error_text(error));
+ return error;
+ }
+
+ /** Create a new format context for the output container format. */
+ if (!(*output_format_context = avformat_alloc_context())) {
+ fprintf(stderr, "Could not allocate output format context\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /** Associate the output file (pointer) with the container format context. */
+ (*output_format_context)->pb = output_io_context;
+
+ /** Guess the desired container format based on the file extension. */
+ if (!((*output_format_context)->oformat = av_guess_format(NULL, filename,
+ NULL))) {
+ fprintf(stderr, "Could not find output file format\n");
+ goto cleanup;
+ }
+
+ av_strlcpy((*output_format_context)->filename, filename,
+ sizeof((*output_format_context)->filename));
+
+ /** Find the encoder to be used by its name. */
+ if (!(output_codec = avcodec_find_encoder(AV_CODEC_ID_AAC))) {
+ fprintf(stderr, "Could not find an AAC encoder.\n");
+ goto cleanup;
+ }
+
+ /** Create a new audio stream in the output file container. */
+ if (!(stream = avformat_new_stream(*output_format_context, output_codec))) {
+ fprintf(stderr, "Could not create new stream\n");
+ error = AVERROR(ENOMEM);
+ goto cleanup;
+ }
+
+ /** Save the encoder context for easiert access later. */
+ *output_codec_context = stream->codec;
+
+ /**
+ * Set the basic encoder parameters.
+ * The input file's sample rate is used to avoid a sample rate conversion.
+ */
+ (*output_codec_context)->channels = OUTPUT_CHANNELS;
+ (*output_codec_context)->channel_layout = av_get_default_channel_layout(OUTPUT_CHANNELS);
+ (*output_codec_context)->sample_rate = input_codec_context->sample_rate;
+ (*output_codec_context)->sample_fmt = AV_SAMPLE_FMT_S16;
+ (*output_codec_context)->bit_rate = OUTPUT_BIT_RATE;
+
+ /**
+ * Some container formats (like MP4) require global headers to be present
+ * Mark the encoder so that it behaves accordingly.
+ */
+ if ((*output_format_context)->oformat->flags & AVFMT_GLOBALHEADER)
+ (*output_codec_context)->flags |= CODEC_FLAG_GLOBAL_HEADER;
+
+ /** Open the encoder for the audio stream to use it later. */
+ if ((error = avcodec_open2(*output_codec_context, output_codec, NULL)) < 0) {
+ fprintf(stderr, "Could not open output codec (error '%s')\n",
+ get_error_text(error));
+ goto cleanup;
+ }
+
+ return 0;
+
+cleanup:
+ avio_close((*output_format_context)->pb);
+ avformat_free_context(*output_format_context);
+ *output_format_context = NULL;
+ return error < 0 ? error : AVERROR_EXIT;
+}
+
+/** Initialize one data packet for reading or writing. */
+static void init_packet(AVPacket *packet)
+{
+ av_init_packet(packet);
+ /** Set the packet data and size so that it is recognized as being empty. */
+ packet->data = NULL;
+ packet->size = 0;
+}
+
+/** Initialize one audio frame for reading from the input file */
+static int init_input_frame(AVFrame **frame)
+{
+ if (!(*frame = av_frame_alloc())) {
+ fprintf(stderr, "Could not allocate input frame\n");
+ return AVERROR(ENOMEM);
+ }
+ return 0;
+}
+
+/**
+ * Initialize the audio resampler based on the input and output codec settings.
+ * If the input and output sample formats differ, a conversion is required
+ * libswresample takes care of this, but requires initialization.
+ */
+static int init_resampler(AVCodecContext *input_codec_context,
+ AVCodecContext *output_codec_context,
+ SwrContext **resample_context)
+{
+ int error;
+
+ /**
+ * Create a resampler context for the conversion.
+ * Set the conversion parameters.
+ * Default channel layouts based on the number of channels
+ * are assumed for simplicity (they are sometimes not detected
+ * properly by the demuxer and/or decoder).
+ */
+ *resample_context = swr_alloc_set_opts(NULL,
+ av_get_default_channel_layout(output_codec_context->channels),
+ output_codec_context->sample_fmt,
+ output_codec_context->sample_rate,
+ av_get_default_channel_layout(input_codec_context->channels),
+ input_codec_context->sample_fmt,
+ input_codec_context->sample_rate,
+ 0, NULL);
+ if (!*resample_context) {
+ fprintf(stderr, "Could not allocate resample context\n");
+ return AVERROR(ENOMEM);
+ }
+ /**
+ * Perform a sanity check so that the number of converted samples is
+ * not greater than the number of samples to be converted.
+ * If the sample rates differ, this case has to be handled differently
+ */
+ av_assert0(output_codec_context->sample_rate == input_codec_context->sample_rate);
+
+ /** Open the resampler with the specified parameters. */
+ if ((error = swr_init(*resample_context)) < 0) {
+ fprintf(stderr, "Could not open resample context\n");
+ swr_free(resample_context);
+ return error;
+ }
+ return 0;
+}
+
+/** Initialize a FIFO buffer for the audio samples to be encoded. */
+static int init_fifo(AVAudioFifo **fifo)
+{
+ /** Create the FIFO buffer based on the specified output sample format. */
+ if (!(*fifo = av_audio_fifo_alloc(OUTPUT_SAMPLE_FORMAT, OUTPUT_CHANNELS, 1))) {
+ fprintf(stderr, "Could not allocate FIFO\n");
+ return AVERROR(ENOMEM);
+ }
+ return 0;
+}
+
+/** Write the header of the output file container. */
+static int write_output_file_header(AVFormatContext *output_format_context)
+{
+ int error;
+ if ((error = avformat_write_header(output_format_context, NULL)) < 0) {
+ fprintf(stderr, "Could not write output file header (error '%s')\n",
+ get_error_text(error));
+ return error;
+ }
+ return 0;
+}
+
+/** Decode one audio frame from the input file. */
+static int decode_audio_frame(AVFrame *frame,
+ AVFormatContext *input_format_context,
+ AVCodecContext *input_codec_context,
+ int *data_present, int *finished)
+{
+ /** Packet used for temporary storage. */
+ AVPacket input_packet;
+ int error;
+ init_packet(&input_packet);
+
+ /** Read one audio frame from the input file into a temporary packet. */
+ if ((error = av_read_frame(input_format_context, &input_packet)) < 0) {
+ /** If we are the the end of the file, flush the decoder below. */
+ if (error == AVERROR_EOF)
+ *finished = 1;
+ else {
+ fprintf(stderr, "Could not read frame (error '%s')\n",
+ get_error_text(error));
+ return error;
+ }
+ }
+
+ /**
+ * Decode the audio frame stored in the temporary packet.
+ * The input audio stream decoder is used to do this.
+ * If we are at the end of the file, pass an empty packet to the decoder
+ * to flush it.
+ */
+ if ((error = avcodec_decode_audio4(input_codec_context, frame,
+ data_present, &input_packet)) < 0) {
+ fprintf(stderr, "Could not decode frame (error '%s')\n",
+ get_error_text(error));
+ av_free_packet(&input_packet);
+ return error;
+ }
+
+ /**
+ * If the decoder has not been flushed completely, we are not finished,
+ * so that this function has to be called again.
+ */
+ if (*finished && *data_present)
+ *finished = 0;
+ av_free_packet(&input_packet);
+ return 0;
+}
+
+/**
+ * Initialize a temporary storage for the specified number of audio samples.
+ * The conversion requires temporary storage due to the different format.
+ * The number of audio samples to be allocated is specified in frame_size.
+ */
+static int init_converted_samples(uint8_t ***converted_input_samples,
+ AVCodecContext *output_codec_context,
+ int frame_size)
+{
+ int error;
+
+ /**
+ * Allocate as many pointers as there are audio channels.
+ * Each pointer will later point to the audio samples of the corresponding
+ * channels (although it may be NULL for interleaved formats).
+ */
+ if (!(*converted_input_samples = calloc(output_codec_context->channels,
+ sizeof(**converted_input_samples)))) {
+ fprintf(stderr, "Could not allocate converted input sample pointers\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /**
+ * Allocate memory for the samples of all channels in one consecutive
+ * block for convenience.
+ */
+ if ((error = av_samples_alloc(*converted_input_samples, NULL,
+ output_codec_context->channels,
+ frame_size,
+ output_codec_context->sample_fmt, 0)) < 0) {
+ fprintf(stderr,
+ "Could not allocate converted input samples (error '%s')\n",
+ get_error_text(error));
+ av_freep(&(*converted_input_samples)[0]);
+ free(*converted_input_samples);
+ return error;
+ }
+ return 0;
+}
+
+/**
+ * Convert the input audio samples into the output sample format.
+ * The conversion happens on a per-frame basis, the size of which is specified
+ * by frame_size.
+ */
+static int convert_samples(const uint8_t **input_data,
+ uint8_t **converted_data, const int frame_size,
+ SwrContext *resample_context)
+{
+ int error;
+
+ /** Convert the samples using the resampler. */
+ if ((error = swr_convert(resample_context,
+ converted_data, frame_size,
+ input_data , frame_size)) < 0) {
+ fprintf(stderr, "Could not convert input samples (error '%s')\n",
+ get_error_text(error));
+ return error;
+ }
+
+ return 0;
+}
+
+/** Add converted input audio samples to the FIFO buffer for later processing. */
+static int add_samples_to_fifo(AVAudioFifo *fifo,
+ uint8_t **converted_input_samples,
+ const int frame_size)
+{
+ int error;
+
+ /**
+ * Make the FIFO as large as it needs to be to hold both,
+ * the old and the new samples.
+ */
+ if ((error = av_audio_fifo_realloc(fifo, av_audio_fifo_size(fifo) + frame_size)) < 0) {
+ fprintf(stderr, "Could not reallocate FIFO\n");
+ return error;
+ }
+
+ /** Store the new samples in the FIFO buffer. */
+ if (av_audio_fifo_write(fifo, (void **)converted_input_samples,
+ frame_size) < frame_size) {
+ fprintf(stderr, "Could not write data to FIFO\n");
+ return AVERROR_EXIT;
+ }
+ return 0;
+}
+
+/**
+ * Read one audio frame from the input file, decodes, converts and stores
+ * it in the FIFO buffer.
+ */
+static int read_decode_convert_and_store(AVAudioFifo *fifo,
+ AVFormatContext *input_format_context,
+ AVCodecContext *input_codec_context,
+ AVCodecContext *output_codec_context,
+ SwrContext *resampler_context,
+ int *finished)
+{
+ /** Temporary storage of the input samples of the frame read from the file. */
+ AVFrame *input_frame = NULL;
+ /** Temporary storage for the converted input samples. */
+ uint8_t **converted_input_samples = NULL;
+ int data_present;
+ int ret = AVERROR_EXIT;
+
+ /** Initialize temporary storage for one input frame. */
+ if (init_input_frame(&input_frame))
+ goto cleanup;
+ /** Decode one frame worth of audio samples. */
+ if (decode_audio_frame(input_frame, input_format_context,
+ input_codec_context, &data_present, finished))
+ goto cleanup;
+ /**
+ * If we are at the end of the file and there are no more samples
+ * in the decoder which are delayed, we are actually finished.
+ * This must not be treated as an error.
+ */
+ if (*finished && !data_present) {
+ ret = 0;
+ goto cleanup;
+ }
+ /** If there is decoded data, convert and store it */
+ if (data_present) {
+ /** Initialize the temporary storage for the converted input samples. */
+ if (init_converted_samples(&converted_input_samples, output_codec_context,
+ input_frame->nb_samples))
+ goto cleanup;
+
+ /**
+ * Convert the input samples to the desired output sample format.
+ * This requires a temporary storage provided by converted_input_samples.
+ */
+ if (convert_samples((const uint8_t**)input_frame->extended_data, converted_input_samples,
+ input_frame->nb_samples, resampler_context))
+ goto cleanup;
+
+ /** Add the converted input samples to the FIFO buffer for later processing. */
+ if (add_samples_to_fifo(fifo, converted_input_samples,
+ input_frame->nb_samples))
+ goto cleanup;
+ ret = 0;
+ }
+ ret = 0;
+
+cleanup:
+ if (converted_input_samples) {
+ av_freep(&converted_input_samples[0]);
+ free(converted_input_samples);
+ }
+ av_frame_free(&input_frame);
+
+ return ret;
+}
+
+/**
+ * Initialize one input frame for writing to the output file.
+ * The frame will be exactly frame_size samples large.
+ */
+static int init_output_frame(AVFrame **frame,
+ AVCodecContext *output_codec_context,
+ int frame_size)
+{
+ int error;
+
+ /** Create a new frame to store the audio samples. */
+ if (!(*frame = av_frame_alloc())) {
+ fprintf(stderr, "Could not allocate output frame\n");
+ return AVERROR_EXIT;
+ }
+
+ /**
+ * Set the frame's parameters, especially its size and format.
+ * av_frame_get_buffer needs this to allocate memory for the
+ * audio samples of the frame.
+ * Default channel layouts based on the number of channels
+ * are assumed for simplicity.
+ */
+ (*frame)->nb_samples = frame_size;
+ (*frame)->channel_layout = output_codec_context->channel_layout;
+ (*frame)->format = output_codec_context->sample_fmt;
+ (*frame)->sample_rate = output_codec_context->sample_rate;
+
+ /**
+ * Allocate the samples of the created frame. This call will make
+ * sure that the audio frame can hold as many samples as specified.
+ */
+ if ((error = av_frame_get_buffer(*frame, 0)) < 0) {
+ fprintf(stderr, "Could allocate output frame samples (error '%s')\n",
+ get_error_text(error));
+ av_frame_free(frame);
+ return error;
+ }
+
+ return 0;
+}
+
+/** Encode one frame worth of audio to the output file. */
+static int encode_audio_frame(AVFrame *frame,
+ AVFormatContext *output_format_context,
+ AVCodecContext *output_codec_context,
+ int *data_present)
+{
+ /** Packet used for temporary storage. */
+ AVPacket output_packet;
+ int error;
+ init_packet(&output_packet);
+
+ /**
+ * Encode the audio frame and store it in the temporary packet.
+ * The output audio stream encoder is used to do this.
+ */
+ if ((error = avcodec_encode_audio2(output_codec_context, &output_packet,
+ frame, data_present)) < 0) {
+ fprintf(stderr, "Could not encode frame (error '%s')\n",
+ get_error_text(error));
+ av_free_packet(&output_packet);
+ return error;
+ }
+
+ /** Write one audio frame from the temporary packet to the output file. */
+ if (*data_present) {
+ if ((error = av_write_frame(output_format_context, &output_packet)) < 0) {
+ fprintf(stderr, "Could not write frame (error '%s')\n",
+ get_error_text(error));
+ av_free_packet(&output_packet);
+ return error;
+ }
+
+ av_free_packet(&output_packet);
+ }
+
+ return 0;
+}
+
+/**
+ * Load one audio frame from the FIFO buffer, encode and write it to the
+ * output file.
+ */
+static int load_encode_and_write(AVAudioFifo *fifo,
+ AVFormatContext *output_format_context,
+ AVCodecContext *output_codec_context)
+{
+ /** Temporary storage of the output samples of the frame written to the file. */
+ AVFrame *output_frame;
+ /**
+ * Use the maximum number of possible samples per frame.
+ * If there is less than the maximum possible frame size in the FIFO
+ * buffer use this number. Otherwise, use the maximum possible frame size
+ */
+ const int frame_size = FFMIN(av_audio_fifo_size(fifo),
+ output_codec_context->frame_size);
+ int data_written;
+
+ /** Initialize temporary storage for one output frame. */
+ if (init_output_frame(&output_frame, output_codec_context, frame_size))
+ return AVERROR_EXIT;
+
+ /**
+ * Read as many samples from the FIFO buffer as required to fill the frame.
+ * The samples are stored in the frame temporarily.
+ */
+ if (av_audio_fifo_read(fifo, (void **)output_frame->data, frame_size) < frame_size) {
+ fprintf(stderr, "Could not read data from FIFO\n");
+ av_frame_free(&output_frame);
+ return AVERROR_EXIT;
+ }
+
+ /** Encode one frame worth of audio samples. */
+ if (encode_audio_frame(output_frame, output_format_context,
+ output_codec_context, &data_written)) {
+ av_frame_free(&output_frame);
+ return AVERROR_EXIT;
+ }
+ av_frame_free(&output_frame);
+ return 0;
+}
+
+/** Write the trailer of the output file container. */
+static int write_output_file_trailer(AVFormatContext *output_format_context)
+{
+ int error;
+ if ((error = av_write_trailer(output_format_context)) < 0) {
+ fprintf(stderr, "Could not write output file trailer (error '%s')\n",
+ get_error_text(error));
+ return error;
+ }
+ return 0;
+}
+
+/** Convert an audio file to an AAC file in an MP4 container. */
+int main(int argc, char **argv)
+{
+ AVFormatContext *input_format_context = NULL, *output_format_context = NULL;
+ AVCodecContext *input_codec_context = NULL, *output_codec_context = NULL;
+ SwrContext *resample_context = NULL;
+ AVAudioFifo *fifo = NULL;
+ int ret = AVERROR_EXIT;
+
+ if (argc < 3) {
+ fprintf(stderr, "Usage: %s <input file> <output file>\n", argv[0]);
+ exit(1);
+ }
+
+ /** Register all codecs and formats so that they can be used. */
+ av_register_all();
+ /** Open the input file for reading. */
+ if (open_input_file(argv[1], &input_format_context,
+ &input_codec_context))
+ goto cleanup;
+ /** Open the output file for writing. */
+ if (open_output_file(argv[2], input_codec_context,
+ &output_format_context, &output_codec_context))
+ goto cleanup;
+ /** Initialize the resampler to be able to convert audio sample formats. */
+ if (init_resampler(input_codec_context, output_codec_context,
+ &resample_context))
+ goto cleanup;
+ /** Initialize the FIFO buffer to store audio samples to be encoded. */
+ if (init_fifo(&fifo))
+ goto cleanup;
+ /** Write the header of the output file container. */
+ if (write_output_file_header(output_format_context))
+ goto cleanup;
+
+ /**
+ * Loop as long as we have input samples to read or output samples
+ * to write; abort as soon as we have neither.
+ */
+ while (1) {
+ /** Use the encoder's desired frame size for processing. */
+ const int output_frame_size = output_codec_context->frame_size;
+ int finished = 0;
+
+ /**
+ * Make sure that there is one frame worth of samples in the FIFO
+ * buffer so that the encoder can do its work.
+ * Since the decoder's and the encoder's frame size may differ, we
+ * need to FIFO buffer to store as many frames worth of input samples
+ * that they make up at least one frame worth of output samples.
+ */
+ while (av_audio_fifo_size(fifo) < output_frame_size) {
+ /**
+ * Decode one frame worth of audio samples, convert it to the
+ * output sample format and put it into the FIFO buffer.
+ */
+ if (read_decode_convert_and_store(fifo, input_format_context,
+ input_codec_context,
+ output_codec_context,
+ resample_context, &finished))
+ goto cleanup;
+
+ /**
+ * If we are at the end of the input file, we continue
+ * encoding the remaining audio samples to the output file.
+ */
+ if (finished)
+ break;
+ }
+
+ /**
+ * If we have enough samples for the encoder, we encode them.
+ * At the end of the file, we pass the remaining samples to
+ * the encoder.
+ */
+ while (av_audio_fifo_size(fifo) >= output_frame_size ||
+ (finished && av_audio_fifo_size(fifo) > 0))
+ /**
+ * Take one frame worth of audio samples from the FIFO buffer,
+ * encode it and write it to the output file.
+ */
+ if (load_encode_and_write(fifo, output_format_context,
+ output_codec_context))
+ goto cleanup;
+
+ /**
+ * If we are at the end of the input file and have encoded
+ * all remaining samples, we can exit this loop and finish.
+ */
+ if (finished) {
+ int data_written;
+ /** Flush the encoder as it may have delayed frames. */
+ do {
+ if (encode_audio_frame(NULL, output_format_context,
+ output_codec_context, &data_written))
+ goto cleanup;
+ } while (data_written);
+ break;
+ }
+ }
+
+ /** Write the trailer of the output file container. */
+ if (write_output_file_trailer(output_format_context))
+ goto cleanup;
+ ret = 0;
+
+cleanup:
+ if (fifo)
+ av_audio_fifo_free(fifo);
+ swr_free(&resample_context);
+ if (output_codec_context)
+ avcodec_close(output_codec_context);
+ if (output_format_context) {
+ avio_close(output_format_context->pb);
+ avformat_free_context(output_format_context);
+ }
+ if (input_codec_context)
+ avcodec_close(input_codec_context);
+ if (input_format_context)
+ avformat_close_input(&input_format_context);
+
+ return ret;
+}
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg FAQ: </title>
+
+<meta name="description" content="FFmpeg FAQ: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg FAQ: ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg FAQ</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-General-Questions" href="#General-Questions">1. General Questions</a>
+ <ul class="toc">
+ <li><a name="toc-Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f" href="#Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f">1.1 Why doesn’t FFmpeg support feature [xyz]?</a></li>
+ <li><a name="toc-FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f" href="#FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f">1.2 FFmpeg does not support codec XXX. Can you include a Windows DLL loader to support it?</a></li>
+ <li><a name="toc-I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e" href="#I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e">1.3 I cannot read this file although this format seems to be supported by ffmpeg.</a></li>
+ <li><a name="toc-Which-codecs-are-supported-by-Windows_003f" href="#Which-codecs-are-supported-by-Windows_003f">1.4 Which codecs are supported by Windows?</a></li>
+ </ul></li>
+ <li><a name="toc-Compilation" href="#Compilation">2. Compilation</a>
+ <ul class="toc">
+ <li><a name="toc-error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027" href="#error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027">2.1 <code>error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'</code></a></li>
+ <li><a name="toc-I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f" href="#I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f">2.2 I have installed this library with my distro’s package manager. Why does <code>configure</code> not see it?</a></li>
+ </ul></li>
+ <li><a name="toc-Usage" href="#Usage">3. Usage</a>
+ <ul class="toc">
+ <li><a name="toc-ffmpeg-does-not-work_003b-what-is-wrong_003f" href="#ffmpeg-does-not-work_003b-what-is-wrong_003f">3.1 ffmpeg does not work; what is wrong?</a></li>
+ <li><a name="toc-How-do-I-encode-single-pictures-into-movies_003f" href="#How-do-I-encode-single-pictures-into-movies_003f">3.2 How do I encode single pictures into movies?</a></li>
+ <li><a name="toc-How-do-I-encode-movie-to-single-pictures_003f" href="#How-do-I-encode-movie-to-single-pictures_003f">3.3 How do I encode movie to single pictures?</a></li>
+ <li><a name="toc-Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f" href="#Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f">3.4 Why do I see a slight quality degradation with multithreaded MPEG* encoding?</a></li>
+ <li><a name="toc-How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f" href="#How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f">3.5 How can I read from the standard input or write to the standard output?</a></li>
+ <li><a name="toc-_002df-jpeg-doesn_0027t-work_002e" href="#g_t_002df-jpeg-doesn_0027t-work_002e">3.6 -f jpeg doesn’t work.</a></li>
+ <li><a name="toc-Why-can-I-not-change-the-frame-rate_003f" href="#Why-can-I-not-change-the-frame-rate_003f">3.7 Why can I not change the frame rate?</a></li>
+ <li><a name="toc-How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f" href="#How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f">3.8 How do I encode Xvid or DivX video with ffmpeg?</a></li>
+ <li><a name="toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f" href="#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f">3.9 Which are good parameters for encoding high quality MPEG-4?</a></li>
+ <li><a name="toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f" href="#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f">3.10 Which are good parameters for encoding high quality MPEG-1/MPEG-2?</a></li>
+ <li><a name="toc-Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f" href="#Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f">3.11 Interlaced video looks very bad when encoded with ffmpeg, what is wrong?</a></li>
+ <li><a name="toc-How-can-I-read-DirectShow-files_003f" href="#How-can-I-read-DirectShow-files_003f">3.12 How can I read DirectShow files?</a></li>
+ <li><a name="toc-How-can-I-join-video-files_003f" href="#How-can-I-join-video-files_003f">3.13 How can I join video files?</a></li>
+ <li><a name="toc-How-can-I-concatenate-video-files_003f" href="#How-can-I-concatenate-video-files_003f">3.14 How can I concatenate video files?</a>
+ <ul class="toc">
+ <li><a name="toc-Concatenating-using-the-concat-filter" href="#Concatenating-using-the-concat-filter">3.14.1 Concatenating using the concat <em>filter</em></a></li>
+ <li><a name="toc-Concatenating-using-the-concat-demuxer" href="#Concatenating-using-the-concat-demuxer">3.14.2 Concatenating using the concat <em>demuxer</em></a></li>
+ <li><a name="toc-Concatenating-using-the-concat-protocol-_0028file-level_0029" href="#Concatenating-using-the-concat-protocol-_0028file-level_0029">3.14.3 Concatenating using the concat <em>protocol</em> (file level)</a></li>
+ <li><a name="toc-Concatenating-using-raw-audio-and-video" href="#Concatenating-using-raw-audio-and-video">3.14.4 Concatenating using raw audio and video</a></li>
+ </ul></li>
+ <li><a name="toc-Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e" href="#Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e">3.15 Using ‘<samp>-f lavfi</samp>’, audio becomes mono for no apparent reason.</a></li>
+ <li><a name="toc-Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f" href="#Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f">3.16 Why does FFmpeg not see the subtitles in my VOB file?</a></li>
+ <li><a name="toc-Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f" href="#Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f">3.17 Why was the <code>ffmpeg</code> ‘<samp>-sameq</samp>’ option removed? What to use instead?</a></li>
+ </ul></li>
+ <li><a name="toc-Development" href="#Development">4. Development</a>
+ <ul class="toc">
+ <li><a name="toc-Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f" href="#Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f">4.1 Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat?</a></li>
+ <li><a name="toc-Can-you-support-my-C-compiler-XXX_003f" href="#Can-you-support-my-C-compiler-XXX_003f">4.2 Can you support my C compiler XXX?</a></li>
+ <li><a name="toc-Is-Microsoft-Visual-C_002b_002b-supported_003f" href="#Is-Microsoft-Visual-C_002b_002b-supported_003f">4.3 Is Microsoft Visual C++ supported?</a></li>
+ <li><a name="toc-Can-you-add-automake_002c-libtool-or-autoconf-support_003f" href="#Can-you-add-automake_002c-libtool-or-autoconf-support_003f">4.4 Can you add automake, libtool or autoconf support?</a></li>
+ <li><a name="toc-Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f" href="#Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f">4.5 Why not rewrite FFmpeg in object-oriented C++?</a></li>
+ <li><a name="toc-Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f" href="#Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f">4.6 Why are the ffmpeg programs devoid of debugging symbols?</a></li>
+ <li><a name="toc-I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f" href="#I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f">4.7 I do not like the LGPL, can I contribute code under the GPL instead?</a></li>
+ <li><a name="toc-I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e" href="#I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e">4.8 I’m using FFmpeg from within my C application but the linker complains about missing symbols from the libraries themselves.</a></li>
+ <li><a name="toc-I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e" href="#I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e">4.9 I’m using FFmpeg from within my C++ application but the linker complains about missing symbols which seem to be available.</a></li>
+ <li><a name="toc-I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope" href="#I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope">4.10 I’m using libavutil from within my C++ application but the compiler complains about ’UINT64_C’ was not declared in this scope</a></li>
+ <li><a name="toc-I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f" href="#I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f">4.11 I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?</a></li>
+ <li><a name="toc-Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f" href="#Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f">4.12 Where is the documentation about ffv1, msmpeg4, asv1, 4xm?</a></li>
+ <li><a name="toc-How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f" href="#How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f">4.13 How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?</a></li>
+ <li><a name="toc-AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e" href="#AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e">4.14 AVStream.r_frame_rate is wrong, it is much larger than the frame rate.</a></li>
+ <li><a name="toc-Why-is-make-fate-not-running-all-tests_003f" href="#Why-is-make-fate-not-running-all-tests_003f">4.15 Why is <code>make fate</code> not running all tests?</a></li>
+ <li><a name="toc-Why-is-make-fate-not-finding-the-samples_003f" href="#Why-is-make-fate-not-finding-the-samples_003f">4.16 Why is <code>make fate</code> not finding the samples?</a></li>
+ </ul>
+</li>
+</ul>
+</div>
+
+<a name="General-Questions"></a>
+<h1 class="chapter"><a href="faq.html#toc-General-Questions">1. General Questions</a></h1>
+
+<a name="Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-doesn_0027t-FFmpeg-support-feature-_005bxyz_005d_003f">1.1 Why doesn’t FFmpeg support feature [xyz]?</a></h2>
+
+<p>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.
+</p>
+<a name="FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f"></a>
+<h2 class="section"><a href="faq.html#toc-FFmpeg-does-not-support-codec-XXX_002e-Can-you-include-a-Windows-DLL-loader-to-support-it_003f">1.2 FFmpeg does not support codec XXX. Can you include a Windows DLL loader to support it?</a></h2>
+
+<p>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.
+</p>
+<a name="I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e"></a>
+<h2 class="section"><a href="faq.html#toc-I-cannot-read-this-file-although-this-format-seems-to-be-supported-by-ffmpeg_002e">1.3 I cannot read this file although this format seems to be supported by ffmpeg.</a></h2>
+
+<p>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.
+</p>
+<a name="Which-codecs-are-supported-by-Windows_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Which-codecs-are-supported-by-Windows_003f">1.4 Which codecs are supported by Windows?</a></h2>
+
+<p>Windows does not support standard formats like MPEG very well, unless you
+install some additional codecs.
+</p>
+<p>The following list of video codecs should work on most Windows systems:
+</p><dl compact="compact">
+<dt> ‘<samp>msmpeg4v2</samp>’</dt>
+<dd><p>.avi/.asf
+</p></dd>
+<dt> ‘<samp>msmpeg4</samp>’</dt>
+<dd><p>.asf only
+</p></dd>
+<dt> ‘<samp>wmv1</samp>’</dt>
+<dd><p>.asf only
+</p></dd>
+<dt> ‘<samp>wmv2</samp>’</dt>
+<dd><p>.asf only
+</p></dd>
+<dt> ‘<samp>mpeg4</samp>’</dt>
+<dd><p>Only if you have some MPEG-4 codec like ffdshow or Xvid installed.
+</p></dd>
+<dt> ‘<samp>mpeg1video</samp>’</dt>
+<dd><p>.mpg only
+</p></dd>
+</dl>
+<p>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.
+</p>
+<p>The following list of audio codecs should work on most Windows systems:
+</p><dl compact="compact">
+<dt> ‘<samp>adpcm_ima_wav</samp>’</dt>
+<dt> ‘<samp>adpcm_ms</samp>’</dt>
+<dt> ‘<samp>pcm_s16le</samp>’</dt>
+<dd><p>always
+</p></dd>
+<dt> ‘<samp>libmp3lame</samp>’</dt>
+<dd><p>If some MP3 codec like LAME is installed.
+</p></dd>
+</dl>
+
+
+<a name="Compilation"></a>
+<h1 class="chapter"><a href="faq.html#toc-Compilation">2. Compilation</a></h1>
+
+<a name="error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027"></a>
+<h2 class="section"><a href="faq.html#toc-error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027">2.1 <code>error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'</code></a></h2>
+
+<p>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.
+</p>
+<p>Also note that (some of) the gcc developers believe this is not a bug or
+not a bug they should fix:
+<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203">http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203</a>.
+Then again, some of them do not know the difference between an undecidable
+problem and an NP-hard problem...
+</p>
+<a name="I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f"></a>
+<h2 class="section"><a href="faq.html#toc-I-have-installed-this-library-with-my-distro_0027s-package-manager_002e-Why-does-configure-not-see-it_003f">2.2 I have installed this library with my distro’s package manager. Why does <code>configure</code> not see it?</a></h2>
+
+<p>Distributions usually split libraries in several packages. The main package
+contains the files necessary to run programs using the library. The
+development package contains the files necessary to build programs using the
+library. Sometimes, docs and/or data are in a separate package too.
+</p>
+<p>To build FFmpeg, you need to install the development package. It is usually
+called ‘<tt>libfoo-dev</tt>’ or ‘<tt>libfoo-devel</tt>’. You can remove it after the
+build is finished, but be sure to keep the main package.
+</p>
+<a name="Usage"></a>
+<h1 class="chapter"><a href="faq.html#toc-Usage">3. Usage</a></h1>
+
+<a name="ffmpeg-does-not-work_003b-what-is-wrong_003f"></a>
+<h2 class="section"><a href="faq.html#toc-ffmpeg-does-not-work_003b-what-is-wrong_003f">3.1 ffmpeg does not work; what is wrong?</a></h2>
+
+<p>Try a <code>make distclean</code> in the ffmpeg source directory before the build.
+If this does not help see
+(<a href="http://ffmpeg.org/bugreports.html">http://ffmpeg.org/bugreports.html</a>).
+</p>
+<a name="How-do-I-encode-single-pictures-into-movies_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-do-I-encode-single-pictures-into-movies_003f">3.2 How do I encode single pictures into movies?</a></h2>
+
+<p>First, rename your pictures to follow a numerical sequence.
+For example, img1.jpg, img2.jpg, img3.jpg,...
+Then you may run:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
+</pre></td></tr></table>
+
+<p>Notice that ‘<samp>%d</samp>’ is replaced by the image number.
+</p>
+<p>‘<tt>img%03d.jpg</tt>’ means the sequence ‘<tt>img001.jpg</tt>’, ‘<tt>img002.jpg</tt>’, etc.
+</p>
+<p>Use the ‘<samp>-start_number</samp>’ option to declare a starting number for
+the sequence. This is useful if your sequence does not start with
+‘<tt>img001.jpg</tt>’ but is still in a numerical order. The following
+example will start with ‘<tt>img100.jpg</tt>’:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -start_number 100 -i img%d.jpg /tmp/a.mpg
+</pre></td></tr></table>
+
+<p>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 <code>*jpg</code> to the ‘<tt>/tmp</tt>’ directory in the sequence of
+‘<tt>img001.jpg</tt>’, ‘<tt>img002.jpg</tt>’ and so on.
+</p>
+<table><tr><td> </td><td><pre class="example">x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
+</pre></td></tr></table>
+
+<p>If you want to sequence them by oldest modified first, substitute
+<code>$(ls -r -t *jpg)</code> in place of <code>*jpg</code>.
+</p>
+<p>Then run:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
+</pre></td></tr></table>
+
+<p>The same logic is used for any image format that ffmpeg reads.
+</p>
+<p>You can also use <code>cat</code> to pipe images to ffmpeg:
+</p>
+<table><tr><td> </td><td><pre class="example">cat *.jpg | ffmpeg -f image2pipe -c:v mjpeg -i - output.mpg
+</pre></td></tr></table>
+
+<a name="How-do-I-encode-movie-to-single-pictures_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-do-I-encode-movie-to-single-pictures_003f">3.3 How do I encode movie to single pictures?</a></h2>
+
+<p>Use:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i movie.mpg movie%d.jpg
+</pre></td></tr></table>
+
+<p>The ‘<tt>movie.mpg</tt>’ used as input will be converted to
+‘<tt>movie1.jpg</tt>’, ‘<tt>movie2.jpg</tt>’, etc...
+</p>
+<p>Instead of relying on file format self-recognition, you may also use
+</p><dl compact="compact">
+<dt> ‘<samp>-c:v ppm</samp>’</dt>
+<dt> ‘<samp>-c:v png</samp>’</dt>
+<dt> ‘<samp>-c:v mjpeg</samp>’</dt>
+</dl>
+<p>to force the encoding.
+</p>
+<p>Applying that to the previous example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg
+</pre></td></tr></table>
+
+<p>Beware that there is no "jpeg" codec. Use "mjpeg" instead.
+</p>
+<a name="Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-do-I-see-a-slight-quality-degradation-with-multithreaded-MPEG_002a-encoding_003f">3.4 Why do I see a slight quality degradation with multithreaded MPEG* encoding?</a></h2>
+
+<p>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.
+</p>
+<a name="How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-can-I-read-from-the-standard-input-or-write-to-the-standard-output_003f">3.5 How can I read from the standard input or write to the standard output?</a></h2>
+
+<p>Use ‘<tt>-</tt>’ as file name.
+</p>
+<a name="g_t_002df-jpeg-doesn_0027t-work_002e"></a>
+<h2 class="section"><a href="faq.html#toc-_002df-jpeg-doesn_0027t-work_002e">3.6 -f jpeg doesn’t work.</a></h2>
+
+<p>Try ’-f image2 test%d.jpg’.
+</p>
+<a name="Why-can-I-not-change-the-frame-rate_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-can-I-not-change-the-frame-rate_003f">3.7 Why can I not change the frame rate?</a></h2>
+
+<p>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.
+</p>
+<a name="How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-do-I-encode-Xvid-or-DivX-video-with-ffmpeg_003f">3.8 How do I encode Xvid or DivX video with ffmpeg?</a></h2>
+
+<p>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.
+</p>
+<a name="Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f">3.9 Which are good parameters for encoding high quality MPEG-4?</a></h2>
+
+<p>’-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’.
+</p>
+<a name="Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Which-are-good-parameters-for-encoding-high-quality-MPEG_002d1_002fMPEG_002d2_003f">3.10 Which are good parameters for encoding high quality MPEG-1/MPEG-2?</a></h2>
+
+<p>’-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.
+</p>
+<a name="Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Interlaced-video-looks-very-bad-when-encoded-with-ffmpeg_002c-what-is-wrong_003f">3.11 Interlaced video looks very bad when encoded with ffmpeg, what is wrong?</a></h2>
+
+<p>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.
+</p>
+<a name="How-can-I-read-DirectShow-files_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-can-I-read-DirectShow-files_003f">3.12 How can I read DirectShow files?</a></h2>
+
+<p>If you have built FFmpeg with <code>./configure --enable-avisynth</code>
+(only possible on MinGW/Cygwin platforms),
+then you may use any file that DirectShow can read as input.
+</p>
+<p>Just create an "input.avs" text file with this single line ...
+</p><table><tr><td> </td><td><pre class="example">DirectShowSource("C:\path to your file\yourfile.asf")
+</pre></td></tr></table>
+<p>... and then feed that text file to ffmpeg:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.avs
+</pre></td></tr></table>
+
+<p>For ANY other help on AviSynth, please visit the
+<a href="http://www.avisynth.org/">AviSynth homepage</a>.
+</p>
+<a name="How-can-I-join-video-files_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-can-I-join-video-files_003f">3.13 How can I join video files?</a></h2>
+
+<p>To "join" video files is quite ambiguous. The following list explains the
+different kinds of "joining" and points out how those are addressed in
+FFmpeg. To join video files may mean:
+</p>
+<ul>
+<li>
+To put them one after the other: this is called to <em>concatenate</em> them
+(in short: concat) and is addressed
+<a href="#How-can-I-concatenate-video-files">in this very faq</a>.
+
+</li><li>
+To put them together in the same file, to let the user choose between the
+different versions (example: different audio languages): this is called to
+<em>multiplex</em> them together (in short: mux), and is done by simply
+invoking ffmpeg with several ‘<samp>-i</samp>’ options.
+
+</li><li>
+For audio, to put all channels together in a single stream (example: two
+mono streams into one stereo stream): this is sometimes called to
+<em>merge</em> them, and can be done using the
+<a href="http://ffmpeg.org/ffmpeg-filters.html#amerge"><code>amerge</code></a> filter.
+
+</li><li>
+For audio, to play one on top of the other: this is called to <em>mix</em>
+them, and can be done by first merging them into a single stream and then
+using the <a href="http://ffmpeg.org/ffmpeg-filters.html#pan"><code>pan</code></a> filter to mix
+the channels at will.
+
+</li><li>
+For video, to display both together, side by side or one on top of a part of
+the other; it can be done using the
+<a href="http://ffmpeg.org/ffmpeg-filters.html#overlay"><code>overlay</code></a> video filter.
+
+</li></ul>
+
+<p><a name="How-can-I-concatenate-video-files"></a>
+</p><a name="How-can-I-concatenate-video-files_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-can-I-concatenate-video-files_003f">3.14 How can I concatenate video files?</a></h2>
+
+<p>There are several solutions, depending on the exact circumstances.
+</p>
+<a name="Concatenating-using-the-concat-filter"></a>
+<h3 class="subsection"><a href="faq.html#toc-Concatenating-using-the-concat-filter">3.14.1 Concatenating using the concat <em>filter</em></a></h3>
+
+<p>FFmpeg has a <a href="http://ffmpeg.org/ffmpeg-filters.html#concat"><code>concat</code></a> filter designed specifically for that, with examples in the
+documentation. This operation is recommended if you need to re-encode.
+</p>
+<a name="Concatenating-using-the-concat-demuxer"></a>
+<h3 class="subsection"><a href="faq.html#toc-Concatenating-using-the-concat-demuxer">3.14.2 Concatenating using the concat <em>demuxer</em></a></h3>
+
+<p>FFmpeg has a <a href="http://www.ffmpeg.org/ffmpeg-formats.html#concat"><code>concat</code></a> demuxer which you can use when you want to avoid a re-encode and
+your format doesn’t support file level concatenation.
+</p>
+<a name="Concatenating-using-the-concat-protocol-_0028file-level_0029"></a>
+<h3 class="subsection"><a href="faq.html#toc-Concatenating-using-the-concat-protocol-_0028file-level_0029">3.14.3 Concatenating using the concat <em>protocol</em> (file level)</a></h3>
+
+<p>FFmpeg has a <a href="http://ffmpeg.org/ffmpeg-protocols.html#concat"><code>concat</code></a> protocol designed specifically for that, with examples in the
+documentation.
+</p>
+<p>A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow to concatenate
+video by merely concatenating the files containing them.
+</p>
+<p>Hence you may concatenate your multimedia files by first transcoding them to
+these privileged formats, then using the humble <code>cat</code> command (or the
+equally humble <code>copy</code> under Windows), and finally transcoding back to your
+format of choice.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
+ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
+cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
+ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
+</pre></td></tr></table>
+
+<p>Additionally, you can use the <code>concat</code> protocol instead of <code>cat</code> or
+<code>copy</code> which will avoid creation of a potentially huge intermediate file.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
+ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
+ffmpeg -i concat:"intermediate1.mpg|intermediate2.mpg" -c copy intermediate_all.mpg
+ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
+</pre></td></tr></table>
+
+<p>Note that you may need to escape the character "|" which is special for many
+shells.
+</p>
+<p>Another option is usage of named pipes, should your platform support it:
+</p>
+<table><tr><td> </td><td><pre class="example">mkfifo intermediate1.mpg
+mkfifo intermediate2.mpg
+ffmpeg -i input1.avi -qscale:v 1 -y intermediate1.mpg < /dev/null &
+ffmpeg -i input2.avi -qscale:v 1 -y intermediate2.mpg < /dev/null &
+cat intermediate1.mpg intermediate2.mpg |\
+ffmpeg -f mpeg -i - -c:v mpeg4 -acodec libmp3lame output.avi
+</pre></td></tr></table>
+
+<a name="Concatenating-using-raw-audio-and-video"></a>
+<h3 class="subsection"><a href="faq.html#toc-Concatenating-using-raw-audio-and-video">3.14.4 Concatenating using raw audio and video</a></h3>
+
+<p>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
+<code>tail</code> as seen below. Note that when piping through <code>tail</code> you
+must use command grouping, <code>{ ;}</code>, to background properly.
+</p>
+<p>For example, let’s say we want to concatenate two FLV files into an
+output.flv file:
+</p>
+<table><tr><td> </td><td><pre class="example">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 \
+ -y output.flv
+rm temp[12].[av] all.[av]
+</pre></td></tr></table>
+
+<a name="Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e"></a>
+<h2 class="section"><a href="faq.html#toc-Using-_002df-lavfi_002c-audio-becomes-mono-for-no-apparent-reason_002e">3.15 Using ‘<samp>-f lavfi</samp>’, audio becomes mono for no apparent reason.</a></h2>
+
+<p>Use ‘<samp>-dumpgraph -</samp>’ to find out exactly where the channel layout is
+lost.
+</p>
+<p>Most likely, it is through <code>auto-inserted aresample</code>. Try to understand
+why the converting filter was needed at that place.
+</p>
+<p>Just before the output is a likely place, as ‘<samp>-f lavfi</samp>’ currently
+only support packed S16.
+</p>
+<p>Then insert the correct <code>aformat</code> explicitly in the filtergraph,
+specifying the exact format.
+</p>
+<table><tr><td> </td><td><pre class="example">aformat=sample_fmts=s16:channel_layouts=stereo
+</pre></td></tr></table>
+
+<a name="Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f">3.16 Why does FFmpeg not see the subtitles in my VOB file?</a></h2>
+
+<p>VOB and a few other formats do not have a global header that describes
+everything present in the file. Instead, applications are supposed to scan
+the file to see what it contains. Since VOB files are frequently large, only
+the beginning is scanned. If the subtitles happen only later in the file,
+they will not be initally detected.
+</p>
+<p>Some applications, including the <code>ffmpeg</code> command-line tool, can only
+work with streams that were detected during the initial scan; streams that
+are detected later are ignored.
+</p>
+<p>The size of the initial scan is controlled by two options: <code>probesize</code>
+(default ~5 Mo) and <code>analyzeduration</code> (default 5,000,000 µs = 5 s). For
+the subtitle stream to be detected, both values must be large enough.
+</p>
+<a name="Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-was-the-ffmpeg-_002dsameq-option-removed_003f-What-to-use-instead_003f">3.17 Why was the <code>ffmpeg</code> ‘<samp>-sameq</samp>’ option removed? What to use instead?</a></h2>
+
+<p>The ‘<samp>-sameq</samp>’ option meant "same quantizer", and made sense only in a
+very limited set of cases. Unfortunately, a lot of people mistook it for
+"same quality" and used it in places where it did not make sense: it had
+roughly the expected visible effect, but achieved it in a very inefficient
+way.
+</p>
+<p>Each encoder has its own set of options to set the quality-vs-size balance,
+use the options for the encoder you are using to set the quality level to a
+point acceptable for your tastes. The most common options to do that are
+‘<samp>-qscale</samp>’ and ‘<samp>-qmax</samp>’, but you should peruse the documentation
+of the encoder you chose.
+</p>
+<a name="Development"></a>
+<h1 class="chapter"><a href="faq.html#toc-Development">4. Development</a></h1>
+
+<a name="Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Are-there-examples-illustrating-how-to-use-the-FFmpeg-libraries_002c-particularly-libavcodec-and-libavformat_003f">4.1 Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat?</a></h2>
+
+<p>Yes. Check the ‘<tt>doc/examples</tt>’ directory in the source
+repository, also available online at:
+<a href="https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples">https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples</a>.
+</p>
+<p>Examples are also installed by default, usually in
+<code>$PREFIX/share/ffmpeg/examples</code>.
+</p>
+<p>Also you may 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 (<a href="projects.html">projects.html</a>).
+</p>
+<a name="Can-you-support-my-C-compiler-XXX_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Can-you-support-my-C-compiler-XXX_003f">4.2 Can you support my C compiler XXX?</a></h2>
+
+<p>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 <code>#ifdef</code>s related to the compiler.
+</p>
+<a name="Is-Microsoft-Visual-C_002b_002b-supported_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Is-Microsoft-Visual-C_002b_002b-supported_003f">4.3 Is Microsoft Visual C++ supported?</a></h2>
+
+<p>Yes. Please see the <a href="platform.html">Microsoft Visual C++</a>
+section in the FFmpeg documentation.
+</p>
+<a name="Can-you-add-automake_002c-libtool-or-autoconf-support_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Can-you-add-automake_002c-libtool-or-autoconf-support_003f">4.4 Can you add automake, libtool or autoconf support?</a></h2>
+
+<p>No. These tools are too bloated and they complicate the build.
+</p>
+<a name="Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-not-rewrite-FFmpeg-in-object_002doriented-C_002b_002b_003f">4.5 Why not rewrite FFmpeg in object-oriented C++?</a></h2>
+
+<p>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 <a href="http://www.tux.org/lkml/#s15">"Programming Religion"</a>.
+</p>
+<a name="Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-are-the-ffmpeg-programs-devoid-of-debugging-symbols_003f">4.6 Why are the ffmpeg programs devoid of debugging symbols?</a></h2>
+
+<p>The build process creates <code>ffmpeg_g</code>, <code>ffplay_g</code>, etc. which
+contain full debug information. Those binaries are stripped to create
+<code>ffmpeg</code>, <code>ffplay</code>, etc. If you need the debug information, use
+the *_g versions.
+</p>
+<a name="I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f"></a>
+<h2 class="section"><a href="faq.html#toc-I-do-not-like-the-LGPL_002c-can-I-contribute-code-under-the-GPL-instead_003f">4.7 I do not like the LGPL, can I contribute code under the GPL instead?</a></h2>
+
+<p>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.
+</p>
+<a name="I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e"></a>
+<h2 class="section"><a href="faq.html#toc-I_0027m-using-FFmpeg-from-within-my-C-application-but-the-linker-complains-about-missing-symbols-from-the-libraries-themselves_002e">4.8 I’m using FFmpeg from within my C application but the linker complains about missing symbols from the libraries themselves.</a></h2>
+
+<p>FFmpeg builds static libraries by default. In static libraries, dependencies
+are not handled. That has two consequences. First, you must specify the
+libraries in dependency order: <code>-lavdevice</code> must come before
+<code>-lavformat</code>, <code>-lavutil</code> must come after everything else, etc.
+Second, external libraries that are used in FFmpeg have to be specified too.
+</p>
+<p>An easy way to get the full list of required libraries in dependency order
+is to use <code>pkg-config</code>.
+</p>
+<table><tr><td> </td><td><pre class="example">c99 -o program program.c $(pkg-config --cflags --libs libavformat libavcodec)
+</pre></td></tr></table>
+
+<p>See ‘<tt>doc/example/Makefile</tt>’ and ‘<tt>doc/example/pc-uninstalled</tt>’ for
+more details.
+</p>
+<a name="I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e"></a>
+<h2 class="section"><a href="faq.html#toc-I_0027m-using-FFmpeg-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e">4.9 I’m using FFmpeg from within my C++ application but the linker complains about missing symbols which seem to be available.</a></h2>
+
+<p>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 <code>extern "C"</code>.
+</p>
+<p>See <a href="http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3">http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3</a>
+</p>
+<a name="I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope"></a>
+<h2 class="section"><a href="faq.html#toc-I_0027m-using-libavutil-from-within-my-C_002b_002b-application-but-the-compiler-complains-about-_0027UINT64_005fC_0027-was-not-declared-in-this-scope">4.10 I’m using libavutil from within my C++ application but the compiler complains about ’UINT64_C’ was not declared in this scope</a></h2>
+
+<p>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
+</p>
+<a name="I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f"></a>
+<h2 class="section"><a href="faq.html#toc-I-have-a-file-in-memory-_002f-a-API-different-from-_002aopen_002f_002aread_002f-libc-how-do-I-use-it-with-libavformat_003f">4.11 I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?</a></h2>
+
+<p>You have to create a custom AVIOContext using <code>avio_alloc_context</code>,
+see ‘<tt>libavformat/aviobuf.c</tt>’ in FFmpeg and ‘<tt>libmpdemux/demux_lavf.c</tt>’ in MPlayer or MPlayer2 sources.
+</p>
+<a name="Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Where-is-the-documentation-about-ffv1_002c-msmpeg4_002c-asv1_002c-4xm_003f">4.12 Where is the documentation about ffv1, msmpeg4, asv1, 4xm?</a></h2>
+
+<p>see <a href="http://www.ffmpeg.org/~michael/">http://www.ffmpeg.org/~michael/</a>
+</p>
+<a name="How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f"></a>
+<h2 class="section"><a href="faq.html#toc-How-do-I-feed-H_002e263_002dRTP-_0028and-other-codecs-in-RTP_0029-to-libavcodec_003f">4.13 How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?</a></h2>
+
+<p>Even if peculiar since it is network oriented, RTP is a container like any
+other. You have to <em>demux</em> RTP before feeding the payload to libavcodec.
+In this specific case please look at RFC 4629 to see how it should be done.
+</p>
+<a name="AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e"></a>
+<h2 class="section"><a href="faq.html#toc-AVStream_002er_005fframe_005frate-is-wrong_002c-it-is-much-larger-than-the-frame-rate_002e">4.14 AVStream.r_frame_rate is wrong, it is much larger than the frame rate.</a></h2>
+
+<p><code>r_frame_rate</code> 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 <code>r_frame_rate</code>
+will be 150 (it is the least common multiple).
+If you are looking for the average frame rate, see <code>AVStream.avg_frame_rate</code>.
+</p>
+<a name="Why-is-make-fate-not-running-all-tests_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-is-make-fate-not-running-all-tests_003f">4.15 Why is <code>make fate</code> not running all tests?</a></h2>
+
+<p>Make sure you have the fate-suite samples and the <code>SAMPLES</code> Make variable
+or <code>FATE_SAMPLES</code> environment variable or the <code>--samples</code>
+<code>configure</code> option is set to the right path.
+</p>
+<a name="Why-is-make-fate-not-finding-the-samples_003f"></a>
+<h2 class="section"><a href="faq.html#toc-Why-is-make-fate-not-finding-the-samples_003f">4.16 Why is <code>make fate</code> not finding the samples?</a></h2>
+
+<p>Do you happen to have a <code>~</code> 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 <code>~</code> by the full path.
+</p>
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Automated Testing Environment: </title>
+
+<meta name="description" content="FFmpeg Automated Testing Environment: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Automated Testing Environment: ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="Top"></a>
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Automated Testing Environment</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Introduction" href="#Introduction">1. Introduction</a></li>
+ <li><a name="toc-Using-FATE-from-your-FFmpeg-source-directory" href="#Using-FATE-from-your-FFmpeg-source-directory">2. Using FATE from your FFmpeg source directory</a></li>
+ <li><a name="toc-Submitting-the-results-to-the-FFmpeg-result-aggregation-server" href="#Submitting-the-results-to-the-FFmpeg-result-aggregation-server">3. Submitting the results to the FFmpeg result aggregation server</a></li>
+ <li><a name="toc-FATE-makefile-targets-and-variables" href="#FATE-makefile-targets-and-variables">4. FATE makefile targets and variables</a>
+ <ul class="toc">
+ <li><a name="toc-Makefile-targets" href="#Makefile-targets">4.1 Makefile targets</a></li>
+ <li><a name="toc-Makefile-variables" href="#Makefile-variables">4.2 Makefile variables</a></li>
+ <li><a name="toc-Examples" href="#Examples">4.3 Examples</a></li>
+ </ul>
+</li>
+</ul>
+</div>
+
+<a name="Introduction"></a>
+<h1 class="chapter"><a href="fate.html#toc-Introduction">1. Introduction</a></h1>
+
+<p> FATE is an extended regression suite on the client-side and a means
+for results aggregation and presentation on the server-side.
+</p>
+<p> 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.
+</p>
+<p> In any way you can have a look at the publicly viewable FATE results
+by visiting this website:
+</p>
+<p> <a href="http://fate.ffmpeg.org/">http://fate.ffmpeg.org/</a>
+</p>
+<p> 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 their recent contribution. This usually happens on the platforms
+the developers could not test on.
+</p>
+<p> 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.
+</p>
+<p> In the third part you can find a comprehensive listing of FATE makefile
+targets and variables.
+</p>
+
+<a name="Using-FATE-from-your-FFmpeg-source-directory"></a>
+<h1 class="chapter"><a href="fate.html#toc-Using-FATE-from-your-FFmpeg-source-directory">2. Using FATE from your FFmpeg source directory</a></h1>
+
+<p> 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:
+</p>
+<table><tr><td> </td><td><pre class="example">make fate-rsync SAMPLES=fate-suite/
+make fate SAMPLES=fate-suite/
+</pre></td></tr></table>
+
+<p> 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:
+</p>
+<table><tr><td> </td><td><pre class="example">./configure --samples=fate-suite/
+make fate-rsync
+make fate
+</pre></td></tr></table>
+
+<p> 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.
+</p>
+<table><tr><td> </td><td><pre class="example">FATE_SAMPLES=fate-suite/ make fate
+</pre></td></tr></table>
+
+<div class="float alert alert-info">
+<p>Do not put a ’~’ character in the samples path to indicate a home
+directory. Because of shell nuances, this will cause FATE to fail.
+</p></div>
+<p>To use a custom wrapper to run the test, pass ‘<samp>--target-exec</samp>’ to
+<code>configure</code> or set the <var>TARGET_EXEC</var> Make variable.
+</p>
+
+<a name="Submitting-the-results-to-the-FFmpeg-result-aggregation-server"></a>
+<h1 class="chapter"><a href="fate.html#toc-Submitting-the-results-to-the-FFmpeg-result-aggregation-server">3. Submitting the results to the FFmpeg result aggregation server</a></h1>
+
+<p> To submit your results to the server you should run fate through the
+shell script ‘<tt>tests/fate.sh</tt>’ from the FFmpeg sources. This script needs
+to be invoked with a configuration file as its first argument.
+</p>
+<table><tr><td> </td><td><pre class="example">tests/fate.sh /path/to/fate_config
+</pre></td></tr></table>
+
+<p> A configuration file template with comments describing the individual
+configuration variables can be found at ‘<tt>doc/fate_config.sh.template</tt>’.
+</p>
+<p> The mentioned configuration template is also available here:
+<pre class="verbatim">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
+build_only= # set to "yes" for a compile-only instance that skips tests
+
+# the following are optional and map to configure options
+arch=
+cpu=
+cross_prefix=
+as=
+cc=
+ld=
+target_os=
+sysroot=
+target_exec=
+target_path=
+target_samples=
+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'
+</pre></p>
+<p> 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.
+</p>
+<p> 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:
+</p>
+<ul>
+<li> configure.log
+ </li><li> compile.log
+ </li><li> test.log
+ </li><li> report
+ </li><li> version
+</li></ul>
+
+<p> When you have everything working properly you can create an SSH key pair
+and send the public key to the FATE server administrator who can be contacted
+at the email address <a href="mailto:fate-admin@ffmpeg.org">fate-admin@ffmpeg.org</a>.
+</p>
+<p> 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:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>RSA</samp>’</dt>
+<dd><p> d3:f1:83:97:a4:75:2b:a6:fb:d6:e8:aa:81:93:97:51
+</p></dd>
+<dt> ‘<samp>ECDSA</samp>’</dt>
+<dd><p> 76:9f:68:32:04:1e:d5:d4:ec:47:3f:dc:fc:18:17:86
+</p></dd>
+</dl>
+
+<p> If you have problems connecting to the FATE server, it may help to try out
+the <code>ssh</code> command with one or more ‘<samp>-v</samp>’ options. You should
+get detailed output concerning your SSH configuration and the authentication
+process.
+</p>
+<p> The only thing left is to automate the execution of the fate.sh script and
+the synchronisation of the samples directory.
+</p>
+
+<a name="FATE-makefile-targets-and-variables"></a>
+<h1 class="chapter"><a href="fate.html#toc-FATE-makefile-targets-and-variables">4. FATE makefile targets and variables</a></h1>
+
+<a name="Makefile-targets"></a>
+<h2 class="section"><a href="fate.html#toc-Makefile-targets">4.1 Makefile targets</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>fate-rsync</samp>’</dt>
+<dd><p>Download/synchronize sample files to the configured samples directory.
+</p>
+</dd>
+<dt> ‘<samp>fate-list</samp>’</dt>
+<dd><p>Will list all fate/regression test targets.
+</p>
+</dd>
+<dt> ‘<samp>fate</samp>’</dt>
+<dd><p>Run the FATE test suite (requires the fate-suite dataset).
+</p></dd>
+</dl>
+
+<a name="Makefile-variables"></a>
+<h2 class="section"><a href="fate.html#toc-Makefile-variables">4.2 Makefile variables</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>V</samp>’</dt>
+<dd><p>Verbosity level, can be set to 0, 1 or 2.
+ </p><ul>
+<li> 0: show just the test arguments
+ </li><li> 1: show just the command used in the test
+ </li><li> 2: show everything
+ </li></ul>
+
+</dd>
+<dt> ‘<samp>SAMPLES</samp>’</dt>
+<dd><p>Specify or override the path to the FATE samples at make time, it has a
+meaning only while running the regression tests.
+</p>
+</dd>
+<dt> ‘<samp>THREADS</samp>’</dt>
+<dd><p>Specify how many threads to use while running regression tests, it is
+quite useful to detect thread-related regressions.
+</p>
+</dd>
+<dt> ‘<samp>THREAD_TYPE</samp>’</dt>
+<dd><p>Specify which threading strategy test, either <var>slice</var> or <var>frame</var>,
+by default <var>slice+frame</var>
+</p>
+</dd>
+<dt> ‘<samp>CPUFLAGS</samp>’</dt>
+<dd><p>Specify CPU flags.
+</p>
+</dd>
+<dt> ‘<samp>TARGET_EXEC</samp>’</dt>
+<dd><p>Specify or override the wrapper used to run the tests.
+The <var>TARGET_EXEC</var> option provides a way to run FATE wrapped in
+<code>valgrind</code>, <code>qemu-user</code> or <code>wine</code> or on remote targets
+through <code>ssh</code>.
+</p>
+</dd>
+<dt> ‘<samp>GEN</samp>’</dt>
+<dd><p>Set to <var>1</var> to generate the missing or mismatched references.
+</p></dd>
+</dl>
+
+<a name="Examples"></a>
+<h2 class="section"><a href="fate.html#toc-Examples">4.3 Examples</a></h2>
+
+<table><tr><td> </td><td><pre class="example">make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
+</pre></td></tr></table>
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : ffmpeg </title>
+
+<meta name="description" content="ffmpeg Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : ffmpeg ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">ffmpeg Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Synopsis" href="#Synopsis">1. Synopsis</a></li>
+ <li><a name="toc-Description" href="#Description">2. Description</a></li>
+ <li><a name="toc-Detailed-description" href="#Detailed-description">3. Detailed description</a>
+ <ul class="toc">
+ <li><a name="toc-Filtering" href="#Filtering">3.1 Filtering</a>
+ <ul class="toc">
+ <li><a name="toc-Simple-filtergraphs" href="#Simple-filtergraphs">3.1.1 Simple filtergraphs</a></li>
+ <li><a name="toc-Complex-filtergraphs" href="#Complex-filtergraphs">3.1.2 Complex filtergraphs</a></li>
+ </ul></li>
+ <li><a name="toc-Stream-copy" href="#Stream-copy">3.2 Stream copy</a></li>
+ </ul></li>
+ <li><a name="toc-Stream-selection" href="#Stream-selection">4. Stream selection</a></li>
+ <li><a name="toc-Options-9" href="#Options-9">5. Options</a>
+ <ul class="toc">
+ <li><a name="toc-Stream-specifiers-1" href="#Stream-specifiers-1">5.1 Stream specifiers</a></li>
+ <li><a name="toc-Generic-options" href="#Generic-options">5.2 Generic options</a></li>
+ <li><a name="toc-AVOptions" href="#AVOptions">5.3 AVOptions</a></li>
+ <li><a name="toc-Main-options" href="#Main-options">5.4 Main options</a></li>
+ <li><a name="toc-Video-Options" href="#Video-Options">5.5 Video Options</a></li>
+ <li><a name="toc-Advanced-Video-Options" href="#Advanced-Video-Options">5.6 Advanced Video Options</a></li>
+ <li><a name="toc-Audio-Options" href="#Audio-Options">5.7 Audio Options</a></li>
+ <li><a name="toc-Advanced-Audio-options_003a" href="#Advanced-Audio-options_003a">5.8 Advanced Audio options:</a></li>
+ <li><a name="toc-Subtitle-options_003a" href="#Subtitle-options_003a">5.9 Subtitle options:</a></li>
+ <li><a name="toc-Advanced-Subtitle-options_003a" href="#Advanced-Subtitle-options_003a">5.10 Advanced Subtitle options:</a></li>
+ <li><a name="toc-Advanced-options" href="#Advanced-options">5.11 Advanced options</a></li>
+ <li><a name="toc-Preset-files-1" href="#Preset-files-1">5.12 Preset files</a></li>
+ </ul></li>
+ <li><a name="toc-Tips" href="#Tips">6. Tips</a></li>
+ <li><a name="toc-Examples-37" href="#Examples-37">7. Examples</a>
+ <ul class="toc">
+ <li><a name="toc-Preset-files" href="#Preset-files">7.1 Preset files</a></li>
+ <li><a name="toc-Video-and-Audio-grabbing" href="#Video-and-Audio-grabbing">7.2 Video and Audio grabbing</a></li>
+ <li><a name="toc-X11-grabbing" href="#X11-grabbing">7.3 X11 grabbing</a></li>
+ <li><a name="toc-Video-and-Audio-file-format-conversion" href="#Video-and-Audio-file-format-conversion">7.4 Video and Audio file format conversion</a></li>
+ </ul></li>
+ <li><a name="toc-Syntax-2" href="#Syntax-2">8. Syntax</a>
+ <ul class="toc">
+ <li><a name="toc-Quoting-and-escaping" href="#Quoting-and-escaping">8.1 Quoting and escaping</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-68" href="#Examples-68">8.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Date" href="#Date">8.2 Date</a></li>
+ <li><a name="toc-Time-duration" href="#Time-duration">8.3 Time duration</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-52" href="#Examples-52">8.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Video-size" href="#Video-size">8.4 Video size</a></li>
+ <li><a name="toc-Video-rate" href="#Video-rate">8.5 Video rate</a></li>
+ <li><a name="toc-Ratio" href="#Ratio">8.6 Ratio</a></li>
+ <li><a name="toc-Color" href="#Color">8.7 Color</a></li>
+ <li><a name="toc-Channel-Layout" href="#Channel-Layout">8.8 Channel Layout</a></li>
+ </ul></li>
+ <li><a name="toc-Expression-Evaluation" href="#Expression-Evaluation">9. Expression Evaluation</a></li>
+ <li><a name="toc-OpenCL-Options" href="#OpenCL-Options">10. OpenCL Options</a></li>
+ <li><a name="toc-Codec-Options" href="#Codec-Options">11. Codec Options</a></li>
+ <li><a name="toc-Decoders" href="#Decoders">12. Decoders</a></li>
+ <li><a name="toc-Video-Decoders" href="#Video-Decoders">13. Video Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-rawvideo" href="#rawvideo">13.1 rawvideo</a>
+ <ul class="toc">
+ <li><a name="toc-Options-21" href="#Options-21">13.1.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Decoders" href="#Audio-Decoders">14. Audio Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-ac3" href="#ac3">14.1 ac3</a>
+ <ul class="toc">
+ <li><a name="toc-AC_002d3-Decoder-Options" href="#AC_002d3-Decoder-Options">14.1.1 AC-3 Decoder Options</a></li>
+ </ul></li>
+ <li><a name="toc-ffwavesynth" href="#ffwavesynth">14.2 ffwavesynth</a></li>
+ <li><a name="toc-libcelt" href="#libcelt">14.3 libcelt</a></li>
+ <li><a name="toc-libgsm" href="#libgsm">14.4 libgsm</a></li>
+ <li><a name="toc-libilbc" href="#libilbc">14.5 libilbc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-27" href="#Options-27">14.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopencore_002damrnb" href="#libopencore_002damrnb">14.6 libopencore-amrnb</a></li>
+ <li><a name="toc-libopencore_002damrwb" href="#libopencore_002damrwb">14.7 libopencore-amrwb</a></li>
+ <li><a name="toc-libopus-1" href="#libopus-1">14.8 libopus</a></li>
+ </ul></li>
+ <li><a name="toc-Subtitles-Decoders" href="#Subtitles-Decoders">15. Subtitles Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-dvdsub" href="#dvdsub">15.1 dvdsub</a>
+ <ul class="toc">
+ <li><a name="toc-Options-35" href="#Options-35">15.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libzvbi_002dteletext" href="#libzvbi_002dteletext">15.2 libzvbi-teletext</a>
+ <ul class="toc">
+ <li><a name="toc-Options-41" href="#Options-41">15.2.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Encoders" href="#Encoders">16. Encoders</a></li>
+ <li><a name="toc-Audio-Encoders" href="#Audio-Encoders">17. Audio Encoders</a>
+ <ul class="toc">
+ <li><a name="toc-aac" href="#aac">17.1 aac</a>
+ <ul class="toc">
+ <li><a name="toc-Options-43" href="#Options-43">17.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-ac3-and-ac3_005ffixed" href="#ac3-and-ac3_005ffixed">17.2 ac3 and ac3_fixed</a>
+ <ul class="toc">
+ <li><a name="toc-AC_002d3-Metadata" href="#AC_002d3-Metadata">17.2.1 AC-3 Metadata</a>
+ <ul class="toc">
+ <li><a name="toc-Metadata-Control-Options" href="#Metadata-Control-Options">17.2.1.1 Metadata Control Options</a></li>
+ <li><a name="toc-Downmix-Levels" href="#Downmix-Levels">17.2.1.2 Downmix Levels</a></li>
+ <li><a name="toc-Audio-Production-Information" href="#Audio-Production-Information">17.2.1.3 Audio Production Information</a></li>
+ <li><a name="toc-Other-Metadata-Options" href="#Other-Metadata-Options">17.2.1.4 Other Metadata Options</a></li>
+ </ul></li>
+ <li><a name="toc-Extended-Bitstream-Information" href="#Extended-Bitstream-Information">17.2.2 Extended Bitstream Information</a>
+ <ul class="toc">
+ <li><a name="toc-Extended-Bitstream-Information-_002d-Part-1" href="#Extended-Bitstream-Information-_002d-Part-1">17.2.2.1 Extended Bitstream Information - Part 1</a></li>
+ <li><a name="toc-Extended-Bitstream-Information-_002d-Part-2" href="#Extended-Bitstream-Information-_002d-Part-2">17.2.2.2 Extended Bitstream Information - Part 2</a></li>
+ </ul></li>
+ <li><a name="toc-Other-AC_002d3-Encoding-Options" href="#Other-AC_002d3-Encoding-Options">17.2.3 Other AC-3 Encoding Options</a></li>
+ <li><a name="toc-Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options" href="#Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options">17.2.4 Floating-Point-Only AC-3 Encoding Options</a></li>
+ </ul></li>
+ <li><a name="toc-libfaac-1" href="#libfaac-1">17.3 libfaac</a>
+ <ul class="toc">
+ <li><a name="toc-Options-29" href="#Options-29">17.3.1 Options</a></li>
+ <li><a name="toc-Examples-98" href="#Examples-98">17.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libfdk_005faac" href="#libfdk_005faac">17.4 libfdk_aac</a>
+ <ul class="toc">
+ <li><a name="toc-Options-31" href="#Options-31">17.4.1 Options</a></li>
+ <li><a name="toc-Examples-67" href="#Examples-67">17.4.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libmp3lame-1" href="#libmp3lame-1">17.5 libmp3lame</a>
+ <ul class="toc">
+ <li><a name="toc-Options-14" href="#Options-14">17.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopencore_002damrnb-1" href="#libopencore_002damrnb-1">17.6 libopencore-amrnb</a>
+ <ul class="toc">
+ <li><a name="toc-Options-12" href="#Options-12">17.6.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libshine-1" href="#libshine-1">17.7 libshine</a>
+ <ul class="toc">
+ <li><a name="toc-Options-24" href="#Options-24">17.7.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libtwolame" href="#libtwolame">17.8 libtwolame</a>
+ <ul class="toc">
+ <li><a name="toc-Options-8" href="#Options-8">17.8.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libvo_002daacenc-1" href="#libvo_002daacenc-1">17.9 libvo-aacenc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-26" href="#Options-26">17.9.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libvo_002damrwbenc" href="#libvo_002damrwbenc">17.10 libvo-amrwbenc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-37" href="#Options-37">17.10.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopus" href="#libopus">17.11 libopus</a>
+ <ul class="toc">
+ <li><a name="toc-Option-Mapping" href="#Option-Mapping">17.11.1 Option Mapping</a></li>
+ </ul></li>
+ <li><a name="toc-libvorbis" href="#libvorbis">17.12 libvorbis</a>
+ <ul class="toc">
+ <li><a name="toc-Options-19" href="#Options-19">17.12.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libwavpack-1" href="#libwavpack-1">17.13 libwavpack</a>
+ <ul class="toc">
+ <li><a name="toc-Options-42" href="#Options-42">17.13.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-wavpack" href="#wavpack">17.14 wavpack</a>
+ <ul class="toc">
+ <li><a name="toc-Options-17" href="#Options-17">17.14.1 Options</a>
+ <ul class="toc">
+ <li><a name="toc-Shared-options" href="#Shared-options">17.14.1.1 Shared options</a></li>
+ <li><a name="toc-Private-options" href="#Private-options">17.14.1.2 Private options</a></li>
+ </ul>
+</li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Video-Encoders" href="#Video-Encoders">18. Video Encoders</a>
+ <ul class="toc">
+ <li><a name="toc-libtheora" href="#libtheora">18.1 libtheora</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">18.1.1 Options</a></li>
+ <li><a name="toc-Examples-17" href="#Examples-17">18.1.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libvpx" href="#libvpx">18.2 libvpx</a>
+ <ul class="toc">
+ <li><a name="toc-Options-39" href="#Options-39">18.2.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libwebp" href="#libwebp">18.3 libwebp</a>
+ <ul class="toc">
+ <li><a name="toc-Pixel-Format" href="#Pixel-Format">18.3.1 Pixel Format</a></li>
+ <li><a name="toc-Options-44" href="#Options-44">18.3.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libx264_002c-libx264rgb" href="#libx264_002c-libx264rgb">18.4 libx264, libx264rgb</a>
+ <ul class="toc">
+ <li><a name="toc-Supported-Pixel-Formats" href="#Supported-Pixel-Formats">18.4.1 Supported Pixel Formats</a></li>
+ <li><a name="toc-Options-20" href="#Options-20">18.4.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libxvid" href="#libxvid">18.5 libxvid</a>
+ <ul class="toc">
+ <li><a name="toc-Options-13" href="#Options-13">18.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-png" href="#png">18.6 png</a>
+ <ul class="toc">
+ <li><a name="toc-Private-options-1" href="#Private-options-1">18.6.1 Private options</a></li>
+ </ul></li>
+ <li><a name="toc-ProRes" href="#ProRes">18.7 ProRes</a>
+ <ul class="toc">
+ <li><a name="toc-Private-Options-for-prores_002dks" href="#Private-Options-for-prores_002dks">18.7.1 Private Options for prores-ks</a></li>
+ <li><a name="toc-Speed-considerations" href="#Speed-considerations">18.7.2 Speed considerations</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Bitstream-Filters" href="#Bitstream-Filters">19. Bitstream Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aac_005fadtstoasc" href="#aac_005fadtstoasc">19.1 aac_adtstoasc</a></li>
+ <li><a name="toc-chomp" href="#chomp">19.2 chomp</a></li>
+ <li><a name="toc-dump_005fextra" href="#dump_005fextra">19.3 dump_extra</a></li>
+ <li><a name="toc-h264_005fmp4toannexb" href="#h264_005fmp4toannexb">19.4 h264_mp4toannexb</a></li>
+ <li><a name="toc-imx_005fdump_005fheader" href="#imx_005fdump_005fheader">19.5 imx_dump_header</a></li>
+ <li><a name="toc-mjpeg2jpeg" href="#mjpeg2jpeg">19.6 mjpeg2jpeg</a></li>
+ <li><a name="toc-mjpega_005fdump_005fheader" href="#mjpega_005fdump_005fheader">19.7 mjpega_dump_header</a></li>
+ <li><a name="toc-movsub" href="#movsub">19.8 movsub</a></li>
+ <li><a name="toc-mp3_005fheader_005fdecompress" href="#mp3_005fheader_005fdecompress">19.9 mp3_header_decompress</a></li>
+ <li><a name="toc-noise" href="#noise">19.10 noise</a></li>
+ <li><a name="toc-remove_005fextra" href="#remove_005fextra">19.11 remove_extra</a></li>
+ </ul></li>
+ <li><a name="toc-Format-Options" href="#Format-Options">20. Format Options</a>
+ <ul class="toc">
+ <li><a name="toc-Format-stream-specifiers-1" href="#Format-stream-specifiers-1">20.1 Format stream specifiers</a></li>
+ </ul></li>
+ <li><a name="toc-Demuxers" href="#Demuxers">21. Demuxers</a>
+ <ul class="toc">
+ <li><a name="toc-applehttp" href="#applehttp">21.1 applehttp</a></li>
+ <li><a name="toc-asf" href="#asf">21.2 asf</a></li>
+ <li><a name="toc-concat-3" href="#concat-3">21.3 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax" href="#Syntax">21.3.1 Syntax</a></li>
+ <li><a name="toc-Options-15" href="#Options-15">21.3.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-flv" href="#flv">21.4 flv</a></li>
+ <li><a name="toc-libgme" href="#libgme">21.5 libgme</a></li>
+ <li><a name="toc-libquvi" href="#libquvi">21.6 libquvi</a></li>
+ <li><a name="toc-image2-1" href="#image2-1">21.7 image2</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-13" href="#Examples-13">21.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpegts" href="#mpegts">21.8 mpegts</a></li>
+ <li><a name="toc-rawvideo-1" href="#rawvideo-1">21.9 rawvideo</a></li>
+ <li><a name="toc-sbg" href="#sbg">21.10 sbg</a></li>
+ <li><a name="toc-tedcaptions" href="#tedcaptions">21.11 tedcaptions</a></li>
+ </ul></li>
+ <li><a name="toc-Muxers" href="#Muxers">22. Muxers</a>
+ <ul class="toc">
+ <li><a name="toc-aiff-1" href="#aiff-1">22.1 aiff</a>
+ <ul class="toc">
+ <li><a name="toc-Options-23" href="#Options-23">22.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-crc-1" href="#crc-1">22.2 crc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-16" href="#Examples-16">22.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framecrc-1" href="#framecrc-1">22.3 framecrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-99" href="#Examples-99">22.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framemd5-1" href="#framemd5-1">22.4 framemd5</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-73" href="#Examples-73">22.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-gif-1" href="#gif-1">22.5 gif</a></li>
+ <li><a name="toc-hls-1" href="#hls-1">22.6 hls</a>
+ <ul class="toc">
+ <li><a name="toc-Options-10" href="#Options-10">22.6.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-ico-1" href="#ico-1">22.7 ico</a></li>
+ <li><a name="toc-image2-2" href="#image2-2">22.8 image2</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-15" href="#Examples-15">22.8.1 Examples</a></li>
+ <li><a name="toc-Options-22" href="#Options-22">22.8.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-matroska" href="#matroska">22.9 matroska</a>
+ <ul class="toc">
+ <li><a name="toc-Metadata-1" href="#Metadata-1">22.9.1 Metadata</a></li>
+ <li><a name="toc-Options-30" href="#Options-30">22.9.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-md5-2" href="#md5-2">22.10 md5</a></li>
+ <li><a name="toc-mov_002c-mp4_002c-ismv" href="#mov_002c-mp4_002c-ismv">22.11 mov, mp4, ismv</a>
+ <ul class="toc">
+ <li><a name="toc-Options-16" href="#Options-16">22.11.1 Options</a></li>
+ <li><a name="toc-Example-1" href="#Example-1">22.11.2 Example</a></li>
+ </ul></li>
+ <li><a name="toc-mp3" href="#mp3">22.12 mp3</a></li>
+ <li><a name="toc-mpegts-1" href="#mpegts-1">22.13 mpegts</a>
+ <ul class="toc">
+ <li><a name="toc-Options-7" href="#Options-7">22.13.1 Options</a></li>
+ <li><a name="toc-Example" href="#Example">22.13.2 Example</a></li>
+ </ul></li>
+ <li><a name="toc-null-1" href="#null-1">22.14 null</a></li>
+ <li><a name="toc-ogg" href="#ogg">22.15 ogg</a></li>
+ <li><a name="toc-segment_002c-stream_005fsegment_002c-ssegment" href="#segment_002c-stream_005fsegment_002c-ssegment">22.16 segment, stream_segment, ssegment</a>
+ <ul class="toc">
+ <li><a name="toc-Options-5" href="#Options-5">22.16.1 Options</a></li>
+ <li><a name="toc-Examples-43" href="#Examples-43">22.16.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tee" href="#tee">22.17 tee</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-97" href="#Examples-97">22.17.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Metadata" href="#Metadata">23. Metadata</a></li>
+ <li><a name="toc-Protocols" href="#Protocols">24. Protocols</a>
+ <ul class="toc">
+ <li><a name="toc-bluray" href="#bluray">24.1 bluray</a></li>
+ <li><a name="toc-cache" href="#cache">24.2 cache</a></li>
+ <li><a name="toc-concat-1" href="#concat-1">24.3 concat</a></li>
+ <li><a name="toc-crypto" href="#crypto">24.4 crypto</a></li>
+ <li><a name="toc-data" href="#data">24.5 data</a></li>
+ <li><a name="toc-file" href="#file">24.6 file</a></li>
+ <li><a name="toc-ftp" href="#ftp">24.7 ftp</a></li>
+ <li><a name="toc-gopher" href="#gopher">24.8 gopher</a></li>
+ <li><a name="toc-hls-2" href="#hls-2">24.9 hls</a></li>
+ <li><a name="toc-http" href="#http">24.10 http</a>
+ <ul class="toc">
+ <li><a name="toc-HTTP-Cookies" href="#HTTP-Cookies">24.10.1 HTTP Cookies</a></li>
+ </ul></li>
+ <li><a name="toc-mmst" href="#mmst">24.11 mmst</a></li>
+ <li><a name="toc-mmsh" href="#mmsh">24.12 mmsh</a></li>
+ <li><a name="toc-md5-1" href="#md5-1">24.13 md5</a></li>
+ <li><a name="toc-pipe" href="#pipe">24.14 pipe</a></li>
+ <li><a name="toc-rtmp" href="#rtmp">24.15 rtmp</a></li>
+ <li><a name="toc-rtmpe" href="#rtmpe">24.16 rtmpe</a></li>
+ <li><a name="toc-rtmps" href="#rtmps">24.17 rtmps</a></li>
+ <li><a name="toc-rtmpt" href="#rtmpt">24.18 rtmpt</a></li>
+ <li><a name="toc-rtmpte" href="#rtmpte">24.19 rtmpte</a></li>
+ <li><a name="toc-rtmpts" href="#rtmpts">24.20 rtmpts</a></li>
+ <li><a name="toc-libssh" href="#libssh">24.21 libssh</a></li>
+ <li><a name="toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte" href="#librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">24.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></li>
+ <li><a name="toc-rtp" href="#rtp">24.23 rtp</a></li>
+ <li><a name="toc-rtsp" href="#rtsp">24.24 rtsp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-47" href="#Examples-47">24.24.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sap" href="#sap">24.25 sap</a>
+ <ul class="toc">
+ <li><a name="toc-Muxer" href="#Muxer">24.25.1 Muxer</a></li>
+ <li><a name="toc-Demuxer" href="#Demuxer">24.25.2 Demuxer</a></li>
+ </ul></li>
+ <li><a name="toc-sctp" href="#sctp">24.26 sctp</a></li>
+ <li><a name="toc-srtp" href="#srtp">24.27 srtp</a></li>
+ <li><a name="toc-tcp" href="#tcp">24.28 tcp</a></li>
+ <li><a name="toc-tls" href="#tls">24.29 tls</a></li>
+ <li><a name="toc-udp" href="#udp">24.30 udp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-65" href="#Examples-65">24.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-unix" href="#unix">24.31 unix</a></li>
+ </ul></li>
+ <li><a name="toc-Device-Options" href="#Device-Options">25. Device Options</a></li>
+ <li><a name="toc-Input-Devices" href="#Input-Devices">26. Input Devices</a>
+ <ul class="toc">
+ <li><a name="toc-alsa" href="#alsa">26.1 alsa</a></li>
+ <li><a name="toc-bktr" href="#bktr">26.2 bktr</a></li>
+ <li><a name="toc-dshow" href="#dshow">26.3 dshow</a>
+ <ul class="toc">
+ <li><a name="toc-Options-28" href="#Options-28">26.3.1 Options</a></li>
+ <li><a name="toc-Examples-92" href="#Examples-92">26.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dv1394" href="#dv1394">26.4 dv1394</a></li>
+ <li><a name="toc-fbdev-1" href="#fbdev-1">26.5 fbdev</a></li>
+ <li><a name="toc-iec61883" href="#iec61883">26.6 iec61883</a>
+ <ul class="toc">
+ <li><a name="toc-Options-32" href="#Options-32">26.6.1 Options</a></li>
+ <li><a name="toc-Examples-2" href="#Examples-2">26.6.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-jack" href="#jack">26.7 jack</a></li>
+ <li><a name="toc-lavfi" href="#lavfi">26.8 lavfi</a>
+ <ul class="toc">
+ <li><a name="toc-Options-34" href="#Options-34">26.8.1 Options</a></li>
+ <li><a name="toc-Examples-66" href="#Examples-66">26.8.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libdc1394" href="#libdc1394">26.9 libdc1394</a></li>
+ <li><a name="toc-openal" href="#openal">26.10 openal</a>
+ <ul class="toc">
+ <li><a name="toc-Options-33" href="#Options-33">26.10.1 Options</a></li>
+ <li><a name="toc-Examples-42" href="#Examples-42">26.10.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-oss" href="#oss">26.11 oss</a></li>
+ <li><a name="toc-pulse" href="#pulse">26.12 pulse</a>
+ <ul class="toc">
+ <li><a name="toc-Options-6" href="#Options-6">26.12.1 Options</a></li>
+ <li><a name="toc-Examples-33" href="#Examples-33">26.12.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sndio" href="#sndio">26.13 sndio</a></li>
+ <li><a name="toc-video4linux2_002c-v4l2" href="#video4linux2_002c-v4l2">26.14 video4linux2, v4l2</a>
+ <ul class="toc">
+ <li><a name="toc-Options-40" href="#Options-40">26.14.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-vfwcap" href="#vfwcap">26.15 vfwcap</a></li>
+ <li><a name="toc-x11grab" href="#x11grab">26.16 x11grab</a>
+ <ul class="toc">
+ <li><a name="toc-Options-25" href="#Options-25">26.16.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Output-Devices" href="#Output-Devices">27. Output Devices</a>
+ <ul class="toc">
+ <li><a name="toc-alsa-1" href="#alsa-1">27.1 alsa</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-53" href="#Examples-53">27.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-caca" href="#caca">27.2 caca</a>
+ <ul class="toc">
+ <li><a name="toc-Options-45" href="#Options-45">27.2.1 Options</a></li>
+ <li><a name="toc-Examples-84" href="#Examples-84">27.2.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-decklink" href="#decklink">27.3 decklink</a>
+ <ul class="toc">
+ <li><a name="toc-Options" href="#Options">27.3.1 Options</a></li>
+ <li><a name="toc-Examples-61" href="#Examples-61">27.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fbdev" href="#fbdev">27.4 fbdev</a>
+ <ul class="toc">
+ <li><a name="toc-Options-36" href="#Options-36">27.4.1 Options</a></li>
+ <li><a name="toc-Examples-36" href="#Examples-36">27.4.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-opengl" href="#opengl">27.5 opengl</a>
+ <ul class="toc">
+ <li><a name="toc-Options-18" href="#Options-18">27.5.1 Options</a></li>
+ <li><a name="toc-Examples-100" href="#Examples-100">27.5.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-oss-1" href="#oss-1">27.6 oss</a></li>
+ <li><a name="toc-pulse-1" href="#pulse-1">27.7 pulse</a>
+ <ul class="toc">
+ <li><a name="toc-Options-11" href="#Options-11">27.7.1 Options</a></li>
+ <li><a name="toc-Examples-56" href="#Examples-56">27.7.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sdl" href="#sdl">27.8 sdl</a>
+ <ul class="toc">
+ <li><a name="toc-Options-38" href="#Options-38">27.8.1 Options</a></li>
+ <li><a name="toc-Interactive-commands" href="#Interactive-commands">27.8.2 Interactive commands</a></li>
+ <li><a name="toc-Examples-32" href="#Examples-32">27.8.3 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sndio-1" href="#sndio-1">27.9 sndio</a></li>
+ <li><a name="toc-xv" href="#xv">27.10 xv</a>
+ <ul class="toc">
+ <li><a name="toc-Options-4" href="#Options-4">27.10.1 Options</a></li>
+ <li><a name="toc-Examples-26" href="#Examples-26">27.10.2 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Resampler-Options" href="#Resampler-Options">28. Resampler Options</a></li>
+ <li><a name="toc-Scaler-Options" href="#Scaler-Options">29. Scaler Options</a></li>
+ <li><a name="toc-Filtering-Introduction" href="#Filtering-Introduction">30. Filtering Introduction</a></li>
+ <li><a name="toc-graph2dot" href="#graph2dot">31. graph2dot</a></li>
+ <li><a name="toc-Filtergraph-description" href="#Filtergraph-description">32. Filtergraph description</a>
+ <ul class="toc">
+ <li><a name="toc-Filtergraph-syntax-1" href="#Filtergraph-syntax-1">32.1 Filtergraph syntax</a></li>
+ <li><a name="toc-Notes-on-filtergraph-escaping" href="#Notes-on-filtergraph-escaping">32.2 Notes on filtergraph escaping</a></li>
+ </ul></li>
+ <li><a name="toc-Timeline-editing" href="#Timeline-editing">33. Timeline editing</a></li>
+ <li><a name="toc-Audio-Filters" href="#Audio-Filters">34. Audio Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aconvert" href="#aconvert">34.1 aconvert</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-11" href="#Examples-11">34.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-adelay" href="#adelay">34.2 adelay</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">34.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aecho" href="#aecho">34.3 aecho</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-10" href="#Examples-10">34.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aeval" href="#aeval">34.4 aeval</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-23" href="#Examples-23">34.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-afade" href="#afade">34.5 afade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-21" href="#Examples-21">34.5.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aformat-1" href="#aformat-1">34.6 aformat</a></li>
+ <li><a name="toc-allpass" href="#allpass">34.7 allpass</a></li>
+ <li><a name="toc-amerge" href="#amerge">34.8 amerge</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-54" href="#Examples-54">34.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-amix" href="#amix">34.9 amix</a></li>
+ <li><a name="toc-anull" href="#anull">34.10 anull</a></li>
+ <li><a name="toc-apad" href="#apad">34.11 apad</a></li>
+ <li><a name="toc-aphaser" href="#aphaser">34.12 aphaser</a></li>
+ <li><a name="toc-aresample-1" href="#aresample-1">34.13 aresample</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-101" href="#Examples-101">34.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asetnsamples" href="#asetnsamples">34.14 asetnsamples</a></li>
+ <li><a name="toc-asetrate" href="#asetrate">34.15 asetrate</a></li>
+ <li><a name="toc-ashowinfo" href="#ashowinfo">34.16 ashowinfo</a></li>
+ <li><a name="toc-astats" href="#astats">34.17 astats</a></li>
+ <li><a name="toc-astreamsync" href="#astreamsync">34.18 astreamsync</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-5" href="#Examples-5">34.18.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asyncts" href="#asyncts">34.19 asyncts</a></li>
+ <li><a name="toc-atempo" href="#atempo">34.20 atempo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-50" href="#Examples-50">34.20.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-atrim" href="#atrim">34.21 atrim</a></li>
+ <li><a name="toc-bandpass" href="#bandpass">34.22 bandpass</a></li>
+ <li><a name="toc-bandreject" href="#bandreject">34.23 bandreject</a></li>
+ <li><a name="toc-bass" href="#bass">34.24 bass</a></li>
+ <li><a name="toc-biquad" href="#biquad">34.25 biquad</a></li>
+ <li><a name="toc-channelmap" href="#channelmap">34.26 channelmap</a></li>
+ <li><a name="toc-channelsplit" href="#channelsplit">34.27 channelsplit</a></li>
+ <li><a name="toc-compand" href="#compand">34.28 compand</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-78" href="#Examples-78">34.28.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-earwax" href="#earwax">34.29 earwax</a></li>
+ <li><a name="toc-equalizer" href="#equalizer">34.30 equalizer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-102" href="#Examples-102">34.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-highpass" href="#highpass">34.31 highpass</a></li>
+ <li><a name="toc-join" href="#join">34.32 join</a></li>
+ <li><a name="toc-ladspa" href="#ladspa">34.33 ladspa</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-90" href="#Examples-90">34.33.1 Examples</a></li>
+ <li><a name="toc-Commands-3" href="#Commands-3">34.33.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-lowpass" href="#lowpass">34.34 lowpass</a></li>
+ <li><a name="toc-pan" href="#pan">34.35 pan</a>
+ <ul class="toc">
+ <li><a name="toc-Mixing-examples" href="#Mixing-examples">34.35.1 Mixing examples</a></li>
+ <li><a name="toc-Remapping-examples" href="#Remapping-examples">34.35.2 Remapping examples</a></li>
+ </ul></li>
+ <li><a name="toc-replaygain" href="#replaygain">34.36 replaygain</a></li>
+ <li><a name="toc-resample" href="#resample">34.37 resample</a></li>
+ <li><a name="toc-silencedetect" href="#silencedetect">34.38 silencedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-62" href="#Examples-62">34.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-treble" href="#treble">34.39 treble</a></li>
+ <li><a name="toc-volume" href="#volume">34.40 volume</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-1" href="#Commands-1">34.40.1 Commands</a></li>
+ <li><a name="toc-Examples-63" href="#Examples-63">34.40.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-volumedetect" href="#volumedetect">34.41 volumedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-81" href="#Examples-81">34.41.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sources" href="#Audio-Sources">35. Audio Sources</a>
+ <ul class="toc">
+ <li><a name="toc-abuffer" href="#abuffer">35.1 abuffer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-24" href="#Examples-24">35.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aevalsrc" href="#aevalsrc">35.2 aevalsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-89" href="#Examples-89">35.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-anullsrc" href="#anullsrc">35.3 anullsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-70" href="#Examples-70">35.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-flite" href="#flite">35.4 flite</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-35" href="#Examples-35">35.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sine" href="#sine">35.5 sine</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-18" href="#Examples-18">35.5.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sinks" href="#Audio-Sinks">36. Audio Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-abuffersink" href="#abuffersink">36.1 abuffersink</a></li>
+ <li><a name="toc-anullsink" href="#anullsink">36.2 anullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Filters" href="#Video-Filters">37. Video Filters</a>
+ <ul class="toc">
+ <li><a name="toc-alphaextract" href="#alphaextract">37.1 alphaextract</a></li>
+ <li><a name="toc-alphamerge" href="#alphamerge">37.2 alphamerge</a></li>
+ <li><a name="toc-ass" href="#ass">37.3 ass</a></li>
+ <li><a name="toc-bbox" href="#bbox">37.4 bbox</a></li>
+ <li><a name="toc-blackdetect" href="#blackdetect">37.5 blackdetect</a></li>
+ <li><a name="toc-blackframe" href="#blackframe">37.6 blackframe</a></li>
+ <li><a name="toc-blend" href="#blend">37.7 blend</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-39" href="#Examples-39">37.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-boxblur" href="#boxblur">37.8 boxblur</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-96" href="#Examples-96">37.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorbalance" href="#colorbalance">37.9 colorbalance</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-88" href="#Examples-88">37.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorchannelmixer" href="#colorchannelmixer">37.10 colorchannelmixer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-28" href="#Examples-28">37.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colormatrix" href="#colormatrix">37.11 colormatrix</a></li>
+ <li><a name="toc-copy" href="#copy">37.12 copy</a></li>
+ <li><a name="toc-crop" href="#crop">37.13 crop</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-51" href="#Examples-51">37.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-cropdetect" href="#cropdetect">37.14 cropdetect</a></li>
+ <li><a name="toc-curves-1" href="#curves-1">37.15 curves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-94" href="#Examples-94">37.15.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dctdnoiz" href="#dctdnoiz">37.16 dctdnoiz</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-12" href="#Examples-12">37.16.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-decimate-1" href="#decimate-1">37.17 decimate</a></li>
+ <li><a name="toc-dejudder" href="#dejudder">37.18 dejudder</a></li>
+ <li><a name="toc-delogo" href="#delogo">37.19 delogo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-22" href="#Examples-22">37.19.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-deshake" href="#deshake">37.20 deshake</a></li>
+ <li><a name="toc-drawbox" href="#drawbox">37.21 drawbox</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-48" href="#Examples-48">37.21.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawgrid" href="#drawgrid">37.22 drawgrid</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-60" href="#Examples-60">37.22.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawtext-1" href="#drawtext-1">37.23 drawtext</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax-1" href="#Syntax-1">37.23.1 Syntax</a></li>
+ <li><a name="toc-Text-expansion" href="#Text-expansion">37.23.2 Text expansion</a></li>
+ <li><a name="toc-Examples-86" href="#Examples-86">37.23.3 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-edgedetect" href="#edgedetect">37.24 edgedetect</a></li>
+ <li><a name="toc-extractplanes" href="#extractplanes">37.25 extractplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-27" href="#Examples-27">37.25.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-elbg" href="#elbg">37.26 elbg</a></li>
+ <li><a name="toc-fade" href="#fade">37.27 fade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">37.27.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-field" href="#field">37.28 field</a></li>
+ <li><a name="toc-fieldmatch" href="#fieldmatch">37.29 fieldmatch</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn_002fu_002fb-meaning-1" href="#p_002fc_002fn_002fu_002fb-meaning-1">37.29.1 p/c/n/u/b meaning</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn" href="#p_002fc_002fn">37.29.1.1 p/c/n</a></li>
+ <li><a name="toc-u_002fb" href="#u_002fb">37.29.1.2 u/b</a></li>
+ </ul></li>
+ <li><a name="toc-Examples-29" href="#Examples-29">37.29.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fieldorder" href="#fieldorder">37.30 fieldorder</a></li>
+ <li><a name="toc-fifo" href="#fifo">37.31 fifo</a></li>
+ <li><a name="toc-format-1" href="#format-1">37.32 format</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-49" href="#Examples-49">37.32.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fps-1" href="#fps-1">37.33 fps</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-91" href="#Examples-91">37.33.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framepack" href="#framepack">37.34 framepack</a></li>
+ <li><a name="toc-framestep" href="#framestep">37.35 framestep</a></li>
+ <li><a name="toc-frei0r-1" href="#frei0r-1">37.36 frei0r</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-46" href="#Examples-46">37.36.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-geq" href="#geq">37.37 geq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-79" href="#Examples-79">37.37.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-gradfun" href="#gradfun">37.38 gradfun</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-71" href="#Examples-71">37.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-haldclut-1" href="#haldclut-1">37.39 haldclut</a>
+ <ul class="toc">
+ <li><a name="toc-Workflow-examples" href="#Workflow-examples">37.39.1 Workflow examples</a>
+ <ul class="toc">
+ <li><a name="toc-Hald-CLUT-video-stream" href="#Hald-CLUT-video-stream">37.39.1.1 Hald CLUT video stream</a></li>
+ <li><a name="toc-Hald-CLUT-with-preview" href="#Hald-CLUT-with-preview">37.39.1.2 Hald CLUT with preview</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-hflip" href="#hflip">37.40 hflip</a></li>
+ <li><a name="toc-histeq" href="#histeq">37.41 histeq</a></li>
+ <li><a name="toc-histogram" href="#histogram">37.42 histogram</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-41" href="#Examples-41">37.42.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-hqdn3d-1" href="#hqdn3d-1">37.43 hqdn3d</a></li>
+ <li><a name="toc-hue" href="#hue">37.44 hue</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-14" href="#Examples-14">37.44.1 Examples</a></li>
+ <li><a name="toc-Commands-2" href="#Commands-2">37.44.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-idet" href="#idet">37.45 idet</a></li>
+ <li><a name="toc-il" href="#il">37.46 il</a></li>
+ <li><a name="toc-interlace" href="#interlace">37.47 interlace</a></li>
+ <li><a name="toc-kerndeint" href="#kerndeint">37.48 kerndeint</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-9" href="#Examples-9">37.48.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-lut3d-1" href="#lut3d-1">37.49 lut3d</a></li>
+ <li><a name="toc-lut_002c-lutrgb_002c-lutyuv" href="#lut_002c-lutrgb_002c-lutyuv">37.50 lut, lutrgb, lutyuv</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-77" href="#Examples-77">37.50.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mergeplanes" href="#mergeplanes">37.51 mergeplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-40" href="#Examples-40">37.51.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mcdeint" href="#mcdeint">37.52 mcdeint</a></li>
+ <li><a name="toc-mp" href="#mp">37.53 mp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-34" href="#Examples-34">37.53.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpdecimate" href="#mpdecimate">37.54 mpdecimate</a></li>
+ <li><a name="toc-negate" href="#negate">37.55 negate</a></li>
+ <li><a name="toc-noformat" href="#noformat">37.56 noformat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-30" href="#Examples-30">37.56.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-noise-1" href="#noise-1">37.57 noise</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-72" href="#Examples-72">37.57.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-null" href="#null">37.58 null</a></li>
+ <li><a name="toc-ocv" href="#ocv">37.59 ocv</a>
+ <ul class="toc">
+ <li><a name="toc-dilate-1" href="#dilate-1">37.59.1 dilate</a></li>
+ <li><a name="toc-erode" href="#erode">37.59.2 erode</a></li>
+ <li><a name="toc-smooth" href="#smooth">37.59.3 smooth</a></li>
+ </ul></li>
+ <li><a name="toc-overlay-1" href="#overlay-1">37.60 overlay</a>
+ <ul class="toc">
+ <li><a name="toc-Commands" href="#Commands">37.60.1 Commands</a></li>
+ <li><a name="toc-Examples-8" href="#Examples-8">37.60.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-owdenoise" href="#owdenoise">37.61 owdenoise</a></li>
+ <li><a name="toc-pad" href="#pad">37.62 pad</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-44" href="#Examples-44">37.62.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perspective" href="#perspective">37.63 perspective</a></li>
+ <li><a name="toc-phase" href="#phase">37.64 phase</a></li>
+ <li><a name="toc-pixdesctest" href="#pixdesctest">37.65 pixdesctest</a></li>
+ <li><a name="toc-pp" href="#pp">37.66 pp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-57" href="#Examples-57">37.66.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-psnr" href="#psnr">37.67 psnr</a></li>
+ <li><a name="toc-pullup-1" href="#pullup-1">37.68 pullup</a></li>
+ <li><a name="toc-removelogo" href="#removelogo">37.69 removelogo</a></li>
+ <li><a name="toc-rotate" href="#rotate">37.70 rotate</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-69" href="#Examples-69">37.70.1 Examples</a></li>
+ <li><a name="toc-Commands-4" href="#Commands-4">37.70.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-sab" href="#sab">37.71 sab</a></li>
+ <li><a name="toc-scale-1" href="#scale-1">37.72 scale</a>
+ <ul class="toc">
+ <li><a name="toc-Options-2" href="#Options-2">37.72.1 Options</a></li>
+ <li><a name="toc-Examples-75" href="#Examples-75">37.72.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-separatefields" href="#separatefields">37.73 separatefields</a></li>
+ <li><a name="toc-setdar_002c-setsar" href="#setdar_002c-setsar">37.74 setdar, setsar</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-6" href="#Examples-6">37.74.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setfield-1" href="#setfield-1">37.75 setfield</a></li>
+ <li><a name="toc-showinfo" href="#showinfo">37.76 showinfo</a></li>
+ <li><a name="toc-smartblur-1" href="#smartblur-1">37.77 smartblur</a></li>
+ <li><a name="toc-stereo3d" href="#stereo3d">37.78 stereo3d</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-80" href="#Examples-80">37.78.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-spp" href="#spp">37.79 spp</a></li>
+ <li><a name="toc-subtitles-1" href="#subtitles-1">37.80 subtitles</a></li>
+ <li><a name="toc-super2xsai" href="#super2xsai">37.81 super2xsai</a></li>
+ <li><a name="toc-swapuv" href="#swapuv">37.82 swapuv</a></li>
+ <li><a name="toc-telecine" href="#telecine">37.83 telecine</a></li>
+ <li><a name="toc-thumbnail" href="#thumbnail">37.84 thumbnail</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-31" href="#Examples-31">37.84.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tile" href="#tile">37.85 tile</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-95" href="#Examples-95">37.85.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tinterlace" href="#tinterlace">37.86 tinterlace</a></li>
+ <li><a name="toc-transpose" href="#transpose">37.87 transpose</a></li>
+ <li><a name="toc-trim" href="#trim">37.88 trim</a></li>
+ <li><a name="toc-unsharp" href="#unsharp">37.89 unsharp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-64" href="#Examples-64">37.89.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabdetect-1" href="#vidstabdetect-1">37.90 vidstabdetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-55" href="#Examples-55">37.90.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabtransform-1" href="#vidstabtransform-1">37.91 vidstabtransform</a>
+ <ul class="toc">
+ <li><a name="toc-Options-3" href="#Options-3">37.91.1 Options</a></li>
+ <li><a name="toc-Examples-87" href="#Examples-87">37.91.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vflip" href="#vflip">37.92 vflip</a></li>
+ <li><a name="toc-vignette" href="#vignette">37.93 vignette</a>
+ <ul class="toc">
+ <li><a name="toc-Expressions" href="#Expressions">37.93.1 Expressions</a></li>
+ <li><a name="toc-Examples-59" href="#Examples-59">37.93.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-w3fdif" href="#w3fdif">37.94 w3fdif</a></li>
+ <li><a name="toc-yadif-1" href="#yadif-1">37.95 yadif</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Sources" href="#Video-Sources">38. Video Sources</a>
+ <ul class="toc">
+ <li><a name="toc-buffer" href="#buffer">38.1 buffer</a></li>
+ <li><a name="toc-cellauto" href="#cellauto">38.2 cellauto</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-20" href="#Examples-20">38.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mandelbrot" href="#mandelbrot">38.3 mandelbrot</a></li>
+ <li><a name="toc-mptestsrc" href="#mptestsrc">38.4 mptestsrc</a></li>
+ <li><a name="toc-frei0r_005fsrc" href="#frei0r_005fsrc">38.5 frei0r_src</a></li>
+ <li><a name="toc-life" href="#life">38.6 life</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-76" href="#Examples-76">38.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc" href="#color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">38.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-5" href="#Commands-5">38.7.1 Commands</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Video-Sinks" href="#Video-Sinks">39. Video Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-buffersink" href="#buffersink">39.1 buffersink</a></li>
+ <li><a name="toc-nullsink" href="#nullsink">39.2 nullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Filters" href="#Multimedia-Filters">40. Multimedia Filters</a>
+ <ul class="toc">
+ <li><a name="toc-avectorscope" href="#avectorscope">40.1 avectorscope</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-85" href="#Examples-85">40.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-concat-2" href="#concat-2">40.2 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-93" href="#Examples-93">40.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-ebur128" href="#ebur128">40.3 ebur128</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-74" href="#Examples-74">40.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-interleave_002c-ainterleave" href="#interleave_002c-ainterleave">40.4 interleave, ainterleave</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-38" href="#Examples-38">40.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perms_002c-aperms" href="#perms_002c-aperms">40.5 perms, aperms</a></li>
+ <li><a name="toc-select_002c-aselect" href="#select_002c-aselect">40.6 select, aselect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-3" href="#Examples-3">40.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sendcmd_002c-asendcmd" href="#sendcmd_002c-asendcmd">40.7 sendcmd, asendcmd</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-syntax" href="#Commands-syntax">40.7.1 Commands syntax</a></li>
+ <li><a name="toc-Examples-19" href="#Examples-19">40.7.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setpts_002c-asetpts" href="#setpts_002c-asetpts">40.8 setpts, asetpts</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-4" href="#Examples-4">40.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-settb_002c-asettb" href="#settb_002c-asettb">40.9 settb, asettb</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-45" href="#Examples-45">40.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showspectrum" href="#showspectrum">40.10 showspectrum</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-83" href="#Examples-83">40.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showwaves" href="#showwaves">40.11 showwaves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-25" href="#Examples-25">40.11.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-split_002c-asplit" href="#split_002c-asplit">40.12 split, asplit</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-7" href="#Examples-7">40.12.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-zmq_002c-azmq" href="#zmq_002c-azmq">40.13 zmq, azmq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-58" href="#Examples-58">40.13.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Sources" href="#Multimedia-Sources">41. Multimedia Sources</a>
+ <ul class="toc">
+ <li><a name="toc-amovie" href="#amovie">41.1 amovie</a></li>
+ <li><a name="toc-movie-1" href="#movie-1">41.2 movie</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-82" href="#Examples-82">41.2.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">42. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">43. Authors</a></li>
+</ul>
+</div>
+
+<a name="Synopsis"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Synopsis">1. Synopsis</a></h1>
+
+<p>ffmpeg [<var>global_options</var>] {[<var>input_file_options</var>] -i ‘<tt>input_file</tt>’} ... {[<var>output_file_options</var>] ‘<tt>output_file</tt>’} ...
+</p>
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Description">2. Description</a></h1>
+
+<p><code>ffmpeg</code> 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.
+</p>
+<p><code>ffmpeg</code> reads from an arbitrary number of input "files" (which can be regular
+files, pipes, network streams, grabbing devices, etc.), specified by the
+<code>-i</code> 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.
+</p>
+<p>Each input or output file can, in principle, contain any number of streams of
+different types (video/audio/subtitle/attachment/data). The allowed number and/or
+types of streams may be limited by the container format. Selecting which
+streams from which inputs will go into which output is either done automatically
+or with the <code>-map</code> option (see the Stream selection chapter).
+</p>
+<p>To refer to input files in options, you must use their indices (0-based). E.g.
+the first input file is <code>0</code>, the second is <code>1</code>, etc. Similarly, streams
+within a file are referred to by their indices. E.g. <code>2:3</code> refers to the
+fourth stream in the third input file. Also see the Stream specifiers chapter.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<ul>
+<li>
+To set the video bitrate of the output file to 64 kbit/s:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
+</pre></td></tr></table>
+
+</li><li>
+To force the frame rate of the output file to 24 fps:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.avi -r 24 output.avi
+</pre></td></tr></table>
+
+</li><li>
+To force the frame rate of the input file (valid for raw formats only)
+to 1 fps and the frame rate of the output file to 24 fps:
+<table><tr><td> </td><td><pre class="example">ffmpeg -r 1 -i input.m2v -r 24 output.avi
+</pre></td></tr></table>
+</li></ul>
+
+<p>The format option may be needed for raw input files.
+</p>
+
+<a name="Detailed-description"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Detailed-description">3. Detailed description</a></h1>
+
+<p>The transcoding process in <code>ffmpeg</code> for each output can be described by
+the following diagram:
+</p>
+<table><tr><td> </td><td><pre class="example"> _______ ______________
+| | | |
+| input | demuxer | encoded data | decoder
+| file | ---------> | packets | -----+
+|_______| |______________| |
+ v
+ _________
+ | |
+ | decoded |
+ | frames |
+ ________ ______________ |_________|
+| | | | |
+| output | <-------- | encoded data | <----+
+| file | muxer | packets | encoder
+|________| |______________|
+
+
+</pre></td></tr></table>
+
+<p><code>ffmpeg</code> calls the libavformat library (containing demuxers) to read
+input files and get packets containing encoded data from them. When there are
+multiple input files, <code>ffmpeg</code> tries to keep them synchronized by
+tracking lowest timestamp on any active input stream.
+</p>
+<p>Encoded packets are then passed to the decoder (unless streamcopy is selected
+for the stream, see further for a description). The decoder produces
+uncompressed frames (raw video/PCM audio/...) which can be processed further by
+filtering (see next section). After filtering, the frames are passed to the
+encoder, which encodes them and outputs encoded packets. Finally those are
+passed to the muxer, which writes the encoded packets to the output file.
+</p>
+<a name="Filtering"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Filtering">3.1 Filtering</a></h2>
+<p>Before encoding, <code>ffmpeg</code> can process raw audio and video frames using
+filters from the libavfilter library. Several chained filters form a filter
+graph. <code>ffmpeg</code> distinguishes between two types of filtergraphs:
+simple and complex.
+</p>
+<a name="Simple-filtergraphs"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Simple-filtergraphs">3.1.1 Simple filtergraphs</a></h3>
+<p>Simple filtergraphs are those that have exactly one input and output, both of
+the same type. In the above diagram they can be represented by simply inserting
+an additional step between decoding and encoding:
+</p>
+<table><tr><td> </td><td><pre class="example"> _________ __________ ______________
+| | simple | | | |
+| decoded | fltrgrph | filtered | encoder | encoded data |
+| frames | ----------> | frames | ---------> | packets |
+|_________| |__________| |______________|
+
+</pre></td></tr></table>
+
+<p>Simple filtergraphs are configured with the per-stream ‘<samp>-filter</samp>’ option
+(with ‘<samp>-vf</samp>’ and ‘<samp>-af</samp>’ aliases for video and audio respectively).
+A simple filtergraph for video can look for example like this:
+</p>
+<table><tr><td> </td><td><pre class="example"> _______ _____________ _______ ________
+| | | | | | | |
+| input | ---> | deinterlace | ---> | scale | ---> | output |
+|_______| |_____________| |_______| |________|
+
+</pre></td></tr></table>
+
+<p>Note that some filters change frame properties but not frame contents. E.g. the
+<code>fps</code> filter in the example above changes number of frames, but does not
+touch the frame contents. Another example is the <code>setpts</code> filter, which
+only sets timestamps and otherwise passes the frames unchanged.
+</p>
+<a name="Complex-filtergraphs"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Complex-filtergraphs">3.1.2 Complex filtergraphs</a></h3>
+<p>Complex filtergraphs are those which cannot be described as simply a linear
+processing chain applied to one stream. This is the case, for example, when the graph has
+more than one input and/or output, or when output stream type is different from
+input. They can be represented with the following diagram:
+</p>
+<table><tr><td> </td><td><pre class="example"> _________
+| |
+| input 0 |\ __________
+|_________| \ | |
+ \ _________ /| output 0 |
+ \ | | / |__________|
+ _________ \| complex | /
+| | | |/
+| input 1 |---->| filter |\
+|_________| | | \ __________
+ /| graph | \ | |
+ / | | \| output 1 |
+ _________ / |_________| |__________|
+| | /
+| input 2 |/
+|_________|
+
+</pre></td></tr></table>
+
+<p>Complex filtergraphs are configured with the ‘<samp>-filter_complex</samp>’ option.
+Note that this option is global, since a complex filtergraph, by its nature,
+cannot be unambiguously associated with a single stream or file.
+</p>
+<p>The ‘<samp>-lavfi</samp>’ option is equivalent to ‘<samp>-filter_complex</samp>’.
+</p>
+<p>A trivial example of a complex filtergraph is the <code>overlay</code> filter, which
+has two video inputs and one video output, containing one video overlaid on top
+of the other. Its audio counterpart is the <code>amix</code> filter.
+</p>
+<a name="Stream-copy"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Stream-copy">3.2 Stream copy</a></h2>
+<p>Stream copy is a mode selected by supplying the <code>copy</code> parameter to the
+‘<samp>-codec</samp>’ option. It makes <code>ffmpeg</code> omit the decoding and encoding
+step for the specified stream, so it does only demuxing and muxing. It is useful
+for changing the container format or modifying container-level metadata. The
+diagram above will, in this case, simplify to this:
+</p>
+<table><tr><td> </td><td><pre class="example"> _______ ______________ ________
+| | | | | |
+| input | demuxer | encoded data | muxer | output |
+| file | ---------> | packets | -------> | file |
+|_______| |______________| |________|
+
+</pre></td></tr></table>
+
+<p>Since there is no decoding or encoding, it is very fast and there is no quality
+loss. However, it might not work in some cases because of many factors. Applying
+filters is obviously also impossible, since filters work on uncompressed data.
+</p>
+
+<a name="Stream-selection"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Stream-selection">4. Stream selection</a></h1>
+
+<p>By default, <code>ffmpeg</code> 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, it is the stream with the most channels, for
+subtitles, it is the first subtitle stream. In the case where several streams of
+the same type rate equally, the stream with the lowest index is chosen.
+</p>
+<p>You can disable some of those defaults by using the <code>-vn/-an/-sn</code> options. For
+full manual control, use the <code>-map</code> option, which disables the defaults just
+described.
+</p>
+
+<a name="Options-9"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Options-9">5. Options</a></h1>
+
+<p>All the numerical options, if not specified otherwise, accept a string
+representing a number as input, which may be followed by one of the SI
+unit prefixes, for example: ’K’, ’M’, or ’G’.
+</p>
+<p>If ’i’ is appended to the SI unit prefix, the complete prefix will be
+interpreted as a unit prefix for binary multiplies, which are based on
+powers of 1024 instead of powers of 1000. Appending ’B’ to the SI unit
+prefix multiplies the value by 8. This allows using, for example:
+’KB’, ’MiB’, ’G’ and ’B’ as number suffixes.
+</p>
+<p>Options which do not take arguments are boolean options, and set the
+corresponding value to true. They can be set to false by prefixing
+the option name with "no". For example using "-nofoo"
+will set the boolean option with name "foo" to false.
+</p>
+<p><a name="Stream-specifiers"></a>
+</p><a name="Stream-specifiers-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Stream-specifiers-1">5.1 Stream specifiers</a></h2>
+<p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
+are used to precisely specify which stream(s) a given option belongs to.
+</p>
+<p>A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. <code>-codec:a:1 ac3</code> contains the
+<code>a:1</code> stream specifier, which matches the second audio stream. Therefore, it
+would select the ac3 codec for the second audio stream.
+</p>
+<p>A stream specifier can match several streams, so that the option is applied to all
+of them. E.g. the stream specifier in <code>-b:a 128k</code> matches all audio
+streams.
+</p>
+<p>An empty stream specifier matches all streams. For example, <code>-codec copy</code>
+or <code>-codec: copy</code> would copy all the streams without reencoding.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index. E.g. <code>-threads:1 4</code> would set the
+thread count for the second stream to 4.
+</p></dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle,
+’d’ for data, and ’t’ for attachments. If <var>stream_index</var> is given, then it matches
+stream number <var>stream_index</var> of this type. Otherwise, it matches all
+streams of this type.
+</p></dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number <var>stream_index</var>
+in the program with the id <var>program_id</var>. Otherwise, it matches all streams in the
+program.
+</p></dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<a name="Generic-options"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Generic-options">5.2 Generic options</a></h2>
+
+<p>These options are shared amongst the ff* tools.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-L</samp>’</dt>
+<dd><p>Show license.
+</p>
+</dd>
+<dt> ‘<samp>-h, -?, -help, --help [<var>arg</var>]</samp>’</dt>
+<dd><p>Show help. An optional parameter may be specified to print help about a specific
+item. If no argument is specified, only basic (non advanced) tool
+options are shown.
+</p>
+<p>Possible values of <var>arg</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>long</samp>’</dt>
+<dd><p>Print advanced tool options in addition to the basic tool options.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Print complete list of options, including shared and private options
+for encoders, decoders, demuxers, muxers, filters, etc.
+</p>
+</dd>
+<dt> ‘<samp>decoder=<var>decoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the decoder named <var>decoder_name</var>. Use the
+‘<samp>-decoders</samp>’ option to get a list of all decoders.
+</p>
+</dd>
+<dt> ‘<samp>encoder=<var>encoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the encoder named <var>encoder_name</var>. Use the
+‘<samp>-encoders</samp>’ option to get a list of all encoders.
+</p>
+</dd>
+<dt> ‘<samp>demuxer=<var>demuxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the demuxer named <var>demuxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all demuxers and muxers.
+</p>
+</dd>
+<dt> ‘<samp>muxer=<var>muxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the muxer named <var>muxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all muxers and demuxers.
+</p>
+</dd>
+<dt> ‘<samp>filter=<var>filter_name</var></samp>’</dt>
+<dd><p>Print detailed information about the filter name <var>filter_name</var>. Use the
+‘<samp>-filters</samp>’ option to get a list of all filters.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-version</samp>’</dt>
+<dd><p>Show version.
+</p>
+</dd>
+<dt> ‘<samp>-formats</samp>’</dt>
+<dd><p>Show available formats.
+</p>
+</dd>
+<dt> ‘<samp>-codecs</samp>’</dt>
+<dd><p>Show all codecs known to libavcodec.
+</p>
+<p>Note that the term ’codec’ is used throughout this documentation as a shortcut
+for what is more correctly called a media bitstream format.
+</p>
+</dd>
+<dt> ‘<samp>-decoders</samp>’</dt>
+<dd><p>Show available decoders.
+</p>
+</dd>
+<dt> ‘<samp>-encoders</samp>’</dt>
+<dd><p>Show all available encoders.
+</p>
+</dd>
+<dt> ‘<samp>-bsfs</samp>’</dt>
+<dd><p>Show available bitstream filters.
+</p>
+</dd>
+<dt> ‘<samp>-protocols</samp>’</dt>
+<dd><p>Show available protocols.
+</p>
+</dd>
+<dt> ‘<samp>-filters</samp>’</dt>
+<dd><p>Show available libavfilter filters.
+</p>
+</dd>
+<dt> ‘<samp>-pix_fmts</samp>’</dt>
+<dd><p>Show available pixel formats.
+</p>
+</dd>
+<dt> ‘<samp>-sample_fmts</samp>’</dt>
+<dd><p>Show available sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-layouts</samp>’</dt>
+<dd><p>Show channel names and standard channel layouts.
+</p>
+</dd>
+<dt> ‘<samp>-colors</samp>’</dt>
+<dd><p>Show recognized color names.
+</p>
+</dd>
+<dt> ‘<samp>-loglevel [repeat+]<var>loglevel</var> | -v [repeat+]<var>loglevel</var></samp>’</dt>
+<dd><p>Set the logging level used by the library.
+Adding "repeat+" indicates that repeated log output should not be compressed
+to the first line and the "Last message repeated n times" line will be
+omitted. "repeat" can also be used alone.
+If "repeat" is used alone, and with no prior loglevel set, the default
+loglevel will be used. If multiple loglevel parameters are given, using
+’repeat’ will not change the loglevel.
+<var>loglevel</var> is a number or a string containing one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>quiet</samp>’</dt>
+<dd><p>Show nothing at all; be silent.
+</p></dd>
+<dt> ‘<samp>panic</samp>’</dt>
+<dd><p>Only show fatal errors which could lead the process to crash, such as
+and assert failure. This is not currently used for anything.
+</p></dd>
+<dt> ‘<samp>fatal</samp>’</dt>
+<dd><p>Only show fatal errors. These are errors after which the process absolutely
+cannot continue after.
+</p></dd>
+<dt> ‘<samp>error</samp>’</dt>
+<dd><p>Show all errors, including ones which can be recovered from.
+</p></dd>
+<dt> ‘<samp>warning</samp>’</dt>
+<dd><p>Show all warnings and errors. Any message related to possibly
+incorrect or unexpected events will be shown.
+</p></dd>
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>Show informative messages during processing. This is in addition to
+warnings and errors. This is the default value.
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>Same as <code>info</code>, except more verbose.
+</p></dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Show everything, including debugging information.
+</p></dd>
+</dl>
+
+<p>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
+<code>AV_LOG_FORCE_NOCOLOR</code> or <code>NO_COLOR</code>, or can be forced setting
+the environment variable <code>AV_LOG_FORCE_COLOR</code>.
+The use of the environment variable <code>NO_COLOR</code> is deprecated and
+will be dropped in a following FFmpeg version.
+</p>
+</dd>
+<dt> ‘<samp>-report</samp>’</dt>
+<dd><p>Dump full command line and console output to a file named
+<code><var>program</var>-<var>YYYYMMDD</var>-<var>HHMMSS</var>.log</code> in the current
+directory.
+This file can be useful for bug reports.
+It also implies <code>-loglevel verbose</code>.
+</p>
+<p>Setting the environment variable <code>FFREPORT</code> to any value has the
+same effect. If the value is a ’:’-separated key=value sequence, these
+options will affect the report; options values must be escaped if they
+contain special characters or the options delimiter ’:’ (see the
+“Quoting and escaping” section in the ffmpeg-utils manual). The
+following option is recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>set the file name to use for the report; <code>%p</code> is expanded to the name
+of the program, <code>%t</code> is expanded to a timestamp, <code>%%</code> is expanded
+to a plain <code>%</code>
+</p></dd>
+</dl>
+
+<p>Errors in parsing the environment variable are not fatal, and will not
+appear in the report.
+</p>
+</dd>
+<dt> ‘<samp>-hide_banner</samp>’</dt>
+<dd><p>Suppress printing banner.
+</p>
+<p>All FFmpeg tools will normally show a copyright notice, build options
+and library versions. This option can be used to suppress printing
+this information.
+</p>
+</dd>
+<dt> ‘<samp>-cpuflags flags (<em>global</em>)</samp>’</dt>
+<dd><p>Allows setting and clearing cpu flags. This option is intended
+for testing. Do not use it unless you know what you’re doing.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -cpuflags -sse+mmx ...
+ffmpeg -cpuflags mmx ...
+ffmpeg -cpuflags 0 ...
+</pre></td></tr></table>
+<p>Possible flags for this option are:
+</p><dl compact="compact">
+<dt> ‘<samp>x86</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>mmxext</samp>’</dt>
+<dt> ‘<samp>sse</samp>’</dt>
+<dt> ‘<samp>sse2</samp>’</dt>
+<dt> ‘<samp>sse2slow</samp>’</dt>
+<dt> ‘<samp>sse3</samp>’</dt>
+<dt> ‘<samp>sse3slow</samp>’</dt>
+<dt> ‘<samp>ssse3</samp>’</dt>
+<dt> ‘<samp>atom</samp>’</dt>
+<dt> ‘<samp>sse4.1</samp>’</dt>
+<dt> ‘<samp>sse4.2</samp>’</dt>
+<dt> ‘<samp>avx</samp>’</dt>
+<dt> ‘<samp>xop</samp>’</dt>
+<dt> ‘<samp>fma4</samp>’</dt>
+<dt> ‘<samp>3dnow</samp>’</dt>
+<dt> ‘<samp>3dnowext</samp>’</dt>
+<dt> ‘<samp>cmov</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>ARM</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>armv5te</samp>’</dt>
+<dt> ‘<samp>armv6</samp>’</dt>
+<dt> ‘<samp>armv6t2</samp>’</dt>
+<dt> ‘<samp>vfp</samp>’</dt>
+<dt> ‘<samp>vfpv3</samp>’</dt>
+<dt> ‘<samp>neon</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>PowerPC</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>altivec</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>Specific Processors</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>pentium2</samp>’</dt>
+<dt> ‘<samp>pentium3</samp>’</dt>
+<dt> ‘<samp>pentium4</samp>’</dt>
+<dt> ‘<samp>k6</samp>’</dt>
+<dt> ‘<samp>k62</samp>’</dt>
+<dt> ‘<samp>athlon</samp>’</dt>
+<dt> ‘<samp>athlonxp</samp>’</dt>
+<dt> ‘<samp>k8</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-opencl_bench</samp>’</dt>
+<dd><p>Benchmark all available OpenCL devices and show the results. This option
+is only available when FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+</dd>
+<dt> ‘<samp>-opencl_options options (<em>global</em>)</samp>’</dt>
+<dd><p>Set OpenCL environment options. This option is only available when
+FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+<p><var>options</var> must be a list of <var>key</var>=<var>value</var> option pairs
+separated by ’:’. See the “OpenCL Options” section in the
+ffmpeg-utils manual for the list of supported options.
+</p></dd>
+</dl>
+
+<a name="AVOptions"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-AVOptions">5.3 AVOptions</a></h2>
+
+<p>These options are provided directly by the libavformat, libavdevice and
+libavcodec libraries. To see the list of available AVOptions, use the
+‘<samp>-help</samp>’ option. They are separated into two categories:
+</p><dl compact="compact">
+<dt> ‘<samp>generic</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>private</samp>’</dt>
+<dd><p>These options are specific to the given container, device or codec. Private
+options are listed under their corresponding containers/devices/codecs.
+</p></dd>
+</dl>
+
+<p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
+an MP3 file, use the ‘<samp>id3v2_version</samp>’ private option of the MP3
+muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.flac -id3v2_version 3 out.mp3
+</pre></td></tr></table>
+
+<p>All codec AVOptions are per-stream, and thus a stream specifier
+should be attached to them.
+</p>
+<p>Note: the ‘<samp>-nooption</samp>’ syntax cannot be used for boolean
+AVOptions, use ‘<samp>-option 0</samp>’/‘<samp>-option 1</samp>’.
+</p>
+<p>Note: the 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.
+</p>
+<a name="Main-options"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Main-options">5.4 Main options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-f <var>fmt</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Force input or output file format. The format is normally auto detected for input
+files and guessed from the file extension for output files, so this option is not
+needed in most cases.
+</p>
+</dd>
+<dt> ‘<samp>-i <var>filename</var> (<em>input</em>)</samp>’</dt>
+<dd><p>input file name
+</p>
+</dd>
+<dt> ‘<samp>-y (<em>global</em>)</samp>’</dt>
+<dd><p>Overwrite output files without asking.
+</p>
+</dd>
+<dt> ‘<samp>-n (<em>global</em>)</samp>’</dt>
+<dd><p>Do not overwrite output files, and exit immediately if a specified
+output file already exists.
+</p>
+</dd>
+<dt> ‘<samp>-c[:<var>stream_specifier</var>] <var>codec</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dt> ‘<samp>-codec[:<var>stream_specifier</var>] <var>codec</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Select an encoder (when used before an output file) or a decoder (when used
+before an input file) for one or more streams. <var>codec</var> is the name of a
+decoder/encoder or a special value <code>copy</code> (output only) to indicate that
+the stream is not to be re-encoded.
+</p>
+<p>For example
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
+</pre></td></tr></table>
+<p>encodes all video streams with libx264 and copies all audio streams.
+</p>
+<p>For each stream, the last matching <code>c</code> option is applied, so
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
+</pre></td></tr></table>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>-t <var>duration</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Stop writing the output after its duration reaches <var>duration</var>.
+<var>duration</var> may be a number in seconds, or in <code>hh:mm:ss[.xxx]</code> form.
+</p>
+<p>-to and -t are mutually exclusive and -t has priority.
+</p>
+</dd>
+<dt> ‘<samp>-to <var>position</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Stop writing the output at <var>position</var>.
+<var>position</var> may be a number in seconds, or in <code>hh:mm:ss[.xxx]</code> form.
+</p>
+<p>-to and -t are mutually exclusive and -t has priority.
+</p>
+</dd>
+<dt> ‘<samp>-fs <var>limit_size</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the file size limit, expressed in bytes.
+</p>
+</dd>
+<dt> ‘<samp>-ss <var>position</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>When used as an input option (before <code>-i</code>), seeks in this input file to
+<var>position</var>. Note the in most formats it is not possible to seek exactly, so
+<code>ffmpeg</code> will seek to the closest seek point before <var>position</var>.
+When transcoding and ‘<samp>-accurate_seek</samp>’ is enabled (the default), this
+extra segment between the seek point and <var>position</var> will be decoded and
+discarded. When doing stream copy or when ‘<samp>-noaccurate_seek</samp>’ is used, it
+will be preserved.
+</p>
+<p>When used as an output option (before an output filename), decodes but discards
+input until the timestamps reach <var>position</var>.
+</p>
+<p><var>position</var> may be either in seconds or in <code>hh:mm:ss[.xxx]</code> form.
+</p>
+</dd>
+<dt> ‘<samp>-itsoffset <var>offset</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set the input time offset.
+</p>
+<p><var>offset</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#time-duration-syntax">(ffmpeg-utils)time duration syntax</a>.
+</p>
+<p>The offset is added to the timestamps of the input files. Specifying
+a positive offset means that the corresponding streams are delayed by
+the time duration specified in <var>offset</var>.
+</p>
+</dd>
+<dt> ‘<samp>-timestamp <var>date</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the recording timestamp in the container.
+</p>
+<p><var>date</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#date-syntax">(ffmpeg-utils)date syntax</a>.
+</p>
+</dd>
+<dt> ‘<samp>-metadata[:metadata_specifier] <var>key</var>=<var>value</var> (<em>output,per-metadata</em>)</samp>’</dt>
+<dd><p>Set a metadata key/value pair.
+</p>
+<p>An optional <var>metadata_specifier</var> may be given to set metadata
+on streams or chapters. See <code>-map_metadata</code> documentation for
+details.
+</p>
+<p>This option overrides metadata set with <code>-map_metadata</code>. It is
+also possible to delete metadata by using an empty value.
+</p>
+<p>For example, for setting the title in the output file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -metadata title="my title" out.flv
+</pre></td></tr></table>
+
+<p>To set the language of the first audio stream:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-target <var>type</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Specify target file type (<code>vcd</code>, <code>svcd</code>, <code>dvd</code>, <code>dv</code>,
+<code>dv50</code>). <var>type</var> may be prefixed with <code>pal-</code>, <code>ntsc-</code> or
+<code>film-</code> to use the corresponding standard. All the format options
+(bitrate, codecs, buffer sizes) are then set automatically. You can just type:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
+</pre></td></tr></table>
+
+<p>Nevertheless you can specify additional options as long as you know
+they do not conflict with the standard, as in:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-dframes <var>number</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the number of data frames to record. This is an alias for <code>-frames:d</code>.
+</p>
+</dd>
+<dt> ‘<samp>-frames[:<var>stream_specifier</var>] <var>framecount</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Stop writing to the stream after <var>framecount</var> frames.
+</p>
+</dd>
+<dt> ‘<samp>-q[:<var>stream_specifier</var>] <var>q</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dt> ‘<samp>-qscale[:<var>stream_specifier</var>] <var>q</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Use fixed quality scale (VBR). The meaning of <var>q</var>/<var>qscale</var> is
+codec-dependent.
+If <var>qscale</var> is used without a <var>stream_specifier</var> then it applies only
+to the video stream, this is to maintain compatibility with previous behavior
+and as specifying the same codec specific value to 2 different codecs that is
+audio and video generally is not what is intended when no stream_specifier is
+used.
+</p>
+<p><a name="filter_005foption"></a>
+</p></dd>
+<dt> ‘<samp>-filter[:<var>stream_specifier</var>] <var>filtergraph</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the stream.
+</p>
+<p><var>filtergraph</var> is a description of the filtergraph to apply to
+the stream, and must have a single input and a single output of the
+same type of the stream. In the filtergraph, the input is associated
+to the label <code>in</code>, and the output to the label <code>out</code>. See
+the ffmpeg-filters manual for more information about the filtergraph
+syntax.
+</p>
+<p>See the <a href="#filter_005fcomplex_005foption">-filter_complex option</a> if you
+want to create filtergraphs with multiple inputs and/or outputs.
+</p>
+</dd>
+<dt> ‘<samp>-filter_script[:<var>stream_specifier</var>] <var>filename</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>This option is similar to ‘<samp>-filter</samp>’, the only difference is that its
+argument is the name of the file from which a filtergraph description is to be
+read.
+</p>
+</dd>
+<dt> ‘<samp>-pre[:<var>stream_specifier</var>] <var>preset_name</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Specify the preset for matching stream(s).
+</p>
+</dd>
+<dt> ‘<samp>-stats (<em>global</em>)</samp>’</dt>
+<dd><p>Print encoding progress/statistics. It is on by default, to explicitly
+disable it you need to specify <code>-nostats</code>.
+</p>
+</dd>
+<dt> ‘<samp>-progress <var>url</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Send program-friendly progress information to <var>url</var>.
+</p>
+<p>Progress information is written approximately every second and at the end of
+the encoding process. It is made of "<var>key</var>=<var>value</var>" lines. <var>key</var>
+consists of only alphanumeric characters. The last key of a sequence of
+progress information is always "progress".
+</p>
+</dd>
+<dt> ‘<samp>-stdin</samp>’</dt>
+<dd><p>Enable interaction on standard input. On by default unless standard input is
+used as an input. To explicitly disable interaction you need to specify
+<code>-nostdin</code>.
+</p>
+<p>Disabling interaction on standard input is useful, for example, if
+ffmpeg is in the background process group. Roughly the same result can
+be achieved with <code>ffmpeg ... < /dev/null</code> but it requires a
+shell.
+</p>
+</dd>
+<dt> ‘<samp>-debug_ts (<em>global</em>)</samp>’</dt>
+<dd><p>Print timestamp information. It is off by default. This option is
+mostly useful for testing and debugging purposes, and the output
+format may change from one version to another, so it should not be
+employed by portable scripts.
+</p>
+<p>See also the option <code>-fdebug ts</code>.
+</p>
+</dd>
+<dt> ‘<samp>-attach <var>filename</var> (<em>output</em>)</samp>’</dt>
+<dd><p>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 <code>-map</code> or automatic mappings).
+</p>
+<p>Note that for Matroska you also have to set the mimetype metadata tag:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
+</pre></td></tr></table>
+<p>(assuming that the attachment stream will be third in the output file).
+</p>
+</dd>
+<dt> ‘<samp>-dump_attachment[:<var>stream_specifier</var>] <var>filename</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>Extract the matching attachment stream into a file named <var>filename</var>. If
+<var>filename</var> is empty, then the value of the <code>filename</code> metadata tag
+will be used.
+</p>
+<p>E.g. to extract the first attachment to a file named ’out.ttf’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
+</pre></td></tr></table>
+<p>To extract all attachments to files determined by the <code>filename</code> tag:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -dump_attachment:t "" -i INPUT
+</pre></td></tr></table>
+
+<p>Technical note – attachments are implemented as codec extradata, so this
+option can actually be used to extract extradata from any stream, not just
+attachments.
+</p>
+</dd>
+</dl>
+
+<a name="Video-Options"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Video-Options">5.5 Video Options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-vframes <var>number</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the number of video frames to record. This is an alias for <code>-frames:v</code>.
+</p></dd>
+<dt> ‘<samp>-r[:<var>stream_specifier</var>] <var>fps</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Set frame rate (Hz value, fraction or abbreviation).
+</p>
+<p>As an input option, ignore any timestamps stored in the file and instead
+generate timestamps assuming constant frame rate <var>fps</var>.
+</p>
+<p>As an output option, duplicate or drop input frames to achieve constant output
+frame rate <var>fps</var>.
+</p>
+</dd>
+<dt> ‘<samp>-s[:<var>stream_specifier</var>] <var>size</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Set frame size.
+</p>
+<p>As an input option, this is a shortcut for the ‘<samp>video_size</samp>’ private
+option, recognized by some demuxers for which the frame size is either not
+stored in the file or is configurable – e.g. raw video or video grabbers.
+</p>
+<p>As an output option, this inserts the <code>scale</code> video filter to the
+<em>end</em> of the corresponding filtergraph. Please use the <code>scale</code> filter
+directly to insert it at the beginning or some other place.
+</p>
+<p>The format is ‘<samp>wxh</samp>’ (default - same as source).
+</p>
+</dd>
+<dt> ‘<samp>-aspect[:<var>stream_specifier</var>] <var>aspect</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set the video display aspect ratio specified by <var>aspect</var>.
+</p>
+<p><var>aspect</var> can be a floating point number string, or a string of the
+form <var>num</var>:<var>den</var>, where <var>num</var> and <var>den</var> are the
+numerator and denominator of the aspect ratio. For example "4:3",
+"16:9", "1.3333", and "1.7777" are valid argument values.
+</p>
+<p>If used together with ‘<samp>-vcodec copy</samp>’, it will affect the aspect ratio
+stored at container level, but not the aspect ratio stored in encoded
+frames, if it exists.
+</p>
+</dd>
+<dt> ‘<samp>-vn (<em>output</em>)</samp>’</dt>
+<dd><p>Disable video recording.
+</p>
+</dd>
+<dt> ‘<samp>-vcodec <var>codec</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the video codec. This is an alias for <code>-codec:v</code>.
+</p>
+</dd>
+<dt> ‘<samp>-pass[:<var>stream_specifier</var>] <var>n</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>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:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-passlogfile[:<var>stream_specifier</var>] <var>prefix</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set two-pass log file name prefix to <var>prefix</var>, the default file name
+prefix is “ffmpeg2pass”. The complete file name will be
+‘<tt>PREFIX-N.log</tt>’, where N is a number specific to the output
+stream
+</p>
+</dd>
+<dt> ‘<samp>-vf <var>filtergraph</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the stream.
+</p>
+<p>This is an alias for <code>-filter:v</code>, see the <a href="#filter_005foption">-filter option</a>.
+</p></dd>
+</dl>
+
+<a name="Advanced-Video-Options"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Advanced-Video-Options">5.6 Advanced Video Options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-pix_fmt[:<var>stream_specifier</var>] <var>format</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Set pixel format. Use <code>-pix_fmts</code> to show all the supported
+pixel formats.
+If the selected pixel format can not be selected, ffmpeg will print a
+warning and select the best pixel format supported by the encoder.
+If <var>pix_fmt</var> is prefixed by a <code>+</code>, ffmpeg will exit with an error
+if the requested pixel format can not be selected, and automatic conversions
+inside filtergraphs are disabled.
+If <var>pix_fmt</var> is a single <code>+</code>, ffmpeg selects the same pixel format
+as the input (or graph output) and automatic conversions are disabled.
+</p>
+</dd>
+<dt> ‘<samp>-sws_flags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set SwScaler flags.
+</p></dd>
+<dt> ‘<samp>-vdt <var>n</var></samp>’</dt>
+<dd><p>Discard threshold.
+</p>
+</dd>
+<dt> ‘<samp>-rc_override[:<var>stream_specifier</var>] <var>override</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>-ilme</samp>’</dt>
+<dd><p>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
+‘<samp>-deinterlace</samp>’, but deinterlacing introduces losses.
+</p></dd>
+<dt> ‘<samp>-psnr</samp>’</dt>
+<dd><p>Calculate PSNR of compressed frames.
+</p></dd>
+<dt> ‘<samp>-vstats</samp>’</dt>
+<dd><p>Dump video coding statistics to ‘<tt>vstats_HHMMSS.log</tt>’.
+</p></dd>
+<dt> ‘<samp>-vstats_file <var>file</var></samp>’</dt>
+<dd><p>Dump video coding statistics to <var>file</var>.
+</p></dd>
+<dt> ‘<samp>-top[:<var>stream_specifier</var>] <var>n</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>top=1/bottom=0/auto=-1 field first
+</p></dd>
+<dt> ‘<samp>-dc <var>precision</var></samp>’</dt>
+<dd><p>Intra_dc_precision.
+</p></dd>
+<dt> ‘<samp>-vtag <var>fourcc/tag</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Force video tag/fourcc. This is an alias for <code>-tag:v</code>.
+</p></dd>
+<dt> ‘<samp>-qphist (<em>global</em>)</samp>’</dt>
+<dd><p>Show QP histogram
+</p></dd>
+<dt> ‘<samp>-vbsf <var>bitstream_filter</var></samp>’</dt>
+<dd><p>Deprecated see -bsf
+</p>
+</dd>
+<dt> ‘<samp>-force_key_frames[:<var>stream_specifier</var>] <var>time</var>[,<var>time</var>...] (<em>output,per-stream</em>)</samp>’</dt>
+<dt> ‘<samp>-force_key_frames[:<var>stream_specifier</var>] expr:<var>expr</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Force key frames at the specified timestamps, more precisely at the first
+frames after each specified time.
+</p>
+<p>If the argument is prefixed with <code>expr:</code>, the string <var>expr</var>
+is interpreted like an expression and is evaluated for each frame. A
+key frame is forced in case the evaluation is non-zero.
+</p>
+<p>If one of the times is "<code>chapters</code>[<var>delta</var>]", it is expanded into
+the time of the beginning of all chapters in the file, shifted by
+<var>delta</var>, expressed as a time in seconds.
+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.
+</p>
+<p>For example, to insert a key frame at 5 minutes, plus key frames 0.1 second
+before the beginning of every chapter:
+</p><table><tr><td> </td><td><pre class="example">-force_key_frames 0:05:00,chapters-0.1
+</pre></td></tr></table>
+
+<p>The expression in <var>expr</var> can contain the following constants:
+</p><dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of current processed frame, starting from 0
+</p></dd>
+<dt> ‘<samp>n_forced</samp>’</dt>
+<dd><p>the number of forced frames
+</p></dd>
+<dt> ‘<samp>prev_forced_n</samp>’</dt>
+<dd><p>the number of the previous forced frame, it is <code>NAN</code> when no
+keyframe was forced yet
+</p></dd>
+<dt> ‘<samp>prev_forced_t</samp>’</dt>
+<dd><p>the time of the previous forced frame, it is <code>NAN</code> when no
+keyframe was forced yet
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the time of the current processed frame
+</p></dd>
+</dl>
+
+<p>For example to force a key frame every 5 seconds, you can specify:
+</p><table><tr><td> </td><td><pre class="example">-force_key_frames expr:gte(t,n_forced*5)
+</pre></td></tr></table>
+
+<p>To force a key frame 5 seconds after the time of the last forced one,
+starting from second 13:
+</p><table><tr><td> </td><td><pre class="example">-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
+</pre></td></tr></table>
+
+<p>Note that forcing too many keyframes is very harmful for the lookahead
+algorithms of certain encoders: using fixed-GOP options or similar
+would be more efficient.
+</p>
+</dd>
+<dt> ‘<samp>-copyinkf[:<var>stream_specifier</var>] (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>When doing stream copy, copy also non-key frames found at the
+beginning.
+</p>
+</dd>
+<dt> ‘<samp>-hwaccel[:<var>stream_specifier</var>] <var>hwaccel</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>Use hardware acceleration to decode the matching stream(s). The allowed values
+of <var>hwaccel</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do not use any hardware acceleration (the default).
+</p>
+</dd>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatically select the hardware acceleration method.
+</p>
+</dd>
+<dt> ‘<samp>vdpau</samp>’</dt>
+<dd><p>Use VDPAU (Video Decode and Presentation API for Unix) hardware acceleration.
+</p></dd>
+</dl>
+
+<p>This option has no effect if the selected hwaccel is not available or not
+supported by the chosen decoder.
+</p>
+<p>Note that most acceleration methods are intended for playback and will not be
+faster than software decoding on modern CPUs. Additionally, <code>ffmpeg</code>
+will usually need to copy the decoded frames from the GPU memory into the system
+memory, resulting in further performance loss. This option is thus mainly
+useful for testing.
+</p>
+</dd>
+<dt> ‘<samp>-hwaccel_device[:<var>stream_specifier</var>] <var>hwaccel_device</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>Select a device to use for hardware acceleration.
+</p>
+<p>This option only makes sense when the ‘<samp>-hwaccel</samp>’ option is also
+specified. Its exact meaning depends on the specific hardware acceleration
+method chosen.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>vdpau</samp>’</dt>
+<dd><p>For VDPAU, this option specifies the X11 display/screen to use. If this option
+is not specified, the value of the <var>DISPLAY</var> environment variable is used
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Audio-Options"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Audio-Options">5.7 Audio Options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-aframes <var>number</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the number of audio frames to record. This is an alias for <code>-frames:a</code>.
+</p></dd>
+<dt> ‘<samp>-ar[:<var>stream_specifier</var>] <var>freq</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-aq <var>q</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the audio quality (codec-specific, VBR). This is an alias for -q:a.
+</p></dd>
+<dt> ‘<samp>-ac[:<var>stream_specifier</var>] <var>channels</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-an (<em>output</em>)</samp>’</dt>
+<dd><p>Disable audio recording.
+</p></dd>
+<dt> ‘<samp>-acodec <var>codec</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set the audio codec. This is an alias for <code>-codec:a</code>.
+</p></dd>
+<dt> ‘<samp>-sample_fmt[:<var>stream_specifier</var>] <var>sample_fmt</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set the audio sample format. Use <code>-sample_fmts</code> to get a list
+of supported sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-af <var>filtergraph</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the stream.
+</p>
+<p>This is an alias for <code>-filter:a</code>, see the <a href="#filter_005foption">-filter option</a>.
+</p></dd>
+</dl>
+
+<a name="Advanced-Audio-options_003a"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Advanced-Audio-options_003a">5.8 Advanced Audio options:</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-atag <var>fourcc/tag</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Force audio tag/fourcc. This is an alias for <code>-tag:a</code>.
+</p></dd>
+<dt> ‘<samp>-absf <var>bitstream_filter</var></samp>’</dt>
+<dd><p>Deprecated, see -bsf
+</p></dd>
+<dt> ‘<samp>-guess_layout_max <var>channels</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>If some input channel layout is not known, try to guess only if it
+corresponds to at most the specified number of channels. For example, 2
+tells to <code>ffmpeg</code> to recognize 1 channel as mono and 2 channels as
+stereo but not 6 channels as 5.1. The default is to always try to guess. Use
+0 to disable all guessing.
+</p></dd>
+</dl>
+
+<a name="Subtitle-options_003a"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Subtitle-options_003a">5.9 Subtitle options:</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-scodec <var>codec</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set the subtitle codec. This is an alias for <code>-codec:s</code>.
+</p></dd>
+<dt> ‘<samp>-sn (<em>output</em>)</samp>’</dt>
+<dd><p>Disable subtitle recording.
+</p></dd>
+<dt> ‘<samp>-sbsf <var>bitstream_filter</var></samp>’</dt>
+<dd><p>Deprecated, see -bsf
+</p></dd>
+</dl>
+
+<a name="Advanced-Subtitle-options_003a"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Advanced-Subtitle-options_003a">5.10 Advanced Subtitle options:</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-fix_sub_duration</samp>’</dt>
+<dd><p>Fix subtitles durations. For each subtitle, wait for the next packet in the
+same stream and adjust the duration of the first to avoid overlap. This is
+necessary with some subtitles codecs, especially DVB subtitles, because the
+duration in the original packet is only a rough estimate and the end is
+actually marked by an empty subtitle frame. Failing to use this option when
+necessary can result in exaggerated durations or muxing failures due to
+non-monotonic timestamps.
+</p>
+<p>Note that this option will delay the output of all data until the next
+subtitle packet is decoded: it may increase memory consumption and latency a
+lot.
+</p>
+</dd>
+<dt> ‘<samp>-canvas_size <var>size</var></samp>’</dt>
+<dd><p>Set the size of the canvas used to render subtitles.
+</p>
+</dd>
+</dl>
+
+<a name="Advanced-options"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Advanced-options">5.11 Advanced options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-map [-]<var>input_file_id</var>[:<var>stream_specifier</var>][,<var>sync_file_id</var>[:<var>stream_specifier</var>]] | <var>[linklabel]</var> (<em>output</em>)</samp>’</dt>
+<dd>
+<p>Designate one or more input streams as a source for the output file. Each input
+stream is identified by the input file index <var>input_file_id</var> and
+the input stream index <var>input_stream_id</var> within the input
+file. Both indices start at 0. If specified,
+<var>sync_file_id</var>:<var>stream_specifier</var> sets which input stream
+is used as a presentation sync reference.
+</p>
+<p>The first <code>-map</code> option on the command line specifies the
+source for output stream 0, the second <code>-map</code> option specifies
+the source for output stream 1, etc.
+</p>
+<p>A <code>-</code> character before the stream identifier creates a "negative" mapping.
+It disables matching streams from already created mappings.
+</p>
+<p>An alternative <var>[linklabel]</var> form will map outputs from complex filter
+graphs (see the ‘<samp>-filter_complex</samp>’ option) to the output file.
+<var>linklabel</var> must correspond to a defined output link label in the graph.
+</p>
+<p>For example, to map ALL streams from the first input file to output
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 output
+</pre></td></tr></table>
+
+<p>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
+<code>-map</code> to select which streams to place in an output file. For
+example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0:1 out.wav
+</pre></td></tr></table>
+<p>will map the input stream in ‘<tt>INPUT</tt>’ identified by "0:1" to
+the (single) output stream in ‘<tt>out.wav</tt>’.
+</p>
+<p>For example, to select the stream with index 2 from input file
+‘<tt>a.mov</tt>’ (specified by the identifier "0:2"), and stream with
+index 6 from input ‘<tt>b.mov</tt>’ (specified by the identifier "1:6"),
+and copy them to the output file ‘<tt>out.mov</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
+</pre></td></tr></table>
+
+<p>To select all video and the third audio stream from an input file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
+</pre></td></tr></table>
+
+<p>To map all the streams except the second audio, use negative mappings
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
+</pre></td></tr></table>
+
+<p>Note that using this option disables the default mappings for this output file.
+</p>
+</dd>
+<dt> ‘<samp>-map_channel [<var>input_file_id</var>.<var>stream_specifier</var>.<var>channel_id</var>|-1][:<var>output_file_id</var>.<var>stream_specifier</var>]</samp>’</dt>
+<dd><p>Map an audio channel from a given input to an output. If
+<var>output_file_id</var>.<var>stream_specifier</var> is not set, the audio channel will
+be mapped on all the audio streams.
+</p>
+<p>Using "-1" instead of
+<var>input_file_id</var>.<var>stream_specifier</var>.<var>channel_id</var> will map a muted
+channel.
+</p>
+<p>For example, assuming <var>INPUT</var> is a stereo audio file, you can switch the
+two audio channels with the following command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
+</pre></td></tr></table>
+
+<p>If you want to mute the first channel and keep the second:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
+</pre></td></tr></table>
+
+<p>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
+input and output channel layouts don’t match (for instance two "-map_channel"
+options and "-ac 6").
+</p>
+<p>You can also extract each channel of an input to specific outputs; the following
+command extracts two channels of the <var>INPUT</var> audio stream (file 0, stream 0)
+to the respective <var>OUTPUT_CH0</var> and <var>OUTPUT_CH1</var> outputs:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
+</pre></td></tr></table>
+
+<p>The following example splits the channels of a stereo input into two separate
+streams, which are put into the same output file:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>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 splitting a stereo stream into two single channel mono streams
+is possible.
+</p>
+<p>If you need this feature, a possible workaround is to use the <em>amerge</em>
+filter. For example, if you need to merge a media (here ‘<tt>input.mkv</tt>’) with 2
+mono audio streams into one single stereo channel audio stream (and keep the
+video stream), you can use the following command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-map_metadata[:<var>metadata_spec_out</var>] <var>infile</var>[:<var>metadata_spec_in</var>] (<em>output,per-metadata</em>)</samp>’</dt>
+<dd><p>Set metadata information of the next output file from <var>infile</var>. Note that
+those are file indices (zero-based), not filenames.
+Optional <var>metadata_spec_in/out</var> parameters specify, which metadata to copy.
+A metadata specifier can have the following forms:
+</p><dl compact="compact">
+<dt> ‘<samp><var>g</var></samp>’</dt>
+<dd><p>global metadata, i.e. metadata that applies to the whole file
+</p>
+</dd>
+<dt> ‘<samp><var>s</var>[:<var>stream_spec</var>]</samp>’</dt>
+<dd><p>per-stream metadata. <var>stream_spec</var> is a stream specifier as described
+in the <a href="#Stream-specifiers">Stream specifiers</a> chapter. In an input metadata specifier, the first
+matching stream is copied from. In an output metadata specifier, all matching
+streams are copied to.
+</p>
+</dd>
+<dt> ‘<samp><var>c</var>:<var>chapter_index</var></samp>’</dt>
+<dd><p>per-chapter metadata. <var>chapter_index</var> is the zero-based chapter index.
+</p>
+</dd>
+<dt> ‘<samp><var>p</var>:<var>program_index</var></samp>’</dt>
+<dd><p>per-program metadata. <var>program_index</var> is the zero-based program index.
+</p></dd>
+</dl>
+<p>If metadata specifier is omitted, it defaults to global.
+</p>
+<p>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.
+</p>
+<p>For example to copy metadata from the first stream of the input file to global metadata
+of the output file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
+</pre></td></tr></table>
+
+<p>To do the reverse, i.e. copy global metadata to all audio streams:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
+</pre></td></tr></table>
+<p>Note that simple <code>0</code> would work as well in this example, since global
+metadata is assumed by default.
+</p>
+</dd>
+<dt> ‘<samp>-map_chapters <var>input_file_index</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Copy chapters from input file with index <var>input_file_index</var> 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.
+</p>
+</dd>
+<dt> ‘<samp>-benchmark (<em>global</em>)</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-benchmark_all (<em>global</em>)</samp>’</dt>
+<dd><p>Show benchmarking information during the encode.
+Shows CPU time used in various steps (audio/video encode/decode).
+</p></dd>
+<dt> ‘<samp>-timelimit <var>duration</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Exit after ffmpeg has been running for <var>duration</var> seconds.
+</p></dd>
+<dt> ‘<samp>-dump (<em>global</em>)</samp>’</dt>
+<dd><p>Dump each input packet to stderr.
+</p></dd>
+<dt> ‘<samp>-hex (<em>global</em>)</samp>’</dt>
+<dd><p>When dumping packets, also dump the payload.
+</p></dd>
+<dt> ‘<samp>-re (<em>input</em>)</samp>’</dt>
+<dd><p>Read input at native frame rate. Mainly used to simulate a grab device.
+or live input stream (e.g. when reading from a file). Should not be used
+with actual grab devices or live input streams (where it can cause packet
+loss).
+By default <code>ffmpeg</code> attempts to read the input(s) as fast as possible.
+This option will slow down the reading of the input(s) to the native frame rate
+of the input(s). It is useful for real-time output (e.g. live streaming).
+</p></dd>
+<dt> ‘<samp>-loop_input</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-loop_output <var>number_of_times</var></samp>’</dt>
+<dd><p>Repeatedly loop output for formats that support looping such as animated GIF
+(0 will loop the output infinitely).
+This option is deprecated, use -loop.
+</p></dd>
+<dt> ‘<samp>-vsync <var>parameter</var></samp>’</dt>
+<dd><p>Video sync method.
+For compatibility reasons old values can be specified as numbers.
+Newly added values will have to be specified as strings always.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, passthrough</samp>’</dt>
+<dd><p>Each frame is passed with its timestamp from the demuxer to the muxer.
+</p></dd>
+<dt> ‘<samp>1, cfr</samp>’</dt>
+<dd><p>Frames will be duplicated and dropped to achieve exactly the requested
+constant frame rate.
+</p></dd>
+<dt> ‘<samp>2, vfr</samp>’</dt>
+<dd><p>Frames are passed through with their timestamp or dropped so as to
+prevent 2 frames from having the same timestamp.
+</p></dd>
+<dt> ‘<samp>drop</samp>’</dt>
+<dd><p>As passthrough but destroys all timestamps, making the muxer generate
+fresh timestamps based on frame-rate.
+</p></dd>
+<dt> ‘<samp>-1, auto</samp>’</dt>
+<dd><p>Chooses between 1 and 2 depending on muxer capabilities. This is the
+default method.
+</p></dd>
+</dl>
+
+<p>Note that the timestamps may be further modified by the muxer, after this.
+For example, in the case that the format option ‘<samp>avoid_negative_ts</samp>’
+is enabled.
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>-async <var>samples_per_second</var></samp>’</dt>
+<dd><p>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.
+</p>
+<p>Note that the timestamps may be further modified by the muxer, after this.
+For example, in the case that the format option ‘<samp>avoid_negative_ts</samp>’
+is enabled.
+</p>
+<p>This option has been deprecated. Use the <code>aresample</code> audio filter instead.
+</p>
+</dd>
+<dt> ‘<samp>-copyts</samp>’</dt>
+<dd><p>Do not process input timestamps, but keep their values without trying
+to sanitize them. In particular, do not remove the initial start time
+offset value.
+</p>
+<p>Note that, depending on the ‘<samp>vsync</samp>’ option or on specific muxer
+processing (e.g. in case the format option ‘<samp>avoid_negative_ts</samp>’
+is enabled) the output timestamps may mismatch with the input
+timestamps even when this option is selected.
+</p>
+</dd>
+<dt> ‘<samp>-copytb <var>mode</var></samp>’</dt>
+<dd><p>Specify how to set the encoder timebase when stream copying. <var>mode</var> is an
+integer numeric value, and can assume one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Use the demuxer timebase.
+</p>
+<p>The time base is copied to the output encoder from the corresponding input
+demuxer. This is sometimes required to avoid non monotonically increasing
+timestamps when copying video streams with variable frame rate.
+</p>
+</dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>Use the decoder timebase.
+</p>
+<p>The time base is copied to the output encoder from the corresponding input
+decoder.
+</p>
+</dd>
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>Try to make the choice automatically, in order to generate a sane output.
+</p></dd>
+</dl>
+
+<p>Default value is -1.
+</p>
+</dd>
+<dt> ‘<samp>-shortest (<em>output</em>)</samp>’</dt>
+<dd><p>Finish encoding when the shortest input stream ends.
+</p></dd>
+<dt> ‘<samp>-dts_delta_threshold</samp>’</dt>
+<dd><p>Timestamp discontinuity delta threshold.
+</p></dd>
+<dt> ‘<samp>-muxdelay <var>seconds</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set the maximum demux-decode delay.
+</p></dd>
+<dt> ‘<samp>-muxpreload <var>seconds</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set the initial demux-decode delay.
+</p></dd>
+<dt> ‘<samp>-streamid <var>output-stream-index</var>:<var>new-value</var> (<em>output</em>)</samp>’</dt>
+<dd><p>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.
+</p>
+<p>For example, to set the stream 0 PID to 33 and the stream 1 PID to 36 for
+an output mpegts file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-bsf[:<var>stream_specifier</var>] <var>bitstream_filters</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set bitstream filters for matching streams. <var>bitstream_filters</var> is
+a comma-separated list of bitstream filters. Use the <code>-bsfs</code> option
+to get the list of bitstream filters.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
+</pre></td></tr></table>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-tag[:<var>stream_specifier</var>] <var>codec_tag</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Force a tag/fourcc for matching streams.
+</p>
+</dd>
+<dt> ‘<samp>-timecode <var>hh</var>:<var>mm</var>:<var>ss</var>SEP<var>ff</var></samp>’</dt>
+<dd><p>Specify Timecode for writing. <var>SEP</var> is ’:’ for non drop timecode and ’;’
+(or ’.’) for drop.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
+</pre></td></tr></table>
+
+<p><a name="filter_005fcomplex_005foption"></a>
+</p></dd>
+<dt> ‘<samp>-filter_complex <var>filtergraph</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
+outputs. For simple graphs – those with one input and one output of the same
+type – see the ‘<samp>-filter</samp>’ options. <var>filtergraph</var> is a description of
+the filtergraph, as described in the “Filtergraph syntax” section of the
+ffmpeg-filters manual.
+</p>
+<p>Input link labels must refer to input streams using the
+<code>[file_index:stream_specifier]</code> syntax (i.e. the same as ‘<samp>-map</samp>’
+uses). If <var>stream_specifier</var> matches multiple streams, the first one will be
+used. An unlabeled input will be connected to the first unused input stream of
+the matching type.
+</p>
+<p>Output link labels are referred to with ‘<samp>-map</samp>’. Unlabeled outputs are
+added to the first output file.
+</p>
+<p>Note that with this option it is possible to use only lavfi sources without
+normal input files.
+</p>
+<p>For example, to overlay an image over video
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
+'[out]' out.mkv
+</pre></td></tr></table>
+<p>Here <code>[0:v]</code> refers to the first video stream in the first input file,
+which is linked to the first (main) input of the overlay filter. Similarly the
+first video stream in the second input is linked to the second (overlay) input
+of overlay.
+</p>
+<p>Assuming there is only one video stream in each input file, we can omit input
+labels, so the above is equivalent to
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
+'[out]' out.mkv
+</pre></td></tr></table>
+
+<p>Furthermore we can omit the output label and the single output from the filter
+graph will be added to the output file automatically, so we can simply write
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
+</pre></td></tr></table>
+
+<p>To generate 5 seconds of pure red video using lavfi <code>color</code> source:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-lavfi <var>filtergraph</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
+outputs. Equivalent to ‘<samp>-filter_complex</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>-filter_complex_script <var>filename</var> (<em>global</em>)</samp>’</dt>
+<dd><p>This option is similar to ‘<samp>-filter_complex</samp>’, the only difference is that
+its argument is the name of the file from which a complex filtergraph
+description is to be read.
+</p>
+</dd>
+<dt> ‘<samp>-accurate_seek (<em>input</em>)</samp>’</dt>
+<dd><p>This option enables or disables accurate seeking in input files with the
+‘<samp>-ss</samp>’ option. It is enabled by default, so seeking is accurate when
+transcoding. Use ‘<samp>-noaccurate_seek</samp>’ to disable it, which may be useful
+e.g. when copying some streams and transcoding the others.
+</p>
+</dd>
+<dt> ‘<samp>-override_ffserver (<em>global</em>)</samp>’</dt>
+<dd><p>Overrides the input specifications from <code>ffserver</code>. Using this
+option you can map any input stream to <code>ffserver</code> and control
+many aspects of the encoding from <code>ffmpeg</code>. Without this
+option <code>ffmpeg</code> will transmit to <code>ffserver</code> what is
+requested by <code>ffserver</code>.
+</p>
+<p>The option is intended for cases where features are needed that cannot be
+specified to <code>ffserver</code> but can be to <code>ffmpeg</code>.
+</p>
+</dd>
+</dl>
+
+<p>As a special exception, you can use a bitmap subtitle stream as input: it
+will be converted into a video with the same size as the largest video in
+the file, or 720x576 if no video is present. Note that this is an
+experimental and temporary solution. It will be removed once libavfilter has
+proper support for subtitles.
+</p>
+<p>For example, to hardcode subtitles on top of a DVB-T recording stored in
+MPEG-TS format, delaying the subtitles by 1 second:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.ts -filter_complex \
+ '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
+ -sn -map '#0x2dc' output.mkv
+</pre></td></tr></table>
+<p>(0x2d0, 0x2dc and 0x2ef are the MPEG-TS PIDs of respectively the video,
+audio and subtitles streams; 0:0, 0:3 and 0:7 would have worked too)
+</p>
+<a name="Preset-files-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Preset-files-1">5.12 Preset files</a></h2>
+<p>A preset file contains a sequence of <var>option</var>=<var>value</var> 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 ‘<tt>presets</tt>’ directory in the FFmpeg source tree for examples.
+</p>
+<p>Preset files are specified with the <code>vpre</code>, <code>apre</code>,
+<code>spre</code>, and <code>fpre</code> options. The <code>fpre</code> 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 <code>vpre</code>, <code>apre</code>, and
+<code>spre</code> options, the options specified in a preset file are
+applied to the currently selected codec of the same type as the preset
+option.
+</p>
+<p>The argument passed to the <code>vpre</code>, <code>apre</code>, and <code>spre</code>
+preset options identifies the preset file to use according to the
+following rules:
+</p>
+<p>First ffmpeg searches for a file named <var>arg</var>.ffpreset in the
+directories ‘<tt>$FFMPEG_DATADIR</tt>’ (if set), and ‘<tt>$HOME/.ffmpeg</tt>’, and in
+the datadir defined at configuration time (usually ‘<tt>PREFIX/share/ffmpeg</tt>’)
+or in a ‘<tt>ffpresets</tt>’ folder along the executable on win32,
+in that order. For example, if the argument is <code>libvpx-1080p</code>, it will
+search for the file ‘<tt>libvpx-1080p.ffpreset</tt>’.
+</p>
+<p>If no such file is found, then ffmpeg will search for a file named
+<var>codec_name</var>-<var>arg</var>.ffpreset in the above-mentioned
+directories, where <var>codec_name</var> is the name of the codec to which
+the preset file options will be applied. For example, if you select
+the video codec with <code>-vcodec libvpx</code> and use <code>-vpre 1080p</code>,
+then it will search for the file ‘<tt>libvpx-1080p.ffpreset</tt>’.
+</p>
+<a name="Tips"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Tips">6. Tips</a></h1>
+
+<ul>
+<li>
+For streaming at very low bitrates, use a low frame rate
+and a small GOP size. This is especially true for RealVideo where
+the Linux player does not seem to be very fast, so it can miss
+frames. An example is:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm
+</pre></td></tr></table>
+
+</li><li>
+The parameter ’q’ which is displayed while encoding is the current
+quantizer. The value 1 indicates that a very good quality could
+be achieved. The value 31 indicates the worst quality. If q=31 appears
+too often, it means that the encoder cannot compress enough to meet
+your bitrate. You must either increase the bitrate, decrease the
+frame rate or decrease the frame size.
+
+</li><li>
+If your computer is not fast enough, you can speed up the
+compression at the expense of the compression ratio. You can use
+’-me zero’ to speed up motion estimation, and ’-g 0’ to disable
+motion estimation completely (you have only I-frames, which means it
+is about as good as JPEG compression).
+
+</li><li>
+To have very low audio bitrates, reduce the sampling frequency
+(down to 22050 Hz for MPEG audio, 22050 or 11025 for AC-3).
+
+</li><li>
+To have a constant quality (but a variable bitrate), use the option
+’-qscale n’ when ’n’ is between 1 (excellent quality) and 31 (worst
+quality).
+
+</li></ul>
+
+<a name="Examples-37"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Examples-37">7. Examples</a></h1>
+
+<a name="Preset-files"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Preset-files">7.1 Preset files</a></h2>
+
+<p>A preset file contains a sequence of <var>option=value</var> 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
+‘<tt>presets</tt>’ directory in the FFmpeg source tree for examples.
+</p>
+<p>Preset files are specified with the <code>pre</code> option, this option takes a
+preset name as input. FFmpeg searches for a file named <var>preset_name</var>.avpreset in
+the directories ‘<tt>$AVCONV_DATADIR</tt>’ (if set), and ‘<tt>$HOME/.ffmpeg</tt>’, and in
+the data directory defined at configuration time (usually ‘<tt>$PREFIX/share/ffmpeg</tt>’)
+in that order. For example, if the argument is <code>libx264-max</code>, it will
+search for the file ‘<tt>libx264-max.avpreset</tt>’.
+</p>
+<a name="Video-and-Audio-grabbing"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Video-and-Audio-grabbing">7.2 Video and Audio grabbing</a></h2>
+
+<p>If you specify the input format and device then ffmpeg can grab video
+and audio directly.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>Or with an ALSA audio source (mono input, card id 1) instead of OSS:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>Note that you must activate the right video source and channel before
+launching ffmpeg with any TV viewer such as
+<a href="http://linux.bytesex.org/xawtv/">xawtv</a> by Gerd Knorr. You also
+have to set the audio recording levels correctly with a
+standard mixer.
+</p>
+<a name="X11-grabbing"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-X11-grabbing">7.3 X11 grabbing</a></h2>
+
+<p>Grab the X11 display with ffmpeg via
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>0.0 is display.screen number of your X11 server, same as
+the DISPLAY environment variable.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<a name="Video-and-Audio-file-format-conversion"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Video-and-Audio-file-format-conversion">7.4 Video and Audio file format conversion</a></h2>
+
+<p>Any supported file format and protocol can serve as input to ffmpeg:
+</p>
+<p>Examples:
+</p><ul>
+<li>
+You can use YUV files as input:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>It will use the files:
+</p><table><tr><td> </td><td><pre class="example">/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
+/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
+</pre></td></tr></table>
+
+<p>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 ‘<samp>-s</samp>’ option
+if ffmpeg cannot guess it.
+</p>
+</li><li>
+You can input from a raw YUV420P file:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/test.yuv /tmp/out.avi
+</pre></td></tr></table>
+
+<p>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.
+</p>
+</li><li>
+You can output to a raw YUV420P file:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i mydivx.avi hugefile.yuv
+</pre></td></tr></table>
+
+</li><li>
+You can set several input files and output files:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
+</pre></td></tr></table>
+
+<p>Converts the audio file a.wav and the raw YUV video file a.yuv
+to MPEG file a.mpg.
+</p>
+</li><li>
+You can also do audio and video conversions at the same time:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
+</pre></td></tr></table>
+
+<p>Converts a.wav to MPEG audio at 22050 Hz sample rate.
+</p>
+</li><li>
+You can encode to several formats at the same time and define a
+mapping from input stream to output streams:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
+</pre></td></tr></table>
+
+<p>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.
+</p>
+</li><li>
+You can transcode decrypted VOBs:
+
+<table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>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 <code>--enable-libmp3lame</code> to configure.
+The mapping is particularly useful for DVD transcoding
+to get the desired audio language.
+</p>
+<p>NOTE: To see the supported input formats, use <code>ffmpeg -formats</code>.
+</p>
+</li><li>
+You can extract images from a video, or create a video from many images:
+
+<p>For extracting images from a video:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
+</pre></td></tr></table>
+
+<p>This will extract one video frame per second from the video and will
+output them in files named ‘<tt>foo-001.jpeg</tt>’, ‘<tt>foo-002.jpeg</tt>’,
+etc. Images will be rescaled to fit the new WxH values.
+</p>
+<p>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.
+</p>
+<p>For creating a video from many images:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
+</pre></td></tr></table>
+
+<p>The syntax <code>foo-%03d.jpeg</code> 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.
+</p>
+<p>When importing an image sequence, -i also supports expanding
+shell-like wildcard patterns (globbing) internally, by selecting the
+image2-specific <code>-pattern_type glob</code> option.
+</p>
+<p>For example, for creating a video from filenames matching the glob pattern
+<code>foo-*.jpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -pattern_type glob -i 'foo-*.jpeg' -r 12 -s WxH foo.avi
+</pre></td></tr></table>
+
+</li><li>
+You can put many streams of the same type in the output:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test1.avi -i test2.avi -map 0:3 -map 0:2 -map 0:1 -map 0:0 -c copy test12.nut
+</pre></td></tr></table>
+
+<p>The resulting output file ‘<tt>test12.avi</tt>’ will contain first four streams from
+the input file in reverse order.
+</p>
+</li><li>
+To force CBR video output:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
+</pre></td></tr></table>
+
+</li><li>
+The four options lmin, lmax, mblmin and mblmax use ’lambda’ units,
+but you may use the QP2LAMBDA constant to easily convert from ’q’ units:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="Syntax-2"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Syntax-2">8. Syntax</a></h1>
+
+<p>This section documents the syntax and formats employed by the FFmpeg
+libraries and tools.
+</p>
+<p><a name="quoting_005fand_005fescaping"></a>
+</p><a name="Quoting-and-escaping"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Quoting-and-escaping">8.1 Quoting and escaping</a></h2>
+
+<p>FFmpeg adopts the following quoting and escaping mechanism, unless
+explicitly specified. The following rules are applied:
+</p>
+<ul>
+<li>
+<code>'</code> and <code>\</code> are special characters (respectively used for
+quoting and escaping). In addition to them, there might be other
+special characters depending on the specific syntax where the escaping
+and quoting are employed.
+
+</li><li>
+A special character is escaped by prefixing it with a ’\’.
+
+</li><li>
+All characters enclosed between ” are included literally in the
+parsed string. The quote character <code>'</code> itself cannot be quoted,
+so you may need to close the quote and escape it.
+
+</li><li>
+Leading and trailing whitespaces, unless escaped or quoted, are
+removed from the parsed string.
+</li></ul>
+
+<p>Note that you may need to add a second level of escaping when using
+the command line or a script, which depends on the syntax of the
+adopted shell language.
+</p>
+<p>The function <code>av_get_token</code> defined in
+‘<tt>libavutil/avstring.h</tt>’ can be used to parse a token quoted or
+escaped according to the rules defined above.
+</p>
+<p>The tool ‘<tt>tools/ffescape</tt>’ in the FFmpeg source tree can be used
+to automatically quote or escape a string in a script.
+</p>
+<a name="Examples-68"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-68">8.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Escape the string <code>Crime d'Amour</code> containing the <code>'</code> special
+character:
+<table><tr><td> </td><td><pre class="example">Crime d\'Amour
+</pre></td></tr></table>
+
+</li><li>
+The string above contains a quote, so the <code>'</code> needs to be escaped
+when quoting it:
+<table><tr><td> </td><td><pre class="example">'Crime d'\''Amour'
+</pre></td></tr></table>
+
+</li><li>
+Include leading or trailing whitespaces using quoting:
+<table><tr><td> </td><td><pre class="example">' this string starts and ends with whitespaces '
+</pre></td></tr></table>
+
+</li><li>
+Escaping and quoting can be mixed together:
+<table><tr><td> </td><td><pre class="example">' The string '\'string\'' is a string '
+</pre></td></tr></table>
+
+</li><li>
+To include a literal <code>\</code> you can use either escaping or quoting:
+<table><tr><td> </td><td><pre class="example">'c:\foo' can be written as c:\\foo
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="date-syntax"></a>
+</p><a name="Date"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Date">8.2 Date</a></h2>
+
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
+now
+</pre></td></tr></table>
+
+<p>If the value is "now" it takes the current time.
+</p>
+<p>Time is local time unless 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.
+</p>
+<p><a name="time-duration-syntax"></a>
+</p><a name="Time-duration"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Time-duration">8.3 Time duration</a></h2>
+
+<p>There are two accepted syntaxes for expressing time duration.
+</p>
+<table><tr><td> </td><td><pre class="example">[-][<var>HH</var>:]<var>MM</var>:<var>SS</var>[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>HH</var> expresses the number of hours, <var>MM</var> the number of minutes
+for a maximum of 2 digits, and <var>SS</var> the number of seconds for a
+maximum of 2 digits. The <var>m</var> at the end expresses decimal value for
+<var>SS</var>.
+</p>
+<p><em>or</em>
+</p>
+<table><tr><td> </td><td><pre class="example">[-]<var>S</var>+[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>S</var> expresses the number of seconds, with the optional decimal part
+<var>m</var>.
+</p>
+<p>In both expressions, the optional ‘<samp>-</samp>’ indicates negative duration.
+</p>
+<a name="Examples-52"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-52">8.3.1 Examples</a></h3>
+
+<p>The following examples are all valid time duration:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>55</samp>’</dt>
+<dd><p>55 seconds
+</p>
+</dd>
+<dt> ‘<samp>12:03:45</samp>’</dt>
+<dd><p>12 hours, 03 minutes and 45 seconds
+</p>
+</dd>
+<dt> ‘<samp>23.189</samp>’</dt>
+<dd><p>23.189 seconds
+</p></dd>
+</dl>
+
+<p><a name="video-size-syntax"></a>
+</p><a name="Video-size"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Video-size">8.4 Video size</a></h2>
+<p>Specify the size of the sourced video, it may be a string of the form
+<var>width</var>x<var>height</var>, or the name of a size abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>720x480
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>720x576
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>768x576
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>sqcif</samp>’</dt>
+<dd><p>128x96
+</p></dd>
+<dt> ‘<samp>qcif</samp>’</dt>
+<dd><p>176x144
+</p></dd>
+<dt> ‘<samp>cif</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>4cif</samp>’</dt>
+<dd><p>704x576
+</p></dd>
+<dt> ‘<samp>16cif</samp>’</dt>
+<dd><p>1408x1152
+</p></dd>
+<dt> ‘<samp>qqvga</samp>’</dt>
+<dd><p>160x120
+</p></dd>
+<dt> ‘<samp>qvga</samp>’</dt>
+<dd><p>320x240
+</p></dd>
+<dt> ‘<samp>vga</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>svga</samp>’</dt>
+<dd><p>800x600
+</p></dd>
+<dt> ‘<samp>xga</samp>’</dt>
+<dd><p>1024x768
+</p></dd>
+<dt> ‘<samp>uxga</samp>’</dt>
+<dd><p>1600x1200
+</p></dd>
+<dt> ‘<samp>qxga</samp>’</dt>
+<dd><p>2048x1536
+</p></dd>
+<dt> ‘<samp>sxga</samp>’</dt>
+<dd><p>1280x1024
+</p></dd>
+<dt> ‘<samp>qsxga</samp>’</dt>
+<dd><p>2560x2048
+</p></dd>
+<dt> ‘<samp>hsxga</samp>’</dt>
+<dd><p>5120x4096
+</p></dd>
+<dt> ‘<samp>wvga</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>wxga</samp>’</dt>
+<dd><p>1366x768
+</p></dd>
+<dt> ‘<samp>wsxga</samp>’</dt>
+<dd><p>1600x1024
+</p></dd>
+<dt> ‘<samp>wuxga</samp>’</dt>
+<dd><p>1920x1200
+</p></dd>
+<dt> ‘<samp>woxga</samp>’</dt>
+<dd><p>2560x1600
+</p></dd>
+<dt> ‘<samp>wqsxga</samp>’</dt>
+<dd><p>3200x2048
+</p></dd>
+<dt> ‘<samp>wquxga</samp>’</dt>
+<dd><p>3840x2400
+</p></dd>
+<dt> ‘<samp>whsxga</samp>’</dt>
+<dd><p>6400x4096
+</p></dd>
+<dt> ‘<samp>whuxga</samp>’</dt>
+<dd><p>7680x4800
+</p></dd>
+<dt> ‘<samp>cga</samp>’</dt>
+<dd><p>320x200
+</p></dd>
+<dt> ‘<samp>ega</samp>’</dt>
+<dd><p>640x350
+</p></dd>
+<dt> ‘<samp>hd480</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>hd720</samp>’</dt>
+<dd><p>1280x720
+</p></dd>
+<dt> ‘<samp>hd1080</samp>’</dt>
+<dd><p>1920x1080
+</p></dd>
+<dt> ‘<samp>2k</samp>’</dt>
+<dd><p>2048x1080
+</p></dd>
+<dt> ‘<samp>2kflat</samp>’</dt>
+<dd><p>1998x1080
+</p></dd>
+<dt> ‘<samp>2kscope</samp>’</dt>
+<dd><p>2048x858
+</p></dd>
+<dt> ‘<samp>4k</samp>’</dt>
+<dd><p>4096x2160
+</p></dd>
+<dt> ‘<samp>4kflat</samp>’</dt>
+<dd><p>3996x2160
+</p></dd>
+<dt> ‘<samp>4kscope</samp>’</dt>
+<dd><p>4096x1716
+</p></dd>
+<dt> ‘<samp>nhd</samp>’</dt>
+<dd><p>640x360
+</p></dd>
+<dt> ‘<samp>hqvga</samp>’</dt>
+<dd><p>240x160
+</p></dd>
+<dt> ‘<samp>wqvga</samp>’</dt>
+<dd><p>400x240
+</p></dd>
+<dt> ‘<samp>fwqvga</samp>’</dt>
+<dd><p>432x240
+</p></dd>
+<dt> ‘<samp>hvga</samp>’</dt>
+<dd><p>480x320
+</p></dd>
+<dt> ‘<samp>qhd</samp>’</dt>
+<dd><p>960x540
+</p></dd>
+</dl>
+
+<p><a name="video-rate-syntax"></a>
+</p><a name="Video-rate"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Video-rate">8.5 Video rate</a></h2>
+
+<p>Specify the frame rate of a video, expressed as the number of frames
+generated per second. It has to be a string in the format
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>24/1
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>24000/1001
+</p></dd>
+</dl>
+
+<p><a name="ratio-syntax"></a>
+</p><a name="Ratio"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Ratio">8.6 Ratio</a></h2>
+
+<p>A ratio can be expressed as an expression, or in the form
+<var>numerator</var>:<var>denominator</var>.
+</p>
+<p>Note that a ratio with infinite (1/0) or negative value is
+considered valid, so you should check on the returned value if you
+want to exclude those values.
+</p>
+<p>The undefined value can be expressed using the "0:0" string.
+</p>
+<p><a name="color-syntax"></a>
+</p><a name="Color"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Color">8.7 Color</a></h2>
+
+<p>It can be the name of a color as defined below (case insensitive match) or a
+<code>[0x|#]RRGGBB[AA]</code> sequence, possibly followed by @ and a string
+representing the alpha component.
+</p>
+<p>The alpha component may be a string composed by "0x" followed by an
+hexadecimal number or a decimal number between 0.0 and 1.0, which
+represents the opacity value (‘<samp>0x00</samp>’ or ‘<samp>0.0</samp>’ means completely
+transparent, ‘<samp>0xff</samp>’ or ‘<samp>1.0</samp>’ completely opaque). If the alpha
+component is not specified then ‘<samp>0xff</samp>’ is assumed.
+</p>
+<p>The string ‘<samp>random</samp>’ will result in a random color.
+</p>
+<p>The following names of colors are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>AliceBlue</samp>’</dt>
+<dd><p>0xF0F8FF
+</p></dd>
+<dt> ‘<samp>AntiqueWhite</samp>’</dt>
+<dd><p>0xFAEBD7
+</p></dd>
+<dt> ‘<samp>Aqua</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>Aquamarine</samp>’</dt>
+<dd><p>0x7FFFD4
+</p></dd>
+<dt> ‘<samp>Azure</samp>’</dt>
+<dd><p>0xF0FFFF
+</p></dd>
+<dt> ‘<samp>Beige</samp>’</dt>
+<dd><p>0xF5F5DC
+</p></dd>
+<dt> ‘<samp>Bisque</samp>’</dt>
+<dd><p>0xFFE4C4
+</p></dd>
+<dt> ‘<samp>Black</samp>’</dt>
+<dd><p>0x000000
+</p></dd>
+<dt> ‘<samp>BlanchedAlmond</samp>’</dt>
+<dd><p>0xFFEBCD
+</p></dd>
+<dt> ‘<samp>Blue</samp>’</dt>
+<dd><p>0x0000FF
+</p></dd>
+<dt> ‘<samp>BlueViolet</samp>’</dt>
+<dd><p>0x8A2BE2
+</p></dd>
+<dt> ‘<samp>Brown</samp>’</dt>
+<dd><p>0xA52A2A
+</p></dd>
+<dt> ‘<samp>BurlyWood</samp>’</dt>
+<dd><p>0xDEB887
+</p></dd>
+<dt> ‘<samp>CadetBlue</samp>’</dt>
+<dd><p>0x5F9EA0
+</p></dd>
+<dt> ‘<samp>Chartreuse</samp>’</dt>
+<dd><p>0x7FFF00
+</p></dd>
+<dt> ‘<samp>Chocolate</samp>’</dt>
+<dd><p>0xD2691E
+</p></dd>
+<dt> ‘<samp>Coral</samp>’</dt>
+<dd><p>0xFF7F50
+</p></dd>
+<dt> ‘<samp>CornflowerBlue</samp>’</dt>
+<dd><p>0x6495ED
+</p></dd>
+<dt> ‘<samp>Cornsilk</samp>’</dt>
+<dd><p>0xFFF8DC
+</p></dd>
+<dt> ‘<samp>Crimson</samp>’</dt>
+<dd><p>0xDC143C
+</p></dd>
+<dt> ‘<samp>Cyan</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>DarkBlue</samp>’</dt>
+<dd><p>0x00008B
+</p></dd>
+<dt> ‘<samp>DarkCyan</samp>’</dt>
+<dd><p>0x008B8B
+</p></dd>
+<dt> ‘<samp>DarkGoldenRod</samp>’</dt>
+<dd><p>0xB8860B
+</p></dd>
+<dt> ‘<samp>DarkGray</samp>’</dt>
+<dd><p>0xA9A9A9
+</p></dd>
+<dt> ‘<samp>DarkGreen</samp>’</dt>
+<dd><p>0x006400
+</p></dd>
+<dt> ‘<samp>DarkKhaki</samp>’</dt>
+<dd><p>0xBDB76B
+</p></dd>
+<dt> ‘<samp>DarkMagenta</samp>’</dt>
+<dd><p>0x8B008B
+</p></dd>
+<dt> ‘<samp>DarkOliveGreen</samp>’</dt>
+<dd><p>0x556B2F
+</p></dd>
+<dt> ‘<samp>Darkorange</samp>’</dt>
+<dd><p>0xFF8C00
+</p></dd>
+<dt> ‘<samp>DarkOrchid</samp>’</dt>
+<dd><p>0x9932CC
+</p></dd>
+<dt> ‘<samp>DarkRed</samp>’</dt>
+<dd><p>0x8B0000
+</p></dd>
+<dt> ‘<samp>DarkSalmon</samp>’</dt>
+<dd><p>0xE9967A
+</p></dd>
+<dt> ‘<samp>DarkSeaGreen</samp>’</dt>
+<dd><p>0x8FBC8F
+</p></dd>
+<dt> ‘<samp>DarkSlateBlue</samp>’</dt>
+<dd><p>0x483D8B
+</p></dd>
+<dt> ‘<samp>DarkSlateGray</samp>’</dt>
+<dd><p>0x2F4F4F
+</p></dd>
+<dt> ‘<samp>DarkTurquoise</samp>’</dt>
+<dd><p>0x00CED1
+</p></dd>
+<dt> ‘<samp>DarkViolet</samp>’</dt>
+<dd><p>0x9400D3
+</p></dd>
+<dt> ‘<samp>DeepPink</samp>’</dt>
+<dd><p>0xFF1493
+</p></dd>
+<dt> ‘<samp>DeepSkyBlue</samp>’</dt>
+<dd><p>0x00BFFF
+</p></dd>
+<dt> ‘<samp>DimGray</samp>’</dt>
+<dd><p>0x696969
+</p></dd>
+<dt> ‘<samp>DodgerBlue</samp>’</dt>
+<dd><p>0x1E90FF
+</p></dd>
+<dt> ‘<samp>FireBrick</samp>’</dt>
+<dd><p>0xB22222
+</p></dd>
+<dt> ‘<samp>FloralWhite</samp>’</dt>
+<dd><p>0xFFFAF0
+</p></dd>
+<dt> ‘<samp>ForestGreen</samp>’</dt>
+<dd><p>0x228B22
+</p></dd>
+<dt> ‘<samp>Fuchsia</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Gainsboro</samp>’</dt>
+<dd><p>0xDCDCDC
+</p></dd>
+<dt> ‘<samp>GhostWhite</samp>’</dt>
+<dd><p>0xF8F8FF
+</p></dd>
+<dt> ‘<samp>Gold</samp>’</dt>
+<dd><p>0xFFD700
+</p></dd>
+<dt> ‘<samp>GoldenRod</samp>’</dt>
+<dd><p>0xDAA520
+</p></dd>
+<dt> ‘<samp>Gray</samp>’</dt>
+<dd><p>0x808080
+</p></dd>
+<dt> ‘<samp>Green</samp>’</dt>
+<dd><p>0x008000
+</p></dd>
+<dt> ‘<samp>GreenYellow</samp>’</dt>
+<dd><p>0xADFF2F
+</p></dd>
+<dt> ‘<samp>HoneyDew</samp>’</dt>
+<dd><p>0xF0FFF0
+</p></dd>
+<dt> ‘<samp>HotPink</samp>’</dt>
+<dd><p>0xFF69B4
+</p></dd>
+<dt> ‘<samp>IndianRed</samp>’</dt>
+<dd><p>0xCD5C5C
+</p></dd>
+<dt> ‘<samp>Indigo</samp>’</dt>
+<dd><p>0x4B0082
+</p></dd>
+<dt> ‘<samp>Ivory</samp>’</dt>
+<dd><p>0xFFFFF0
+</p></dd>
+<dt> ‘<samp>Khaki</samp>’</dt>
+<dd><p>0xF0E68C
+</p></dd>
+<dt> ‘<samp>Lavender</samp>’</dt>
+<dd><p>0xE6E6FA
+</p></dd>
+<dt> ‘<samp>LavenderBlush</samp>’</dt>
+<dd><p>0xFFF0F5
+</p></dd>
+<dt> ‘<samp>LawnGreen</samp>’</dt>
+<dd><p>0x7CFC00
+</p></dd>
+<dt> ‘<samp>LemonChiffon</samp>’</dt>
+<dd><p>0xFFFACD
+</p></dd>
+<dt> ‘<samp>LightBlue</samp>’</dt>
+<dd><p>0xADD8E6
+</p></dd>
+<dt> ‘<samp>LightCoral</samp>’</dt>
+<dd><p>0xF08080
+</p></dd>
+<dt> ‘<samp>LightCyan</samp>’</dt>
+<dd><p>0xE0FFFF
+</p></dd>
+<dt> ‘<samp>LightGoldenRodYellow</samp>’</dt>
+<dd><p>0xFAFAD2
+</p></dd>
+<dt> ‘<samp>LightGreen</samp>’</dt>
+<dd><p>0x90EE90
+</p></dd>
+<dt> ‘<samp>LightGrey</samp>’</dt>
+<dd><p>0xD3D3D3
+</p></dd>
+<dt> ‘<samp>LightPink</samp>’</dt>
+<dd><p>0xFFB6C1
+</p></dd>
+<dt> ‘<samp>LightSalmon</samp>’</dt>
+<dd><p>0xFFA07A
+</p></dd>
+<dt> ‘<samp>LightSeaGreen</samp>’</dt>
+<dd><p>0x20B2AA
+</p></dd>
+<dt> ‘<samp>LightSkyBlue</samp>’</dt>
+<dd><p>0x87CEFA
+</p></dd>
+<dt> ‘<samp>LightSlateGray</samp>’</dt>
+<dd><p>0x778899
+</p></dd>
+<dt> ‘<samp>LightSteelBlue</samp>’</dt>
+<dd><p>0xB0C4DE
+</p></dd>
+<dt> ‘<samp>LightYellow</samp>’</dt>
+<dd><p>0xFFFFE0
+</p></dd>
+<dt> ‘<samp>Lime</samp>’</dt>
+<dd><p>0x00FF00
+</p></dd>
+<dt> ‘<samp>LimeGreen</samp>’</dt>
+<dd><p>0x32CD32
+</p></dd>
+<dt> ‘<samp>Linen</samp>’</dt>
+<dd><p>0xFAF0E6
+</p></dd>
+<dt> ‘<samp>Magenta</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Maroon</samp>’</dt>
+<dd><p>0x800000
+</p></dd>
+<dt> ‘<samp>MediumAquaMarine</samp>’</dt>
+<dd><p>0x66CDAA
+</p></dd>
+<dt> ‘<samp>MediumBlue</samp>’</dt>
+<dd><p>0x0000CD
+</p></dd>
+<dt> ‘<samp>MediumOrchid</samp>’</dt>
+<dd><p>0xBA55D3
+</p></dd>
+<dt> ‘<samp>MediumPurple</samp>’</dt>
+<dd><p>0x9370D8
+</p></dd>
+<dt> ‘<samp>MediumSeaGreen</samp>’</dt>
+<dd><p>0x3CB371
+</p></dd>
+<dt> ‘<samp>MediumSlateBlue</samp>’</dt>
+<dd><p>0x7B68EE
+</p></dd>
+<dt> ‘<samp>MediumSpringGreen</samp>’</dt>
+<dd><p>0x00FA9A
+</p></dd>
+<dt> ‘<samp>MediumTurquoise</samp>’</dt>
+<dd><p>0x48D1CC
+</p></dd>
+<dt> ‘<samp>MediumVioletRed</samp>’</dt>
+<dd><p>0xC71585
+</p></dd>
+<dt> ‘<samp>MidnightBlue</samp>’</dt>
+<dd><p>0x191970
+</p></dd>
+<dt> ‘<samp>MintCream</samp>’</dt>
+<dd><p>0xF5FFFA
+</p></dd>
+<dt> ‘<samp>MistyRose</samp>’</dt>
+<dd><p>0xFFE4E1
+</p></dd>
+<dt> ‘<samp>Moccasin</samp>’</dt>
+<dd><p>0xFFE4B5
+</p></dd>
+<dt> ‘<samp>NavajoWhite</samp>’</dt>
+<dd><p>0xFFDEAD
+</p></dd>
+<dt> ‘<samp>Navy</samp>’</dt>
+<dd><p>0x000080
+</p></dd>
+<dt> ‘<samp>OldLace</samp>’</dt>
+<dd><p>0xFDF5E6
+</p></dd>
+<dt> ‘<samp>Olive</samp>’</dt>
+<dd><p>0x808000
+</p></dd>
+<dt> ‘<samp>OliveDrab</samp>’</dt>
+<dd><p>0x6B8E23
+</p></dd>
+<dt> ‘<samp>Orange</samp>’</dt>
+<dd><p>0xFFA500
+</p></dd>
+<dt> ‘<samp>OrangeRed</samp>’</dt>
+<dd><p>0xFF4500
+</p></dd>
+<dt> ‘<samp>Orchid</samp>’</dt>
+<dd><p>0xDA70D6
+</p></dd>
+<dt> ‘<samp>PaleGoldenRod</samp>’</dt>
+<dd><p>0xEEE8AA
+</p></dd>
+<dt> ‘<samp>PaleGreen</samp>’</dt>
+<dd><p>0x98FB98
+</p></dd>
+<dt> ‘<samp>PaleTurquoise</samp>’</dt>
+<dd><p>0xAFEEEE
+</p></dd>
+<dt> ‘<samp>PaleVioletRed</samp>’</dt>
+<dd><p>0xD87093
+</p></dd>
+<dt> ‘<samp>PapayaWhip</samp>’</dt>
+<dd><p>0xFFEFD5
+</p></dd>
+<dt> ‘<samp>PeachPuff</samp>’</dt>
+<dd><p>0xFFDAB9
+</p></dd>
+<dt> ‘<samp>Peru</samp>’</dt>
+<dd><p>0xCD853F
+</p></dd>
+<dt> ‘<samp>Pink</samp>’</dt>
+<dd><p>0xFFC0CB
+</p></dd>
+<dt> ‘<samp>Plum</samp>’</dt>
+<dd><p>0xDDA0DD
+</p></dd>
+<dt> ‘<samp>PowderBlue</samp>’</dt>
+<dd><p>0xB0E0E6
+</p></dd>
+<dt> ‘<samp>Purple</samp>’</dt>
+<dd><p>0x800080
+</p></dd>
+<dt> ‘<samp>Red</samp>’</dt>
+<dd><p>0xFF0000
+</p></dd>
+<dt> ‘<samp>RosyBrown</samp>’</dt>
+<dd><p>0xBC8F8F
+</p></dd>
+<dt> ‘<samp>RoyalBlue</samp>’</dt>
+<dd><p>0x4169E1
+</p></dd>
+<dt> ‘<samp>SaddleBrown</samp>’</dt>
+<dd><p>0x8B4513
+</p></dd>
+<dt> ‘<samp>Salmon</samp>’</dt>
+<dd><p>0xFA8072
+</p></dd>
+<dt> ‘<samp>SandyBrown</samp>’</dt>
+<dd><p>0xF4A460
+</p></dd>
+<dt> ‘<samp>SeaGreen</samp>’</dt>
+<dd><p>0x2E8B57
+</p></dd>
+<dt> ‘<samp>SeaShell</samp>’</dt>
+<dd><p>0xFFF5EE
+</p></dd>
+<dt> ‘<samp>Sienna</samp>’</dt>
+<dd><p>0xA0522D
+</p></dd>
+<dt> ‘<samp>Silver</samp>’</dt>
+<dd><p>0xC0C0C0
+</p></dd>
+<dt> ‘<samp>SkyBlue</samp>’</dt>
+<dd><p>0x87CEEB
+</p></dd>
+<dt> ‘<samp>SlateBlue</samp>’</dt>
+<dd><p>0x6A5ACD
+</p></dd>
+<dt> ‘<samp>SlateGray</samp>’</dt>
+<dd><p>0x708090
+</p></dd>
+<dt> ‘<samp>Snow</samp>’</dt>
+<dd><p>0xFFFAFA
+</p></dd>
+<dt> ‘<samp>SpringGreen</samp>’</dt>
+<dd><p>0x00FF7F
+</p></dd>
+<dt> ‘<samp>SteelBlue</samp>’</dt>
+<dd><p>0x4682B4
+</p></dd>
+<dt> ‘<samp>Tan</samp>’</dt>
+<dd><p>0xD2B48C
+</p></dd>
+<dt> ‘<samp>Teal</samp>’</dt>
+<dd><p>0x008080
+</p></dd>
+<dt> ‘<samp>Thistle</samp>’</dt>
+<dd><p>0xD8BFD8
+</p></dd>
+<dt> ‘<samp>Tomato</samp>’</dt>
+<dd><p>0xFF6347
+</p></dd>
+<dt> ‘<samp>Turquoise</samp>’</dt>
+<dd><p>0x40E0D0
+</p></dd>
+<dt> ‘<samp>Violet</samp>’</dt>
+<dd><p>0xEE82EE
+</p></dd>
+<dt> ‘<samp>Wheat</samp>’</dt>
+<dd><p>0xF5DEB3
+</p></dd>
+<dt> ‘<samp>White</samp>’</dt>
+<dd><p>0xFFFFFF
+</p></dd>
+<dt> ‘<samp>WhiteSmoke</samp>’</dt>
+<dd><p>0xF5F5F5
+</p></dd>
+<dt> ‘<samp>Yellow</samp>’</dt>
+<dd><p>0xFFFF00
+</p></dd>
+<dt> ‘<samp>YellowGreen</samp>’</dt>
+<dd><p>0x9ACD32
+</p></dd>
+</dl>
+
+<p><a name="channel-layout-syntax"></a>
+</p><a name="Channel-Layout"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Channel-Layout">8.8 Channel Layout</a></h2>
+
+<p>A channel layout specifies the spatial disposition of the channels in
+a multi-channel audio stream. To specify a channel layout, FFmpeg
+makes use of a special syntax.
+</p>
+<p>Individual channels are identified by an id, as given by the table
+below:
+</p><dl compact="compact">
+<dt> ‘<samp>FL</samp>’</dt>
+<dd><p>front left
+</p></dd>
+<dt> ‘<samp>FR</samp>’</dt>
+<dd><p>front right
+</p></dd>
+<dt> ‘<samp>FC</samp>’</dt>
+<dd><p>front center
+</p></dd>
+<dt> ‘<samp>LFE</samp>’</dt>
+<dd><p>low frequency
+</p></dd>
+<dt> ‘<samp>BL</samp>’</dt>
+<dd><p>back left
+</p></dd>
+<dt> ‘<samp>BR</samp>’</dt>
+<dd><p>back right
+</p></dd>
+<dt> ‘<samp>FLC</samp>’</dt>
+<dd><p>front left-of-center
+</p></dd>
+<dt> ‘<samp>FRC</samp>’</dt>
+<dd><p>front right-of-center
+</p></dd>
+<dt> ‘<samp>BC</samp>’</dt>
+<dd><p>back center
+</p></dd>
+<dt> ‘<samp>SL</samp>’</dt>
+<dd><p>side left
+</p></dd>
+<dt> ‘<samp>SR</samp>’</dt>
+<dd><p>side right
+</p></dd>
+<dt> ‘<samp>TC</samp>’</dt>
+<dd><p>top center
+</p></dd>
+<dt> ‘<samp>TFL</samp>’</dt>
+<dd><p>top front left
+</p></dd>
+<dt> ‘<samp>TFC</samp>’</dt>
+<dd><p>top front center
+</p></dd>
+<dt> ‘<samp>TFR</samp>’</dt>
+<dd><p>top front right
+</p></dd>
+<dt> ‘<samp>TBL</samp>’</dt>
+<dd><p>top back left
+</p></dd>
+<dt> ‘<samp>TBC</samp>’</dt>
+<dd><p>top back center
+</p></dd>
+<dt> ‘<samp>TBR</samp>’</dt>
+<dd><p>top back right
+</p></dd>
+<dt> ‘<samp>DL</samp>’</dt>
+<dd><p>downmix left
+</p></dd>
+<dt> ‘<samp>DR</samp>’</dt>
+<dd><p>downmix right
+</p></dd>
+<dt> ‘<samp>WL</samp>’</dt>
+<dd><p>wide left
+</p></dd>
+<dt> ‘<samp>WR</samp>’</dt>
+<dd><p>wide right
+</p></dd>
+<dt> ‘<samp>SDL</samp>’</dt>
+<dd><p>surround direct left
+</p></dd>
+<dt> ‘<samp>SDR</samp>’</dt>
+<dd><p>surround direct right
+</p></dd>
+<dt> ‘<samp>LFE2</samp>’</dt>
+<dd><p>low frequency 2
+</p></dd>
+</dl>
+
+<p>Standard channel layout compositions can be specified by using the
+following identifiers:
+</p><dl compact="compact">
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>FC
+</p></dd>
+<dt> ‘<samp>stereo</samp>’</dt>
+<dd><p>FL+FR
+</p></dd>
+<dt> ‘<samp>2.1</samp>’</dt>
+<dd><p>FL+FR+LFE
+</p></dd>
+<dt> ‘<samp>3.0</samp>’</dt>
+<dd><p>FL+FR+FC
+</p></dd>
+<dt> ‘<samp>3.0(back)</samp>’</dt>
+<dd><p>FL+FR+BC
+</p></dd>
+<dt> ‘<samp>4.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC
+</p></dd>
+<dt> ‘<samp>quad</samp>’</dt>
+<dd><p>FL+FR+BL+BR
+</p></dd>
+<dt> ‘<samp>quad(side)</samp>’</dt>
+<dd><p>FL+FR+SL+SR
+</p></dd>
+<dt> ‘<samp>3.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE
+</p></dd>
+<dt> ‘<samp>5.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR
+</p></dd>
+<dt> ‘<samp>5.0(side)</samp>’</dt>
+<dd><p>FL+FR+FC+SL+SR
+</p></dd>
+<dt> ‘<samp>4.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC
+</p></dd>
+<dt> ‘<samp>5.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR
+</p></dd>
+<dt> ‘<samp>5.1(side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0(front)</samp>’</dt>
+<dd><p>FL+FR+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>hexagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1(front)</samp>’</dt>
+<dd><p>FL+FR+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0(front)</samp>’</dt>
+<dd><p>FL+FR+FC+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1(wide)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC
+</p></dd>
+<dt> ‘<samp>7.1(wide-side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>octagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>downmix</samp>’</dt>
+<dd><p>DL+DR
+</p></dd>
+</dl>
+
+<p>A custom channel layout can be specified as a sequence of terms, separated by
+’+’ or ’|’. Each term can be:
+</p><ul>
+<li>
+the name of a standard channel layout (e.g. ‘<samp>mono</samp>’,
+‘<samp>stereo</samp>’, ‘<samp>4.0</samp>’, ‘<samp>quad</samp>’, ‘<samp>5.0</samp>’, etc.)
+
+</li><li>
+the name of a single channel (e.g. ‘<samp>FL</samp>’, ‘<samp>FR</samp>’, ‘<samp>FC</samp>’, ‘<samp>LFE</samp>’, etc.)
+
+</li><li>
+a number of channels, in decimal, optionally followed by ’c’, yielding
+the default channel layout for that number of channels (see the
+function <code>av_get_default_channel_layout</code>)
+
+</li><li>
+a channel layout mask, in hexadecimal starting with "0x" (see the
+<code>AV_CH_*</code> macros in ‘<tt>libavutil/channel_layout.h</tt>’.
+</li></ul>
+
+<p>Starting from libavutil version 53 the trailing character "c" to
+specify a number of channels will be required, while a channel layout
+mask could also be specified as a decimal number (if and only if not
+followed by "c").
+</p>
+<p>See also the function <code>av_get_channel_layout</code> defined in
+‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<a name="Expression-Evaluation"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Expression-Evaluation">9. Expression Evaluation</a></h1>
+
+<p>When evaluating an arithmetic expression, FFmpeg uses an internal
+formula evaluator, implemented through the ‘<tt>libavutil/eval.h</tt>’
+interface.
+</p>
+<p>An expression may contain unary, binary operators, constants, and
+functions.
+</p>
+<p>Two expressions <var>expr1</var> and <var>expr2</var> can be combined to form
+another expression "<var>expr1</var>;<var>expr2</var>".
+<var>expr1</var> and <var>expr2</var> are evaluated in turn, and the new
+expression evaluates to the value of <var>expr2</var>.
+</p>
+<p>The following binary operators are available: <code>+</code>, <code>-</code>,
+<code>*</code>, <code>/</code>, <code>^</code>.
+</p>
+<p>The following unary operators are available: <code>+</code>, <code>-</code>.
+</p>
+<p>The following functions are available:
+</p><dl compact="compact">
+<dt> ‘<samp>abs(x)</samp>’</dt>
+<dd><p>Compute absolute value of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>acos(x)</samp>’</dt>
+<dd><p>Compute arccosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>asin(x)</samp>’</dt>
+<dd><p>Compute arcsine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>atan(x)</samp>’</dt>
+<dd><p>Compute arctangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>between(x, min, max)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>min</var> and lesser than or
+equal to <var>max</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>bitand(x, y)</samp>’</dt>
+<dt> ‘<samp>bitor(x, y)</samp>’</dt>
+<dd><p>Compute bitwise and/or operation on <var>x</var> and <var>y</var>.
+</p>
+<p>The results of the evaluation of <var>x</var> and <var>y</var> are converted to
+integers before executing the bitwise operation.
+</p>
+<p>Note that both the conversion to integer and the conversion back to
+floating point can lose precision. Beware of unexpected results for
+large numbers (usually 2^53 and larger).
+</p>
+</dd>
+<dt> ‘<samp>ceil(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> upwards to the nearest
+integer. For example, "ceil(1.5)" is "2.0".
+</p>
+</dd>
+<dt> ‘<samp>cos(x)</samp>’</dt>
+<dd><p>Compute cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>cosh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>eq(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> and <var>y</var> are equivalent, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>exp(x)</samp>’</dt>
+<dd><p>Compute exponential of <var>x</var> (with base <code>e</code>, the Euler’s number).
+</p>
+</dd>
+<dt> ‘<samp>floor(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> downwards to the nearest
+integer. For example, "floor(-1.5)" is "-2.0".
+</p>
+</dd>
+<dt> ‘<samp>gauss(x)</samp>’</dt>
+<dd><p>Compute Gauss function of <var>x</var>, corresponding to
+<code>exp(-x*x/2) / sqrt(2*PI)</code>.
+</p>
+</dd>
+<dt> ‘<samp>gcd(x, y)</samp>’</dt>
+<dd><p>Return the greatest common divisor of <var>x</var> and <var>y</var>. If both <var>x</var> and
+<var>y</var> are 0 or either or both are less than zero then behavior is undefined.
+</p>
+</dd>
+<dt> ‘<samp>gt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>gte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>hypot(x, y)</samp>’</dt>
+<dd><p>This function is similar to the C function with the same name; it returns
+"sqrt(<var>x</var>*<var>x</var> + <var>y</var>*<var>y</var>)", the length of the hypotenuse of a
+right triangle with sides of length <var>x</var> and <var>y</var>, or the distance of the
+point (<var>x</var>, <var>y</var>) from the origin.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the result of
+the evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the result of the
+evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>isinf(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is +/-INFINITY, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>isnan(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is NAN, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ld(var)</samp>’</dt>
+<dd><p>Allow to load the value of the internal variable with number
+<var>var</var>, which was previously stored with st(<var>var</var>, <var>expr</var>).
+The function returns the loaded value.
+</p>
+</dd>
+<dt> ‘<samp>log(x)</samp>’</dt>
+<dd><p>Compute natural logarithm of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>lt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>lte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>max(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>min(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>mod(x, y)</samp>’</dt>
+<dd><p>Compute the remainder of division of <var>x</var> by <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>not(expr)</samp>’</dt>
+<dd><p>Return 1.0 if <var>expr</var> is zero, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>pow(x, y)</samp>’</dt>
+<dd><p>Compute the power of <var>x</var> elevated <var>y</var>, it is equivalent to
+"(<var>x</var>)^(<var>y</var>)".
+</p>
+</dd>
+<dt> ‘<samp>print(t)</samp>’</dt>
+<dt> ‘<samp>print(t, l)</samp>’</dt>
+<dd><p>Print the value of expression <var>t</var> with loglevel <var>l</var>. If
+<var>l</var> is not specified then a default log level is used.
+Returns the value of the expression printed.
+</p>
+<p>Prints t with loglevel l
+</p>
+</dd>
+<dt> ‘<samp>random(x)</samp>’</dt>
+<dd><p>Return a pseudo random value between 0.0 and 1.0. <var>x</var> is the index of the
+internal variable which will be used to save the seed/state.
+</p>
+</dd>
+<dt> ‘<samp>root(expr, max)</samp>’</dt>
+<dd><p>Find an input value for which the function represented by <var>expr</var>
+with argument <var>ld(0)</var> is 0 in the interval 0..<var>max</var>.
+</p>
+<p>The expression in <var>expr</var> must denote a continuous function or the
+result is undefined.
+</p>
+<p><var>ld(0)</var> is used to represent the function input value, which means
+that the given expression will be evaluated multiple times with
+various input values that the expression can access through
+<code>ld(0)</code>. When the expression evaluates to 0 then the
+corresponding input value will be returned.
+</p>
+</dd>
+<dt> ‘<samp>sin(x)</samp>’</dt>
+<dd><p>Compute sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sinh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sqrt(expr)</samp>’</dt>
+<dd><p>Compute the square root of <var>expr</var>. This is equivalent to
+"(<var>expr</var>)^.5".
+</p>
+</dd>
+<dt> ‘<samp>squish(x)</samp>’</dt>
+<dd><p>Compute expression <code>1/(1 + exp(4*x))</code>.
+</p>
+</dd>
+<dt> ‘<samp>st(var, expr)</samp>’</dt>
+<dd><p>Allow to store the value of the expression <var>expr</var> in an internal
+variable. <var>var</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.
+</p>
+</dd>
+<dt> ‘<samp>tan(x)</samp>’</dt>
+<dd><p>Compute tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>tanh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>taylor(expr, x)</samp>’</dt>
+<dt> ‘<samp>taylor(expr, x, id)</samp>’</dt>
+<dd><p>Evaluate a Taylor series at <var>x</var>, given an expression representing
+the <code>ld(id)</code>-th derivative of a function at 0.
+</p>
+<p>When the series does not converge the result is undefined.
+</p>
+<p><var>ld(id)</var> is used to represent the derivative order in <var>expr</var>,
+which means that the given expression will be evaluated multiple times
+with various input values that the expression can access through
+<code>ld(id)</code>. If <var>id</var> is not specified then 0 is assumed.
+</p>
+<p>Note, when you have the derivatives at y instead of 0,
+<code>taylor(expr, x-y)</code> can be used.
+</p>
+</dd>
+<dt> ‘<samp>time(0)</samp>’</dt>
+<dd><p>Return the current (wallclock) time in seconds.
+</p>
+</dd>
+<dt> ‘<samp>trunc(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> towards zero to the nearest
+integer. For example, "trunc(-1.5)" is "-1.0".
+</p>
+</dd>
+<dt> ‘<samp>while(cond, expr)</samp>’</dt>
+<dd><p>Evaluate expression <var>expr</var> while the expression <var>cond</var> is
+non-zero, and returns the value of the last <var>expr</var> evaluation, or
+NAN if <var>cond</var> was always false.
+</p></dd>
+</dl>
+
+<p>The following constants are available:
+</p><dl compact="compact">
+<dt> ‘<samp>PI</samp>’</dt>
+<dd><p>area of the unit disc, approximately 3.14
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>exp(1) (Euler’s number), approximately 2.718
+</p></dd>
+<dt> ‘<samp>PHI</samp>’</dt>
+<dd><p>golden ratio (1+sqrt(5))/2, approximately 1.618
+</p></dd>
+</dl>
+
+<p>Assuming that an expression is considered "true" if it has a non-zero
+value, note that:
+</p>
+<p><code>*</code> works like AND
+</p>
+<p><code>+</code> works like OR
+</p>
+<p>For example the construct:
+</p><table><tr><td> </td><td><pre class="example">if (A AND B) then C
+</pre></td></tr></table>
+<p>is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">if(A*B, C)
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<p>The evaluator also recognizes the International System unit prefixes.
+If ’i’ is appended after the prefix, binary prefixes are used, which
+are based on powers of 1024 instead of powers of 1000.
+The ’B’ postfix multiplies the value by 8, and can be appended after a
+unit prefix or used alone. This allows using for example ’KB’, ’MiB’,
+’G’ and ’B’ as number postfix.
+</p>
+<p>The list of available International System prefixes follows, with
+indication of the corresponding powers of 10 and of 2.
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>10^-24 / 2^-80
+</p></dd>
+<dt> ‘<samp>z</samp>’</dt>
+<dd><p>10^-21 / 2^-70
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>10^-18 / 2^-60
+</p></dd>
+<dt> ‘<samp>f</samp>’</dt>
+<dd><p>10^-15 / 2^-50
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>10^-12 / 2^-40
+</p></dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>10^-9 / 2^-30
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>10^-6 / 2^-20
+</p></dd>
+<dt> ‘<samp>m</samp>’</dt>
+<dd><p>10^-3 / 2^-10
+</p></dd>
+<dt> ‘<samp>c</samp>’</dt>
+<dd><p>10^-2
+</p></dd>
+<dt> ‘<samp>d</samp>’</dt>
+<dd><p>10^-1
+</p></dd>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>10^2
+</p></dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>K</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>M</samp>’</dt>
+<dd><p>10^6 / 2^20
+</p></dd>
+<dt> ‘<samp>G</samp>’</dt>
+<dd><p>10^9 / 2^30
+</p></dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>10^12 / 2^40
+</p></dd>
+<dt> ‘<samp>P</samp>’</dt>
+<dd><p>10^15 / 2^40
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>10^18 / 2^50
+</p></dd>
+<dt> ‘<samp>Z</samp>’</dt>
+<dd><p>10^21 / 2^60
+</p></dd>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>10^24 / 2^70
+</p></dd>
+</dl>
+
+
+<a name="OpenCL-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-OpenCL-Options">10. OpenCL Options</a></h1>
+
+<p>When FFmpeg is configured with <code>--enable-opencl</code>, it is possible
+to set the options for the global OpenCL context.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>build_options</samp>’</dt>
+<dd><p>Set build options used to compile the registered kernels.
+</p>
+<p>See reference "OpenCL Specification Version: 1.2 chapter 5.6.4".
+</p>
+</dd>
+<dt> ‘<samp>platform_idx</samp>’</dt>
+<dd><p>Select the index of the platform to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list
+which can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+<dt> ‘<samp>device_idx</samp>’</dt>
+<dd><p>Select the index of the device used to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list which
+can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+</dl>
+
+<p><a name="codec_002doptions"></a>
+</p><a name="Codec-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Codec-Options">11. Codec Options</a></h1>
+
+<p>libavcodec provides some generic global options, which can be set on
+all the encoders and decoders. In addition each codec may support
+so-called private options, which are specific for a given codec.
+</p>
+<p>Sometimes, a global option may only affect a specific kind of codec,
+and may be unsensical or ignored by another, so you need to be aware
+of the meaning of the specified options. Also some options are
+meant only for decoding or encoding.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVCodecContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follow:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Default value is 200K.
+</p>
+</dd>
+<dt> ‘<samp>ab <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio bitrate (in bits/s). Default value is 128K.
+</p>
+</dd>
+<dt> ‘<samp>bt <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video bitrate tolerance (in bits/s). 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.
+</p>
+</dd>
+<dt> ‘<samp>flags <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Set generic flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>mv4</samp>’</dt>
+<dd><p>Use four motion vector by macroblock (mpeg4).
+</p></dd>
+<dt> ‘<samp>qpel</samp>’</dt>
+<dd><p>Use 1/4 pel motion compensation.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Use loop filter.
+</p></dd>
+<dt> ‘<samp>qscale</samp>’</dt>
+<dd><p>Use fixed qscale.
+</p></dd>
+<dt> ‘<samp>gmc</samp>’</dt>
+<dd><p>Use gmc.
+</p></dd>
+<dt> ‘<samp>mv0</samp>’</dt>
+<dd><p>Always try a mb with mv=<0,0>.
+</p></dd>
+<dt> ‘<samp>input_preserved</samp>’</dt>
+<dt> ‘<samp>pass1</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in first pass mode.
+</p></dd>
+<dt> ‘<samp>pass2</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in second pass mode.
+</p></dd>
+<dt> ‘<samp>gray</samp>’</dt>
+<dd><p>Only decode/encode grayscale.
+</p></dd>
+<dt> ‘<samp>emu_edge</samp>’</dt>
+<dd><p>Do not draw edges.
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>Set error[?] variables during encoding.
+</p></dd>
+<dt> ‘<samp>truncated</samp>’</dt>
+<dt> ‘<samp>naq</samp>’</dt>
+<dd><p>Normalize adaptive quantization.
+</p></dd>
+<dt> ‘<samp>ildct</samp>’</dt>
+<dd><p>Use interlaced DCT.
+</p></dd>
+<dt> ‘<samp>low_delay</samp>’</dt>
+<dd><p>Force low delay.
+</p></dd>
+<dt> ‘<samp>global_header</samp>’</dt>
+<dd><p>Place global headers in extradata instead of every keyframe.
+</p></dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Use only bitexact stuff (except (I)DCT).
+</p></dd>
+<dt> ‘<samp>aic</samp>’</dt>
+<dd><p>Apply H263 advanced intra coding / mpeg4 ac prediction.
+</p></dd>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>qprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>ilme</samp>’</dt>
+<dd><p>Apply interlaced motion estimation.
+</p></dd>
+<dt> ‘<samp>cgop</samp>’</dt>
+<dd><p>Use closed gop.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_method <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero motion estimation (fastest)
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>full motion estimation (slowest)
+</p></dd>
+<dt> ‘<samp>epzs</samp>’</dt>
+<dd><p>EPZS motion estimation (default)
+</p></dd>
+<dt> ‘<samp>esa</samp>’</dt>
+<dd><p>esa motion estimation (alias for full)
+</p></dd>
+<dt> ‘<samp>tesa</samp>’</dt>
+<dd><p>tesa motion estimation
+</p></dd>
+<dt> ‘<samp>dia</samp>’</dt>
+<dd><p>dia motion estimation (alias for epzs)
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>log motion estimation
+</p></dd>
+<dt> ‘<samp>phods</samp>’</dt>
+<dd><p>phods motion estimation
+</p></dd>
+<dt> ‘<samp>x1</samp>’</dt>
+<dd><p>X1 motion estimation
+</p></dd>
+<dt> ‘<samp>hex</samp>’</dt>
+<dd><p>hex motion estimation
+</p></dd>
+<dt> ‘<samp>umh</samp>’</dt>
+<dd><p>umh motion estimation
+</p></dd>
+<dt> ‘<samp>iter</samp>’</dt>
+<dd><p>iter motion estimation
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>extradata_size <var>integer</var></samp>’</dt>
+<dd><p>Set extradata size.
+</p>
+</dd>
+<dt> ‘<samp>time_base <var>rational number</var></samp>’</dt>
+<dd><p>Set codec time base.
+</p>
+<p>It is the fundamental unit of time (in seconds) in terms of which
+frame timestamps are represented. For fixed-fps content, timebase
+should be <code>1 / frame_rate</code> and timestamp increments should be
+identically 1.
+</p>
+</dd>
+<dt> ‘<samp>g <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set the group of picture size. Default value is 12.
+</p>
+</dd>
+<dt> ‘<samp>ar <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>ac <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>cutoff <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set cutoff bandwidth.
+</p>
+</dd>
+<dt> ‘<samp>frame_size <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio frame size.
+</p>
+<p>Each submitted frame except the last must contain exactly frame_size
+samples per channel. May be 0 when the codec has
+CODEC_CAP_VARIABLE_FRAME_SIZE set, in that case the frame size is not
+restricted. It is set by some decoders to indicate constant frame
+size.
+</p>
+</dd>
+<dt> ‘<samp>frame_number <var>integer</var></samp>’</dt>
+<dd><p>Set the frame number.
+</p>
+</dd>
+<dt> ‘<samp>delay <var>integer</var></samp>’</dt>
+<dt> ‘<samp>qcomp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale compression (VBR). It is used as a constant
+in the ratecontrol equation. Recommended range for default rc_eq:
+0.0-1.0.
+</p>
+</dd>
+<dt> ‘<samp>qblur <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale blur (VBR).
+</p>
+</dd>
+<dt> ‘<samp>qmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min video quantizer scale (VBR). Must be included between -1 and
+69, default value is 2.
+</p>
+</dd>
+<dt> ‘<samp>qmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max video quantizer scale (VBR). Must be included between -1 and
+1024, default value is 31.
+</p>
+</dd>
+<dt> ‘<samp>qdiff <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max difference between the quantizer scale (VBR).
+</p>
+</dd>
+<dt> ‘<samp>bf <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max number of B frames between non-B-frames.
+</p>
+<p>Must be an integer between -1 and 16. 0 means that B-frames are
+disabled. If a value of -1 is used, it will choose an automatic value
+depending on the encoder.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>b_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set qp factor between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol method.
+</p>
+</dd>
+<dt> ‘<samp>b_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set strategy to choose between I/P/B-frames.
+</p>
+</dd>
+<dt> ‘<samp>ps <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set RTP payload size in bytes.
+</p>
+</dd>
+<dt> ‘<samp>mv_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>header_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>skip_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>misc_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>frame_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>bug <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Workaround not auto detected encoder bugs.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>autodetect</samp>’</dt>
+<dt> ‘<samp>old_msmpeg4</samp>’</dt>
+<dd><p>some old lavc generated msmpeg4v3 files (no autodetection)
+</p></dd>
+<dt> ‘<samp>xvid_ilace</samp>’</dt>
+<dd><p>Xvid interlacing bug (autodetected if fourcc==XVIX)
+</p></dd>
+<dt> ‘<samp>ump4</samp>’</dt>
+<dd><p>(autodetected if fourcc==UMP4)
+</p></dd>
+<dt> ‘<samp>no_padding</samp>’</dt>
+<dd><p>padding bug (autodetected)
+</p></dd>
+<dt> ‘<samp>amv</samp>’</dt>
+<dt> ‘<samp>ac_vlc</samp>’</dt>
+<dd><p>illegal vlc bug (autodetected per fourcc)
+</p></dd>
+<dt> ‘<samp>qpel_chroma</samp>’</dt>
+<dt> ‘<samp>std_qpel</samp>’</dt>
+<dd><p>old standard qpel (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>qpel_chroma2</samp>’</dt>
+<dt> ‘<samp>direct_blocksize</samp>’</dt>
+<dd><p>direct-qpel-blocksize bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>edge padding bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>hpel_chroma</samp>’</dt>
+<dt> ‘<samp>dc_clip</samp>’</dt>
+<dt> ‘<samp>ms</samp>’</dt>
+<dd><p>Workaround various bugs in microsoft broken decoders.
+</p></dd>
+<dt> ‘<samp>trunc</samp>’</dt>
+<dd><p>trancated frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lelim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for luminance (negative
+values also consider DC coefficient).
+</p>
+</dd>
+<dt> ‘<samp>celim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for chrominance (negative
+values also consider dc coefficient)
+</p>
+</dd>
+<dt> ‘<samp>strict <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Specify how strictly to follow the standards.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>very</samp>’</dt>
+<dd><p>strictly conform to a older more strict version of the spec or reference software
+</p></dd>
+<dt> ‘<samp>strict</samp>’</dt>
+<dd><p>strictly conform to all the things in the spec no matter what consequences
+</p></dd>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>unofficial</samp>’</dt>
+<dd><p>allow unofficial extensions
+</p></dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>allow non standardized experimental things, experimental
+(unfinished/work in progress/not well tested) decoders and encoders.
+Note: experimental decoders can pose a security risk, do not use this for
+decoding untrusted input.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>b_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>err_detect <var>flags</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set error detection flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>verify embedded CRCs
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>detect bitstream specification deviations
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>detect improper bitstream length
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>abort decoding on minor error detection
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>consider things that violate the spec and have not been seen in the wild as errors
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>consider all spec non compliancies as errors
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>consider things that a sane encoder should not do as an error
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>has_b_frames <var>integer</var></samp>’</dt>
+<dt> ‘<samp>block_align <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mpeg_quant <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Use MPEG quantizers instead of H.263.
+</p>
+</dd>
+<dt> ‘<samp>qsquish <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>How to keep quantizer between qmin and qmax (0 = clip, 1 = use
+differentiable function).
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_amp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_freq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_override_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>rc_eq <var>string</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set rate control equation. When computing the expression, besides the
+standard functions defined in the section ’Expression Evaluation’, the
+following functions are available: bits2qp(bits), qp2bits(qp). Also
+the following constants are available: iTex pTex tex mv fCode iCount
+mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex
+avgTex.
+</p>
+</dd>
+<dt> ‘<samp>maxrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set max bitrate tolerance (in bits/s). Requires bufsize to be set.
+</p>
+</dd>
+<dt> ‘<samp>minrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR
+encode. It is of little use elsewise.
+</p>
+</dd>
+<dt> ‘<samp>bufsize <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol buffer size (in bits).
+</p>
+</dd>
+<dt> ‘<samp>rc_buf_aggressivity <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Currently useless.
+</p>
+</dd>
+<dt> ‘<samp>i_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP factor between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>i_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_cplx <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set initial complexity for 1-pass encoding.
+</p>
+</dd>
+<dt> ‘<samp>dct <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set DCT algorithm.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>autoselect a good one (default)
+</p></dd>
+<dt> ‘<samp>fastint</samp>’</dt>
+<dd><p>fast integer
+</p></dd>
+<dt> ‘<samp>int</samp>’</dt>
+<dd><p>accurate integer
+</p></dd>
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>faan</samp>’</dt>
+<dd><p>floating point AAN DCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lumi_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress bright areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>tcplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set temporal complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>scplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set spatial complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>p_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter masking.
+</p>
+</dd>
+<dt> ‘<samp>dark_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress dark areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>idct <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select IDCT implementation.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dt> ‘<samp>int</samp>’</dt>
+<dt> ‘<samp>simple</samp>’</dt>
+<dt> ‘<samp>simplemmx</samp>’</dt>
+<dt> ‘<samp>arm</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>sh4</samp>’</dt>
+<dt> ‘<samp>simplearm</samp>’</dt>
+<dt> ‘<samp>simplearmv5te</samp>’</dt>
+<dt> ‘<samp>simplearmv6</samp>’</dt>
+<dt> ‘<samp>simpleneon</samp>’</dt>
+<dt> ‘<samp>simplealpha</samp>’</dt>
+<dt> ‘<samp>ipp</samp>’</dt>
+<dt> ‘<samp>xvidmmx</samp>’</dt>
+<dt> ‘<samp>faani</samp>’</dt>
+<dd><p>floating point AAN IDCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>slice_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>ec <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set error concealment strategy.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>guess_mvs</samp>’</dt>
+<dd><p>iterative motion vector (MV) search (slow)
+</p></dd>
+<dt> ‘<samp>deblock</samp>’</dt>
+<dd><p>use strong deblock filter for damaged MBs
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>bits_per_coded_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set prediction method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>left</samp>’</dt>
+<dt> ‘<samp>plane</samp>’</dt>
+<dt> ‘<samp>median</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>aspect <var>rational number</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>debug <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pict</samp>’</dt>
+<dd><p>picture info
+</p></dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dd><p>rate control
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dt> ‘<samp>mb_type</samp>’</dt>
+<dd><p>macroblock (MB) type
+</p></dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>per-block quantization parameter (QP)
+</p></dd>
+<dt> ‘<samp>mv</samp>’</dt>
+<dd><p>motion vector
+</p></dd>
+<dt> ‘<samp>dct_coeff</samp>’</dt>
+<dt> ‘<samp>skip</samp>’</dt>
+<dt> ‘<samp>startcode</samp>’</dt>
+<dt> ‘<samp>pts</samp>’</dt>
+<dt> ‘<samp>er</samp>’</dt>
+<dd><p>error recognition
+</p></dd>
+<dt> ‘<samp>mmco</samp>’</dt>
+<dd><p>memory management control operations (H.264)
+</p></dd>
+<dt> ‘<samp>bugs</samp>’</dt>
+<dt> ‘<samp>vis_qp</samp>’</dt>
+<dd><p>visualize quantization parameter (QP), lower QP are tinted greener
+</p></dd>
+<dt> ‘<samp>vis_mb_type</samp>’</dt>
+<dd><p>visualize block types
+</p></dd>
+<dt> ‘<samp>buffers</samp>’</dt>
+<dd><p>picture buffer allocations
+</p></dd>
+<dt> ‘<samp>thread_ops</samp>’</dt>
+<dd><p>threading operations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vismv <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Visualize motion vectors (MVs).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pf</samp>’</dt>
+<dd><p>forward predicted MVs of P-frames
+</p></dd>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>forward predicted MVs of B-frames
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>backward predicted MVs of B-frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set full pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>subcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>mbcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>ildctcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set interlaced dct compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>last_pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set amount of motion predictors from the previous frame.
+</p>
+</dd>
+<dt> ‘<samp>preme <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>precmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>pre_dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation pre-pass.
+</p>
+</dd>
+<dt> ‘<samp>subq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel motion estimation quality.
+</p>
+</dd>
+<dt> ‘<samp>dtg_active_format <var>integer</var></samp>’</dt>
+<dt> ‘<samp>me_range <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set limit motion vectors range (1023 for DivX player).
+</p>
+</dd>
+<dt> ‘<samp>ibias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra quant bias.
+</p>
+</dd>
+<dt> ‘<samp>pbias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter quant bias.
+</p>
+</dd>
+<dt> ‘<samp>color_table_id <var>integer</var></samp>’</dt>
+<dt> ‘<samp>global_quality <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>coder <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>vlc</samp>’</dt>
+<dd><p>variable length coder / huffman coder
+</p></dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>arithmetic coder
+</p></dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>raw (no encoding)
+</p></dd>
+<dt> ‘<samp>rle</samp>’</dt>
+<dd><p>run-length coder
+</p></dd>
+<dt> ‘<samp>deflate</samp>’</dt>
+<dd><p>deflate-based coder
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>context <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set context model.
+</p>
+</dd>
+<dt> ‘<samp>slice_flags <var>integer</var></samp>’</dt>
+<dt> ‘<samp>xvmc_acceleration <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mbd <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock decision algorithm (high quality mode).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>use mbcmp (default)
+</p></dd>
+<dt> ‘<samp>bits</samp>’</dt>
+<dd><p>use fewest bits
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>use best rate distortion
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>stream_codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>sc_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set scene change threshold.
+</p>
+</dd>
+<dt> ‘<samp>lmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>lmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>nr <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set noise reduction.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set number of bits which should be loaded into the rc buffer before
+decoding starts.
+</p>
+</dd>
+<dt> ‘<samp>flags2 <var>flags</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dd><p>Allow non spec compliant speedup tricks.
+</p></dd>
+<dt> ‘<samp>sgop</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>noout</samp>’</dt>
+<dd><p>Skip bitstream encoding.
+</p></dd>
+<dt> ‘<samp>ignorecrop</samp>’</dt>
+<dd><p>Ignore cropping information from sps.
+</p></dd>
+<dt> ‘<samp>local_header</samp>’</dt>
+<dd><p>Place global headers at every keyframe instead of in extradata.
+</p></dd>
+<dt> ‘<samp>chunks</samp>’</dt>
+<dd><p>Frame data might be split into multiple chunks.
+</p></dd>
+<dt> ‘<samp>showall</samp>’</dt>
+<dd><p>Show all frames before the first keyframe.
+</p></dd>
+<dt> ‘<samp>skiprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>error <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>qns <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p>
+</dd>
+<dt> ‘<samp>threads <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>detect a good number of threads
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation threshold.
+</p>
+</dd>
+<dt> ‘<samp>mb_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock threshold.
+</p>
+</dd>
+<dt> ‘<samp>dc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra_dc_precision.
+</p>
+</dd>
+<dt> ‘<samp>nssew <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set nsse weight.
+</p>
+</dd>
+<dt> ‘<samp>skip_top <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the top which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>skip_bottom <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the bottom which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>profile <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+<dt> ‘<samp>aac_main</samp>’</dt>
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dt> ‘<samp>aac_ssr</samp>’</dt>
+<dt> ‘<samp>aac_ltp</samp>’</dt>
+<dt> ‘<samp>aac_he</samp>’</dt>
+<dt> ‘<samp>aac_he_v2</samp>’</dt>
+<dt> ‘<samp>aac_ld</samp>’</dt>
+<dt> ‘<samp>aac_eld</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_low</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_he</samp>’</dt>
+<dt> ‘<samp>dts</samp>’</dt>
+<dt> ‘<samp>dts_es</samp>’</dt>
+<dt> ‘<samp>dts_96_24</samp>’</dt>
+<dt> ‘<samp>dts_hd_hra</samp>’</dt>
+<dt> ‘<samp>dts_hd_ma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>lowres <var>integer</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Decode at 1= 1/2, 2=1/4, 3=1/8 resolutions.
+</p>
+</dd>
+<dt> ‘<samp>skip_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip threshold.
+</p>
+</dd>
+<dt> ‘<samp>skip_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip factor.
+</p>
+</dd>
+<dt> ‘<samp>skip_exp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip exponent.
+Negative values behave identical to the corresponding positive ones, except
+that the score is normalized.
+Positive values exist primarly for compatibility reasons and are not so useful.
+</p>
+</dd>
+<dt> ‘<samp>skipcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>border_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Increase the quantizer for macroblocks close to borders.
+</p>
+</dd>
+<dt> ‘<samp>mblmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mblmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mepc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation bitrate penalty compensation (1.0 = 256).
+</p>
+</dd>
+<dt> ‘<samp>skip_loop_filter <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_idct <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_frame <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd>
+<p>Make decoder discard processing depending on the frame type selected
+by the option value.
+</p>
+<p>‘<samp>skip_loop_filter</samp>’ skips frame loop filtering, ‘<samp>skip_idct</samp>’
+skips frame IDCT/dequantization, ‘<samp>skip_frame</samp>’ skips decoding.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Discard no frame.
+</p>
+</dd>
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Discard useless frames like 0-sized frames.
+</p>
+</dd>
+<dt> ‘<samp>noref</samp>’</dt>
+<dd><p>Discard all non-reference frames.
+</p>
+</dd>
+<dt> ‘<samp>bidir</samp>’</dt>
+<dd><p>Discard all bidirectional frames.
+</p>
+</dd>
+<dt> ‘<samp>nokey</samp>’</dt>
+<dd><p>Discard all frames excepts keyframes.
+</p>
+</dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Discard all frames.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>default</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>bidir_refine <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Refine the two motion vectors used in bidirectional macroblocks.
+</p>
+</dd>
+<dt> ‘<samp>brd_scale <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Downscale frames for dynamic B-frame decision.
+</p>
+</dd>
+<dt> ‘<samp>keyint_min <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set minimum interval between IDR-frames.
+</p>
+</dd>
+<dt> ‘<samp>refs <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set reference frames to consider for motion compensation.
+</p>
+</dd>
+<dt> ‘<samp>chromaoffset <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set chroma qp offset from luma.
+</p>
+</dd>
+<dt> ‘<samp>trellis <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set rate-distortion optimal quantization.
+</p>
+</dd>
+<dt> ‘<samp>sc_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set value multiplied by qscale for each frame and added to
+scene_change_score.
+</p>
+</dd>
+<dt> ‘<samp>mv0_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>b_sensitivity <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Adjust sensitivity of b_frame_strategy 1.
+</p>
+</dd>
+<dt> ‘<samp>compression_level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>min_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>max_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>timecode_frame_start <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set GOP timecode frame start number, in non drop frame format.
+</p>
+</dd>
+<dt> ‘<samp>request_channels <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set desired number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>bits_per_raw_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>channel_layout <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>request_channel_layout <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>rc_max_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>rc_min_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>ticks_per_frame <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_primaries <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_trc <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>colorspace <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_range <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>chroma_sample_location <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>log_level_offset <var>integer</var></samp>’</dt>
+<dd><p>Set the log level offset.
+</p>
+</dd>
+<dt> ‘<samp>slices <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Number of slices, used in parallelized encoding.
+</p>
+</dd>
+<dt> ‘<samp>thread_type <var>flags</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select multithreading type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>slice</samp>’</dt>
+<dt> ‘<samp>frame</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>audio_service_type <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio service type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ma</samp>’</dt>
+<dd><p>Main Audio Service
+</p></dd>
+<dt> ‘<samp>ef</samp>’</dt>
+<dd><p>Effects
+</p></dd>
+<dt> ‘<samp>vi</samp>’</dt>
+<dd><p>Visually Impaired
+</p></dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dd><p>Hearing Impaired
+</p></dd>
+<dt> ‘<samp>di</samp>’</dt>
+<dd><p>Dialogue
+</p></dd>
+<dt> ‘<samp>co</samp>’</dt>
+<dd><p>Commentary
+</p></dd>
+<dt> ‘<samp>em</samp>’</dt>
+<dd><p>Emergency
+</p></dd>
+<dt> ‘<samp>vo</samp>’</dt>
+<dd><p>Voice Over
+</p></dd>
+<dt> ‘<samp>ka</samp>’</dt>
+<dd><p>Karaoke
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>request_sample_fmt <var>sample_fmt</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set sample format audio decoders should prefer. Default value is
+<code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_timebase <var>rational number</var></samp>’</dt>
+<dt> ‘<samp>sub_charenc <var>encoding</var> (<em>decoding,subtitles</em>)</samp>’</dt>
+<dd><p>Set the input subtitles character encoding.
+</p>
+</dd>
+<dt> ‘<samp>field_order <var>field_order</var> (<em>video</em>)</samp>’</dt>
+<dd><p>Set/override the field order of the video.
+Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>progressive</samp>’</dt>
+<dd><p>Progressive video
+</p></dd>
+<dt> ‘<samp>tt</samp>’</dt>
+<dd><p>Interlaced video, top field coded and displayed first
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>Interlaced video, bottom field coded and displayed first
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>Interlaced video, top coded first, bottom displayed first
+</p></dd>
+<dt> ‘<samp>bt</samp>’</dt>
+<dd><p>Interlaced video, bottom coded first, top displayed first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>skip_alpha <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set to 1 to disable processing alpha (transparency). This works like the
+‘<samp>gray</samp>’ flag in the ‘<samp>flags</samp>’ option which skips chroma information
+instead of alpha. Default is 0.
+</p></dd>
+</dl>
+
+
+<a name="Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Decoders">12. Decoders</a></h1>
+
+<p>Decoders are configured elements in FFmpeg which allow the decoding of
+multimedia streams.
+</p>
+<p>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 <code>--enable-lib</code> option. You can list all
+available decoders using the configure option <code>--list-decoders</code>.
+</p>
+<p>You can disable all the decoders with the configure option
+<code>--disable-decoders</code> and selectively enable / disable single decoders
+with the options <code>--enable-decoder=<var>DECODER</var></code> /
+<code>--disable-decoder=<var>DECODER</var></code>.
+</p>
+<p>The option <code>-decoders</code> of the ff* tools will display the list of
+enabled decoders.
+</p>
+
+<a name="Video-Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Video-Decoders">13. Video Decoders</a></h1>
+
+<p>A description of some of the currently available video decoders
+follows.
+</p>
+<a name="rawvideo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rawvideo">13.1 rawvideo</a></h2>
+
+<p>Raw video decoder.
+</p>
+<p>This decoder decodes rawvideo streams.
+</p>
+<a name="Options-21"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-21">13.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>top <var>top_field_first</var></samp>’</dt>
+<dd><p>Specify the assumed field type of the input video.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>the video is assumed to be progressive (default)
+</p></dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>bottom-field-first is assumed
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>top-field-first is assumed
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="Audio-Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Audio-Decoders">14. Audio Decoders</a></h1>
+
+<p>A description of some of the currently available audio decoders
+follows.
+</p>
+<a name="ac3"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ac3">14.1 ac3</a></h2>
+
+<p>AC-3 audio decoder.
+</p>
+<p>This decoder implements part of ATSC A/52:2010 and ETSI TS 102 366, as well as
+the undocumented RealAudio 3 (a.k.a. dnet).
+</p>
+<a name="AC_002d3-Decoder-Options"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-AC_002d3-Decoder-Options">14.1.1 AC-3 Decoder Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-drc_scale <var>value</var></samp>’</dt>
+<dd><p>Dynamic Range Scale Factor. The factor to apply to dynamic range values
+from the AC-3 stream. This factor is applied exponentially.
+There are 3 notable scale factor ranges:
+</p><dl compact="compact">
+<dt> ‘<samp>drc_scale == 0</samp>’</dt>
+<dd><p>DRC disabled. Produces full range audio.
+</p></dd>
+<dt> ‘<samp>0 < drc_scale <= 1</samp>’</dt>
+<dd><p>DRC enabled. Applies a fraction of the stream DRC value.
+Audio reproduction is between full range and full compression.
+</p></dd>
+<dt> ‘<samp>drc_scale > 1</samp>’</dt>
+<dd><p>DRC enabled. Applies drc_scale asymmetrically.
+Loud sounds are fully compressed. Soft sounds are enhanced.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="ffwavesynth"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ffwavesynth">14.2 ffwavesynth</a></h2>
+
+<p>Internal wave synthetizer.
+</p>
+<p>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.
+</p>
+<a name="libcelt"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libcelt">14.3 libcelt</a></h2>
+
+<p>libcelt decoder wrapper.
+</p>
+<p>libcelt allows libavcodec to decode the Xiph CELT ultra-low delay audio codec.
+Requires the presence of the libcelt headers and library during configuration.
+You need to explicitly configure the build with <code>--enable-libcelt</code>.
+</p>
+<a name="libgsm"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libgsm">14.4 libgsm</a></h2>
+
+<p>libgsm decoder wrapper.
+</p>
+<p>libgsm allows libavcodec to decode the GSM full rate audio codec. Requires
+the presence of the libgsm headers and library during configuration. You need
+to explicitly configure the build with <code>--enable-libgsm</code>.
+</p>
+<p>This decoder supports both the ordinary GSM and the Microsoft variant.
+</p>
+<a name="libilbc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libilbc">14.5 libilbc</a></h2>
+
+<p>libilbc decoder wrapper.
+</p>
+<p>libilbc allows libavcodec to decode the Internet Low Bitrate Codec (iLBC)
+audio codec. Requires the presence of the libilbc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libilbc</code>.
+</p>
+<a name="Options-27"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-27">14.5.1 Options</a></h3>
+
+<p>The following option is supported by the libilbc wrapper.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>enhance</samp>’</dt>
+<dd>
+<p>Enable the enhancement of the decoded audio when set to 1. The default
+value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libopencore_002damrnb"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libopencore_002damrnb">14.6 libopencore-amrnb</a></h2>
+
+<p>libopencore-amrnb decoder wrapper.
+</p>
+<p>libopencore-amrnb allows libavcodec to decode the Adaptive Multi-Rate
+Narrowband audio codec. Using it requires the presence of the
+libopencore-amrnb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrnb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-NB exists, so users can decode AMR-NB
+without this library.
+</p>
+<a name="libopencore_002damrwb"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libopencore_002damrwb">14.7 libopencore-amrwb</a></h2>
+
+<p>libopencore-amrwb decoder wrapper.
+</p>
+<p>libopencore-amrwb allows libavcodec to decode the Adaptive Multi-Rate
+Wideband audio codec. Using it requires the presence of the
+libopencore-amrwb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrwb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-WB exists, so users can decode AMR-WB
+without this library.
+</p>
+<a name="libopus-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libopus-1">14.8 libopus</a></h2>
+
+<p>libopus decoder wrapper.
+</p>
+<p>libopus allows libavcodec to decode the Opus Interactive Audio Codec.
+Requires the presence of the libopus headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopus</code>.
+</p>
+
+<a name="Subtitles-Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Subtitles-Decoders">15. Subtitles Decoders</a></h1>
+
+<a name="dvdsub"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-dvdsub">15.1 dvdsub</a></h2>
+
+<p>This codec decodes the bitmap subtitles used in DVDs; the same subtitles can
+also be found in VobSub file pairs and in some Matroska files.
+</p>
+<a name="Options-35"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-35">15.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>palette</samp>’</dt>
+<dd><p>Specify the global palette used by the bitmaps. When stored in VobSub, the
+palette is normally specified in the index file; in Matroska, the palette is
+stored in the codec extra-data in the same format as in VobSub. In DVDs, the
+palette is stored in the IFO file, and therefore not available when reading
+from dumped VOB files.
+</p>
+<p>The format for this option is a string containing 16 24-bits hexadecimal
+numbers (without 0x prefix) separated by comas, for example <code>0d00ee,
+ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1,
+7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b</code>.
+</p></dd>
+</dl>
+
+<a name="libzvbi_002dteletext"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libzvbi_002dteletext">15.2 libzvbi-teletext</a></h2>
+
+<p>Libzvbi allows libavcodec to decode DVB teletext pages and DVB teletext
+subtitles. Requires the presence of the libzvbi headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libzvbi</code>.
+</p>
+<a name="Options-41"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-41">15.2.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>txt_page</samp>’</dt>
+<dd><p>List of teletext page numbers to decode. You may use the special * string to
+match all pages. Pages that do not match the specified list are dropped.
+Default value is *.
+</p></dd>
+<dt> ‘<samp>txt_chop_top</samp>’</dt>
+<dd><p>Discards the top teletext line. Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_format</samp>’</dt>
+<dd><p>Specifies the format of the decoded subtitles. The teletext decoder is capable
+of decoding the teletext pages to bitmaps or to simple text, you should use
+"bitmap" for teletext pages, because certain graphics and colors cannot be
+expressed in simple text. You might use "text" for teletext based subtitles if
+your application can handle simple text based subtitles. Default value is
+bitmap.
+</p></dd>
+<dt> ‘<samp>txt_left</samp>’</dt>
+<dd><p>X offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_top</samp>’</dt>
+<dd><p>Y offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_chop_spaces</samp>’</dt>
+<dd><p>Chops leading and trailing spaces and removes empty lines from the generated
+text. This option is useful for teletext based subtitles where empty spaces may
+be present at the start or at the end of the lines or empty lines may be
+present between the subtitle lines because of double-sized teletext charactes.
+Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_duration</samp>’</dt>
+<dd><p>Sets the display duration of the decoded teletext pages or subtitles in
+miliseconds. Default value is 30000 which is 30 seconds.
+</p></dd>
+<dt> ‘<samp>txt_transparent</samp>’</dt>
+<dd><p>Force transparent background of the generated teletext bitmaps. Default value
+is 0 which means an opaque (black) background.
+</p></dd>
+</dl>
+
+<a name="Encoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Encoders">16. Encoders</a></h1>
+
+<p>Encoders are configured elements in FFmpeg which allow the encoding of
+multimedia streams.
+</p>
+<p>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 <code>--enable-lib</code> option. You can list all
+available encoders using the configure option <code>--list-encoders</code>.
+</p>
+<p>You can disable all the encoders with the configure option
+<code>--disable-encoders</code> and selectively enable / disable single encoders
+with the options <code>--enable-encoder=<var>ENCODER</var></code> /
+<code>--disable-encoder=<var>ENCODER</var></code>.
+</p>
+<p>The option <code>-encoders</code> of the ff* tools will display the list of
+enabled encoders.
+</p>
+
+<a name="Audio-Encoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Audio-Encoders">17. Audio Encoders</a></h1>
+
+<p>A description of some of the currently available audio encoders
+follows.
+</p>
+<p><a name="aacenc"></a>
+</p><a name="aac"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aac">17.1 aac</a></h2>
+
+<p>Advanced Audio Coding (AAC) encoder.
+</p>
+<p>This encoder is an experimental FFmpeg-native AAC encoder. Currently only the
+low complexity (AAC-LC) profile is supported. To use this encoder, you must set
+‘<samp>strict</samp>’ option to ‘<samp>experimental</samp>’ or lower.
+</p>
+<p>As this encoder is experimental, unexpected behavior may exist from time to
+time. For a more stable AAC encoder, see <a href="#libvo_002daacenc">libvo-aacenc</a>. However, be warned
+that it has a worse quality reported by some users.
+</p>
+<p>See also <a href="#libfdk_002daac_002denc">libfdk_aac</a> and <a href="#libfaac">libfaac</a>.
+</p>
+<a name="Options-43"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-43">17.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bit rate in bits/s. Setting this automatically activates constant bit rate
+(CBR) mode.
+</p>
+</dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Set quality for variable bit rate (VBR) mode. This option is valid only using
+the <code>ffmpeg</code> command-line tool. For library interface users, use
+‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>stereo_mode</samp>’</dt>
+<dd><p>Set stereo encoding mode. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatically selected by the encoder.
+</p>
+</dd>
+<dt> ‘<samp>ms_off</samp>’</dt>
+<dd><p>Disable middle/side encoding. This is the default.
+</p>
+</dd>
+<dt> ‘<samp>ms_force</samp>’</dt>
+<dd><p>Force middle/side encoding.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>aac_coder</samp>’</dt>
+<dd><p>Set AAC encoder coding method. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>faac</samp>’</dt>
+<dd><p>FAAC-inspired method.
+</p>
+<p>This method is a simplified reimplementation of the method used in FAAC, which
+sets thresholds proportional to the band energies, and then decreases all the
+thresholds with quantizer steps to find the appropriate quantization with
+distortion below threshold band by band.
+</p>
+<p>The quality of this method is comparable to the two loop searching method
+descibed below, but somewhat a little better and slower.
+</p>
+</dd>
+<dt> ‘<samp>anmr</samp>’</dt>
+<dd><p>Average noise to mask ratio (ANMR) trellis-based solution.
+</p>
+<p>This has a theoretic best quality out of all the coding methods, but at the
+cost of the slowest speed.
+</p>
+</dd>
+<dt> ‘<samp>twoloop</samp>’</dt>
+<dd><p>Two loop searching (TLS) method.
+</p>
+<p>This method first sets quantizers depending on band thresholds and then tries
+to find an optimal combination by adding or subtracting a specific value from
+all quantizers and adjusting some individual quantizer a little.
+</p>
+<p>This method produces similar quality with the FAAC method and is the default.
+</p>
+</dd>
+<dt> ‘<samp>fast</samp>’</dt>
+<dd><p>Constant quantizer method.
+</p>
+<p>This method sets a constant quantizer for all bands. This is the fastest of all
+the methods, yet produces the worst quality.
+</p>
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="ac3-and-ac3_005ffixed"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ac3-and-ac3_005ffixed">17.2 ac3 and ac3_fixed</a></h2>
+
+<p>AC-3 audio encoders.
+</p>
+<p>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).
+</p>
+<p>The <var>ac3</var> encoder uses floating-point math, while the <var>ac3_fixed</var>
+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 <var>ac3_fixed</var> encoder is not the
+default codec for any of the output formats, so it must be specified explicitly
+using the option <code>-acodec ac3_fixed</code> in order to use it.
+</p>
+<a name="AC_002d3-Metadata"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-AC_002d3-Metadata">17.2.1 AC-3 Metadata</a></h3>
+
+<p>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.
+</p>
+<p>These parameters are described in detail in several publicly-available
+documents.
+</p><ul>
+<li> <a href="http://www.atsc.org/cms/standards/a_52-2010.pdf">A/52:2010 - Digital Audio Compression (AC-3) (E-AC-3) Standard</a>
+</li><li> <a href="http://www.atsc.org/cms/standards/a_54a_with_corr_1.pdf">A/54 - Guide to the Use of the ATSC Digital Television Standard</a>
+</li><li> <a href="http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/18_Metadata.Guide.pdf">Dolby Metadata Guide</a>
+</li><li> <a href="http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/46_DDEncodingGuidelines.pdf">Dolby Digital Professional Encoding Guidelines</a>
+</li></ul>
+
+<a name="Metadata-Control-Options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Metadata-Control-Options">17.2.1.1 Metadata Control Options</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-per_frame_metadata <var>boolean</var></samp>’</dt>
+<dd><p>Allow Per-Frame Metadata. Specifies if the encoder should check for changing
+metadata for each frame.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>The metadata values set at initialization will be used for every frame in the
+stream. (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Metadata values can be changed before encoding each frame.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Downmix-Levels"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Downmix-Levels">17.2.1.2 Downmix Levels</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-center_mixlev <var>level</var></samp>’</dt>
+<dd><p>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:
+</p><dl compact="compact">
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6dB gain
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-surround_mixlev <var>level</var></samp>’</dt>
+<dd><p>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:
+</p><dl compact="compact">
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3dB gain
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Surround Channel(s)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Audio-Production-Information"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Audio-Production-Information">17.2.1.3 Audio Production Information</a></h4>
+<p>Audio Production Information is optional information describing the mixing
+environment. Either none or both of the fields are written to the bitstream.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-mixing_level <var>number</var></samp>’</dt>
+<dd><p>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 <code>room_type</code> option is not the default value, the <code>mixing_level</code>
+option must not be -1.
+</p>
+</dd>
+<dt> ‘<samp>-room_type <var>type</var></samp>’</dt>
+<dd><p>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 <code>mixing_level</code>
+option and the <code>room_type</code> option have the default values.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>large</samp>’</dt>
+<dd><p>Large Room
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>small</samp>’</dt>
+<dd><p>Small Room
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Other-Metadata-Options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Other-Metadata-Options">17.2.1.4 Other Metadata Options</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-copyright <var>boolean</var></samp>’</dt>
+<dd><p>Copyright Indicator. Specifies whether a copyright exists for this audio.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>No Copyright Exists (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Copyright Exists
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-dialnorm <var>value</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>-dsur_mode <var>mode</var></samp>’</dt>
+<dd><p>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 <b>NOT</b> mean the encoder will actually
+apply Dolby Surround processing.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Not Dolby Surround Encoded
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Dolby Surround Encoded
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-original <var>boolean</var></samp>’</dt>
+<dd><p>Original Bit Stream Indicator. Specifies whether this audio is from the
+original source and not a copy.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Not Original Source
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Original Source (default)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Extended-Bitstream-Information"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Extended-Bitstream-Information">17.2.2 Extended Bitstream Information</a></h3>
+<p>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 <code>center_mixlev</code>
+and <code>surround_mixlev</code> options if it supports the Alternate Bit Stream
+Syntax.
+</p>
+<a name="Extended-Bitstream-Information-_002d-Part-1"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Extended-Bitstream-Information-_002d-Part-1">17.2.2.1 Extended Bitstream Information - Part 1</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-dmix_mode <var>mode</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>ltrt</samp>’</dt>
+<dd><p>Lt/Rt Downmix Preferred
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>loro</samp>’</dt>
+<dd><p>Lo/Ro Downmix Preferred
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-ltrt_cmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>1.414</samp>’</dt>
+<dd><p>Apply +3dB gain
+</p></dd>
+<dt> ‘<samp>1.189</samp>’</dt>
+<dd><p>Apply +1.5dB gain
+</p></dd>
+<dt> ‘<samp>1.000</samp>’</dt>
+<dd><p>Apply 0dB gain
+</p></dd>
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Center Channel
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-ltrt_surmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Surround Channel(s)
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-loro_cmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>1.414</samp>’</dt>
+<dd><p>Apply +3dB gain
+</p></dd>
+<dt> ‘<samp>1.189</samp>’</dt>
+<dd><p>Apply +1.5dB gain
+</p></dd>
+<dt> ‘<samp>1.000</samp>’</dt>
+<dd><p>Apply 0dB gain
+</p></dd>
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Center Channel
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-loro_surmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Surround Channel(s)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Extended-Bitstream-Information-_002d-Part-2"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Extended-Bitstream-Information-_002d-Part-2">17.2.2.2 Extended Bitstream Information - Part 2</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-dsurex_mode <var>mode</var></samp>’</dt>
+<dd><p>Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX
+(7.1 matrixed to 5.1). Using this option does <b>NOT</b> mean the encoder will actually
+apply Dolby Surround EX processing.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Dolby Surround EX Off
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Dolby Surround EX On
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-dheadphone_mode <var>mode</var></samp>’</dt>
+<dd><p>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 <b>NOT</b> mean the encoder will actually apply Dolby Headphone
+processing.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Dolby Headphone Off
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Dolby Headphone On
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-ad_conv_type <var>type</var></samp>’</dt>
+<dd><p>A/D Converter Type. Indicates whether the audio has passed through HDCD A/D
+conversion.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>standard</samp>’</dt>
+<dd><p>Standard A/D Converter (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>hdcd</samp>’</dt>
+<dd><p>HDCD A/D Converter
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Other-AC_002d3-Encoding-Options"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Other-AC_002d3-Encoding-Options">17.2.3 Other AC-3 Encoding Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-stereo_rematrixing <var>boolean</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+</dl>
+
+<a name="Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options">17.2.4 Floating-Point-Only AC-3 Encoding Options</a></h3>
+
+<p>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.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-channel_coupling <var>boolean</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Selected by Encoder (default)
+</p></dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Disable Channel Coupling
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Enable Channel Coupling
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-cpl_start_band <var>number</var></samp>’</dt>
+<dd><p>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 <var>auto</var> 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.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Selected by Encoder (default)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<p><a name="libfaac"></a>
+</p><a name="libfaac-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libfaac-1">17.3 libfaac</a></h2>
+
+<p>libfaac AAC (Advanced Audio Coding) encoder wrapper.
+</p>
+<p>Requires the presence of the libfaac headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libfaac --enable-nonfree</code>.
+</p>
+<p>This encoder is considered to be of higher quality with respect to the
+<a href="#aacenc">the native experimental FFmpeg AAC encoder</a>.
+</p>
+<p>For more information see the libfaac project at
+<a href="http://www.audiocoding.com/faac.html/">http://www.audiocoding.com/faac.html/</a>.
+</p>
+<a name="Options-29"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-29">17.3.1 Options</a></h3>
+
+<p>The following shared FFmpeg codec options are recognized.
+</p>
+<p>The following options are supported by the libfaac wrapper. The
+<code>faac</code>-equivalent of the options are listed in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bit rate in bits/s for ABR (Average Bit Rate) mode. If the bit rate
+is not explicitly specified, it is automatically set to a suitable
+value depending on the selected profile. <code>faac</code> bitrate is
+expressed in kilobits/s.
+</p>
+<p>Note that libfaac does not support CBR (Constant Bit Rate) but only
+ABR (Average Bit Rate).
+</p>
+<p>If VBR mode is enabled this option is ignored.
+</p>
+</dd>
+<dt> ‘<samp>ar (<em>-R</em>)</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>ac (<em>-c</em>)</samp>’</dt>
+<dd><p>Set the number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>cutoff (<em>-C</em>)</samp>’</dt>
+<dd><p>Set cutoff frequency. If not specified (or explicitly set to 0) it
+will use a value automatically computed by the library. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>profile</samp>’</dt>
+<dd><p>Set audio profile.
+</p>
+<p>The following profiles are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>aac_main</samp>’</dt>
+<dd><p>Main AAC (Main)
+</p>
+</dd>
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dd><p>Low Complexity AAC (LC)
+</p>
+</dd>
+<dt> ‘<samp>aac_ssr</samp>’</dt>
+<dd><p>Scalable Sample Rate (SSR)
+</p>
+</dd>
+<dt> ‘<samp>aac_ltp</samp>’</dt>
+<dd><p>Long Term Prediction (LTP)
+</p></dd>
+</dl>
+
+<p>If not specified it is set to ‘<samp>aac_low</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>flags +qscale</samp>’</dt>
+<dd><p>Set constant quality VBR (Variable Bit Rate) mode.
+</p>
+</dd>
+<dt> ‘<samp>global_quality</samp>’</dt>
+<dd><p>Set quality in VBR mode as an integer number of lambda units.
+</p>
+<p>Only relevant when VBR mode is enabled with <code>flags +qscale</code>. The
+value is converted to QP units by dividing it by <code>FF_QP2LAMBDA</code>,
+and used to set the quality value used by libfaac. A reasonable range
+for the option value in QP units is [10-500], the higher the value the
+higher the quality.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-q</em>)</samp>’</dt>
+<dd><p>Enable VBR mode when set to a non-negative value, and set constant
+quality value as a double floating point value in QP units.
+</p>
+<p>The value sets the quality value used by libfaac. A reasonable range
+for the option value is [10-500], the higher the value the higher the
+quality.
+</p>
+<p>This option is valid only using the <code>ffmpeg</code> command-line
+tool. For library interface users, use ‘<samp>global_quality</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-98"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-98">17.3.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to convert an audio file to ABR 128 kbps AAC in an M4A (MP4)
+container:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -codec:a libfaac -b:a 128k -output.m4a
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to convert an audio file to VBR AAC, using the
+LTP AAC profile:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -c:a libfaac -profile:a aac_ltp -q:a 100 output.m4a
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="libfdk_002daac_002denc"></a>
+</p><a name="libfdk_005faac"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libfdk_005faac">17.4 libfdk_aac</a></h2>
+
+<p>libfdk-aac AAC (Advanced Audio Coding) encoder wrapper.
+</p>
+<p>The libfdk-aac library is based on the Fraunhofer FDK AAC code from
+the Android project.
+</p>
+<p>Requires the presence of the libfdk-aac headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libfdk-aac</code>. The library is also incompatible with GPL,
+so if you allow the use of GPL, you should configure with
+<code>--enable-gpl --enable-nonfree --enable-libfdk-aac</code>.
+</p>
+<p>This encoder is considered to be of higher quality with respect to
+both <a href="#aacenc">the native experimental FFmpeg AAC encoder</a> and
+<a href="#libfaac">libfaac</a>.
+</p>
+<p>VBR encoding, enabled through the ‘<samp>vbr</samp>’ or ‘<samp>flags
++qscale</samp>’ options, is experimental and only works with some
+combinations of parameters.
+</p>
+<p>Support for encoding 7.1 audio is only available with libfdk-aac 0.1.3 or
+higher.
+</p>
+<p>For more information see the fdk-aac project at
+<a href="http://sourceforge.net/p/opencore-amr/fdk-aac/">http://sourceforge.net/p/opencore-amr/fdk-aac/</a>.
+</p>
+<a name="Options-31"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-31">17.4.1 Options</a></h3>
+
+<p>The following options are mapped on the shared FFmpeg codec options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bit rate in bits/s. If the bitrate is not explicitly specified, it
+is automatically set to a suitable value depending on the selected
+profile.
+</p>
+<p>In case VBR mode is enabled the option is ignored.
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>flags +qscale</samp>’</dt>
+<dd><p>Enable fixed quality, VBR (Variable Bit Rate) mode.
+Note that VBR is implicitly enabled when the ‘<samp>vbr</samp>’ value is
+positive.
+</p>
+</dd>
+<dt> ‘<samp>cutoff</samp>’</dt>
+<dd><p>Set cutoff frequency. If not specified (or explicitly set to 0) it
+will use a value automatically computed by the library. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>profile</samp>’</dt>
+<dd><p>Set audio profile.
+</p>
+<p>The following profiles are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dd><p>Low Complexity AAC (LC)
+</p>
+</dd>
+<dt> ‘<samp>aac_he</samp>’</dt>
+<dd><p>High Efficiency AAC (HE-AAC)
+</p>
+</dd>
+<dt> ‘<samp>aac_he_v2</samp>’</dt>
+<dd><p>High Efficiency AAC version 2 (HE-AACv2)
+</p>
+</dd>
+<dt> ‘<samp>aac_ld</samp>’</dt>
+<dd><p>Low Delay AAC (LD)
+</p>
+</dd>
+<dt> ‘<samp>aac_eld</samp>’</dt>
+<dd><p>Enhanced Low Delay AAC (ELD)
+</p></dd>
+</dl>
+
+<p>If not specified it is set to ‘<samp>aac_low</samp>’.
+</p></dd>
+</dl>
+
+<p>The following are private options of the libfdk_aac encoder.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>afterburner</samp>’</dt>
+<dd><p>Enable afterburner feature if set to 1, disabled if set to 0. This
+improves the quality but also the required processing power.
+</p>
+<p>Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>eld_sbr</samp>’</dt>
+<dd><p>Enable SBR (Spectral Band Replication) for ELD if set to 1, disabled
+if set to 0.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>signaling</samp>’</dt>
+<dd><p>Set SBR/PS signaling style.
+</p>
+<p>It can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>choose signaling implicitly (explicit hierarchical by default,
+implicit if global header is disabled)
+</p>
+</dd>
+<dt> ‘<samp>implicit</samp>’</dt>
+<dd><p>implicit backwards compatible signaling
+</p>
+</dd>
+<dt> ‘<samp>explicit_sbr</samp>’</dt>
+<dd><p>explicit SBR, implicit PS signaling
+</p>
+</dd>
+<dt> ‘<samp>explicit_hierarchical</samp>’</dt>
+<dd><p>explicit hierarchical signaling
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>default</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Output LATM/LOAS encapsulated data if set to 1, disabled if set to 0.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>header_period</samp>’</dt>
+<dd><p>Set StreamMuxConfig and PCE repetition period (in frames) for sending
+in-band configuration buffers within LATM/LOAS transport layer.
+</p>
+<p>Must be a 16-bits non-negative integer.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>vbr</samp>’</dt>
+<dd><p>Set VBR mode, from 1 to 5. 1 is lowest quality (though still pretty
+good) and 5 is highest quality. A value of 0 will disable VBR, and CBR
+(Constant Bit Rate) is enabled.
+</p>
+<p>Currently only the ‘<samp>aac_low</samp>’ profile supports VBR encoding.
+</p>
+<p>VBR modes 1-5 correspond to roughly the following average bit rates:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>32 kbps/channel
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dd><p>40 kbps/channel
+</p></dd>
+<dt> ‘<samp>3</samp>’</dt>
+<dd><p>48-56 kbps/channel
+</p></dd>
+<dt> ‘<samp>4</samp>’</dt>
+<dd><p>64 kbps/channel
+</p></dd>
+<dt> ‘<samp>5</samp>’</dt>
+<dd><p>about 80-96 kbps/channel
+</p></dd>
+</dl>
+
+<p>Default value is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-67"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-67">17.4.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to convert an audio file to VBR AAC in an M4A (MP4)
+container:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to convert an audio file to CBR 64k kbps AAC, using the
+High-Efficiency AAC profile:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="libmp3lame"></a>
+</p><a name="libmp3lame-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libmp3lame-1">17.5 libmp3lame</a></h2>
+
+<p>LAME (Lame Ain’t an MP3 Encoder) MP3 encoder wrapper.
+</p>
+<p>Requires the presence of the libmp3lame headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libmp3lame</code>.
+</p>
+<p>See <a href="#libshine">libshine</a> for a fixed-point MP3 encoder, although with a
+lower quality.
+</p>
+<a name="Options-14"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-14">17.5.1 Options</a></h3>
+
+<p>The following options are supported by the libmp3lame wrapper. The
+<code>lame</code>-equivalent of the options are listed in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for CBR or ABR. LAME <code>bitrate</code> is
+expressed in kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-V</em>)</samp>’</dt>
+<dd><p>Set constant quality setting for VBR. This option is valid only
+using the <code>ffmpeg</code> command-line tool. For library interface
+users, use ‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>compression_level (<em>-q</em>)</samp>’</dt>
+<dd><p>Set algorithm quality. Valid arguments are integers in the 0-9 range,
+with 0 meaning highest quality but slowest, and 9 meaning fastest
+while producing the worst quality.
+</p>
+</dd>
+<dt> ‘<samp>reservoir</samp>’</dt>
+<dd><p>Enable use of bit reservoir when set to 1. Default value is 1. LAME
+has this enabled by default, but can be overridden by use
+‘<samp>--nores</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>joint_stereo (<em>-m j</em>)</samp>’</dt>
+<dd><p>Enable the encoder to use (on a frame by frame basis) either L/R
+stereo or mid/side stereo. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>abr (<em>--abr</em>)</samp>’</dt>
+<dd><p>Enable the encoder to use ABR when set to 1. The <code>lame</code>
+‘<samp>--abr</samp>’ sets the target bitrate, while this options only
+tells FFmpeg to use ABR still relies on ‘<samp>b</samp>’ to set bitrate.
+</p>
+</dd>
+</dl>
+
+<a name="libopencore_002damrnb-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libopencore_002damrnb-1">17.6 libopencore-amrnb</a></h2>
+
+<p>OpenCORE Adaptive Multi-Rate Narrowband encoder.
+</p>
+<p>Requires the presence of the libopencore-amrnb headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopencore-amrnb --enable-version3</code>.
+</p>
+<p>This is a mono-only encoder. Officially it only supports 8000Hz sample rate,
+but you can override it by setting ‘<samp>strict</samp>’ to ‘<samp>unofficial</samp>’ or
+lower.
+</p>
+<a name="Options-12"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-12">17.6.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bitrate in bits per second. Only the following bitrates are supported,
+otherwise libavcodec will round to the nearest valid bitrate.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>4750</samp>’</dt>
+<dt> ‘<samp>5150</samp>’</dt>
+<dt> ‘<samp>5900</samp>’</dt>
+<dt> ‘<samp>6700</samp>’</dt>
+<dt> ‘<samp>7400</samp>’</dt>
+<dt> ‘<samp>7950</samp>’</dt>
+<dt> ‘<samp>10200</samp>’</dt>
+<dt> ‘<samp>12200</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dtx</samp>’</dt>
+<dd><p>Allow discontinuous transmission (generate comfort noise) when set to 1. The
+default value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<p><a name="libshine"></a>
+</p><a name="libshine-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libshine-1">17.7 libshine</a></h2>
+
+<p>Shine Fixed-Point MP3 encoder wrapper.
+</p>
+<p>Shine is a fixed-point MP3 encoder. It has a far better performance on
+platforms without an FPU, e.g. armel CPUs, and some phones and tablets.
+However, as it is more targeted on performance than quality, it is not on par
+with LAME and other production-grade encoders quality-wise. Also, according to
+the project’s homepage, this encoder may not be free of bugs as the code was
+written a long time ago and the project was dead for at least 5 years.
+</p>
+<p>This encoder only supports stereo and mono input. This is also CBR-only.
+</p>
+<p>The original project (last updated in early 2007) is at
+<a href="http://sourceforge.net/projects/libshine-fxp/">http://sourceforge.net/projects/libshine-fxp/</a>. We only support the
+updated fork by the Savonet/Liquidsoap project at <a href="https://github.com/savonet/shine">https://github.com/savonet/shine</a>.
+</p>
+<p>Requires the presence of the libshine headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libshine</code>.
+</p>
+<p>See also <a href="#libmp3lame">libmp3lame</a>.
+</p>
+<a name="Options-24"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-24">17.7.1 Options</a></h3>
+
+<p>The following options are supported by the libshine wrapper. The
+<code>shineenc</code>-equivalent of the options are listed in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for CBR. <code>shineenc</code> ‘<samp>-b</samp>’ option
+is expressed in kilobits/s.
+</p>
+</dd>
+</dl>
+
+<a name="libtwolame"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libtwolame">17.8 libtwolame</a></h2>
+
+<p>TwoLAME MP2 encoder wrapper.
+</p>
+<p>Requires the presence of the libtwolame headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libtwolame</code>.
+</p>
+<a name="Options-8"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-8">17.8.1 Options</a></h3>
+
+<p>The following options are supported by the libtwolame wrapper. The
+<code>twolame</code>-equivalent options follow the FFmpeg ones and are in
+parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for CBR. <code>twolame</code> ‘<samp>b</samp>’
+option is expressed in kilobits/s. Default value is 128k.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-V</em>)</samp>’</dt>
+<dd><p>Set quality for experimental VBR support. Maximum value range is
+from -50 to 50, useful range is from -10 to 10. The higher the
+value, the better the quality. This option is valid only using the
+<code>ffmpeg</code> command-line tool. For library interface users,
+use ‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>mode (<em>--mode</em>)</samp>’</dt>
+<dd><p>Set the mode of the resulting audio. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose mode automatically based on the input. This is the default.
+</p></dd>
+<dt> ‘<samp>stereo</samp>’</dt>
+<dd><p>Stereo
+</p></dd>
+<dt> ‘<samp>joint_stereo</samp>’</dt>
+<dd><p>Joint stereo
+</p></dd>
+<dt> ‘<samp>dual_channel</samp>’</dt>
+<dd><p>Dual channel
+</p></dd>
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>Mono
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>psymodel (<em>--psyc-mode</em>)</samp>’</dt>
+<dd><p>Set psychoacoustic model to use in encoding. The argument must be
+an integer between -1 and 4, inclusive. The higher the value, the
+better the quality. The default value is 3.
+</p>
+</dd>
+<dt> ‘<samp>energy_levels (<em>--energy</em>)</samp>’</dt>
+<dd><p>Enable energy levels extensions when set to 1. The default value is
+0 (disabled).
+</p>
+</dd>
+<dt> ‘<samp>error_protection (<em>--protect</em>)</samp>’</dt>
+<dd><p>Enable CRC error protection when set to 1. The default value is 0
+(disabled).
+</p>
+</dd>
+<dt> ‘<samp>copyright (<em>--copyright</em>)</samp>’</dt>
+<dd><p>Set MPEG audio copyright flag when set to 1. The default value is 0
+(disabled).
+</p>
+</dd>
+<dt> ‘<samp>original (<em>--original</em>)</samp>’</dt>
+<dd><p>Set MPEG audio original flag when set to 1. The default value is 0
+(disabled).
+</p>
+</dd>
+</dl>
+
+<p><a name="libvo_002daacenc"></a>
+</p><a name="libvo_002daacenc-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libvo_002daacenc-1">17.9 libvo-aacenc</a></h2>
+
+<p>VisualOn AAC encoder.
+</p>
+<p>Requires the presence of the libvo-aacenc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libvo-aacenc --enable-version3</code>.
+</p>
+<p>This encoder is considered to be worse than the
+<a href="#aacenc">native experimental FFmpeg AAC encoder</a>, according to
+multiple sources.
+</p>
+<a name="Options-26"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-26">17.9.1 Options</a></h3>
+
+<p>The VisualOn AAC encoder only support encoding AAC-LC and up to 2
+channels. It is also CBR-only.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bit rate in bits/s.
+</p>
+</dd>
+</dl>
+
+<a name="libvo_002damrwbenc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libvo_002damrwbenc">17.10 libvo-amrwbenc</a></h2>
+
+<p>VisualOn Adaptive Multi-Rate Wideband encoder.
+</p>
+<p>Requires the presence of the libvo-amrwbenc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libvo-amrwbenc --enable-version3</code>.
+</p>
+<p>This is a mono-only encoder. Officially it only supports 16000Hz sample
+rate, but you can override it by setting ‘<samp>strict</samp>’ to
+‘<samp>unofficial</samp>’ or lower.
+</p>
+<a name="Options-37"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-37">17.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Only the following bitrates are supported, otherwise
+libavcodec will round to the nearest valid bitrate.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>6600</samp>’</dt>
+<dt> ‘<samp>8850</samp>’</dt>
+<dt> ‘<samp>12650</samp>’</dt>
+<dt> ‘<samp>14250</samp>’</dt>
+<dt> ‘<samp>15850</samp>’</dt>
+<dt> ‘<samp>18250</samp>’</dt>
+<dt> ‘<samp>19850</samp>’</dt>
+<dt> ‘<samp>23050</samp>’</dt>
+<dt> ‘<samp>23850</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dtx</samp>’</dt>
+<dd><p>Allow discontinuous transmission (generate comfort noise) when set to 1. The
+default value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libopus"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libopus">17.11 libopus</a></h2>
+
+<p>libopus Opus Interactive Audio Codec encoder wrapper.
+</p>
+<p>Requires the presence of the libopus headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopus</code>.
+</p>
+<a name="Option-Mapping"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Option-Mapping">17.11.1 Option Mapping</a></h3>
+
+<p>Most libopus options are modeled after the <code>opusenc</code> utility from
+opus-tools. The following is an option mapping chart describing options
+supported by the libopus wrapper, and their <code>opusenc</code>-equivalent
+in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>bitrate</em>)</samp>’</dt>
+<dd><p>Set the bit rate in bits/s. FFmpeg’s ‘<samp>b</samp>’ option is
+expressed in bits/s, while <code>opusenc</code>’s ‘<samp>bitrate</samp>’ in
+kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>vbr (<em>vbr</em>, <em>hard-cbr</em>, and <em>cvbr</em>)</samp>’</dt>
+<dd><p>Set VBR mode. The FFmpeg ‘<samp>vbr</samp>’ option has the following
+valid arguments, with the their <code>opusenc</code> equivalent options
+in parentheses:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>off (<em>hard-cbr</em>)</samp>’</dt>
+<dd><p>Use constant bit rate encoding.
+</p>
+</dd>
+<dt> ‘<samp>on (<em>vbr</em>)</samp>’</dt>
+<dd><p>Use variable bit rate encoding (the default).
+</p>
+</dd>
+<dt> ‘<samp>constrained (<em>cvbr</em>)</samp>’</dt>
+<dd><p>Use constrained variable bit rate encoding.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>compression_level (<em>comp</em>)</samp>’</dt>
+<dd><p>Set encoding algorithm complexity. Valid options are integers in
+the 0-10 range. 0 gives the fastest encodes but lower quality, while 10
+gives the highest quality but slowest encoding. The default is 10.
+</p>
+</dd>
+<dt> ‘<samp>frame_duration (<em>framesize</em>)</samp>’</dt>
+<dd><p>Set maximum frame size, or duration of a frame in milliseconds. The
+argument must be exactly the following: 2.5, 5, 10, 20, 40, 60. Smaller
+frame sizes achieve lower latency but less quality at a given bitrate.
+Sizes greater than 20ms are only interesting at fairly low bitrates.
+The default is 20ms.
+</p>
+</dd>
+<dt> ‘<samp>packet_loss (<em>expect-loss</em>)</samp>’</dt>
+<dd><p>Set expected packet loss percentage. The default is 0.
+</p>
+</dd>
+<dt> ‘<samp>application (N.A.)</samp>’</dt>
+<dd><p>Set intended application type. Valid options are listed below:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>voip</samp>’</dt>
+<dd><p>Favor improved speech intelligibility.
+</p></dd>
+<dt> ‘<samp>audio</samp>’</dt>
+<dd><p>Favor faithfulness to the input (the default).
+</p></dd>
+<dt> ‘<samp>lowdelay</samp>’</dt>
+<dd><p>Restrict to only the lowest delay modes.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cutoff (N.A.)</samp>’</dt>
+<dd><p>Set cutoff bandwidth in Hz. The argument must be exactly one of the
+following: 4000, 6000, 8000, 12000, or 20000, corresponding to
+narrowband, mediumband, wideband, super wideband, and fullband
+respectively. The default is 0 (cutoff disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libvorbis"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libvorbis">17.12 libvorbis</a></h2>
+
+<p>libvorbis encoder wrapper.
+</p>
+<p>Requires the presence of the libvorbisenc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libvorbis</code>.
+</p>
+<a name="Options-19"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-19">17.12.1 Options</a></h3>
+
+<p>The following options are supported by the libvorbis wrapper. The
+<code>oggenc</code>-equivalent of the options are listed in parentheses.
+</p>
+<p>To get a more accurate and extensive documentation of the libvorbis
+options, consult the libvorbisenc’s and <code>oggenc</code>’s documentations.
+See <a href="http://xiph.org/vorbis/">http://xiph.org/vorbis/</a>,
+<a href="http://wiki.xiph.org/Vorbis-tools">http://wiki.xiph.org/Vorbis-tools</a>, and oggenc(1).
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for ABR. <code>oggenc</code> ‘<samp>-b</samp>’ is
+expressed in kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-q</em>)</samp>’</dt>
+<dd><p>Set constant quality setting for VBR. The value should be a float
+number in the range of -1.0 to 10.0. The higher the value, the better
+the quality. The default value is ‘<samp>3.0</samp>’.
+</p>
+<p>This option is valid only using the <code>ffmpeg</code> command-line tool.
+For library interface users, use ‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>cutoff (<em>--advanced-encode-option lowpass_frequency=N</em>)</samp>’</dt>
+<dd><p>Set cutoff bandwidth in Hz, a value of 0 disables cutoff. <code>oggenc</code>’s
+related option is expressed in kHz. The default value is ‘<samp>0</samp>’ (cutoff
+disabled).
+</p>
+</dd>
+<dt> ‘<samp>minrate (<em>-m</em>)</samp>’</dt>
+<dd><p>Set minimum bitrate expressed in bits/s. <code>oggenc</code> ‘<samp>-m</samp>’ is
+expressed in kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>maxrate (<em>-M</em>)</samp>’</dt>
+<dd><p>Set maximum bitrate expressed in bits/s. <code>oggenc</code> ‘<samp>-M</samp>’ is
+expressed in kilobits/s. This only has effect on ABR mode.
+</p>
+</dd>
+<dt> ‘<samp>iblock (<em>--advanced-encode-option impulse_noisetune=N</em>)</samp>’</dt>
+<dd><p>Set noise floor bias for impulse blocks. The value is a float number from
+-15.0 to 0.0. A negative bias instructs the encoder to pay special attention
+to the crispness of transients in the encoded audio. The tradeoff for better
+transient response is a higher bitrate.
+</p>
+</dd>
+</dl>
+
+<p><a name="libwavpack"></a>
+</p><a name="libwavpack-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libwavpack-1">17.13 libwavpack</a></h2>
+
+<p>A wrapper providing WavPack encoding through libwavpack.
+</p>
+<p>Only lossless mode using 32-bit integer samples is supported currently.
+</p>
+<p>Requires the presence of the libwavpack headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libwavpack</code>.
+</p>
+<p>Note that a libavcodec-native encoder for the WavPack codec exists so users can
+encode audios with this codec without using this encoder. See <a href="#wavpackenc">wavpackenc</a>.
+</p>
+<a name="Options-42"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-42">17.13.1 Options</a></h3>
+
+<p><code>wavpack</code> command line utility’s corresponding options are listed in
+parentheses, if any.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frame_size (<em>--blocksize</em>)</samp>’</dt>
+<dd><p>Default is 32768.
+</p>
+</dd>
+<dt> ‘<samp>compression_level</samp>’</dt>
+<dd><p>Set speed vs. compression tradeoff. Acceptable arguments are listed below:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0 (<em>-f</em>)</samp>’</dt>
+<dd><p>Fast mode.
+</p>
+</dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Normal (default) settings.
+</p>
+</dd>
+<dt> ‘<samp>2 (<em>-h</em>)</samp>’</dt>
+<dd><p>High quality.
+</p>
+</dd>
+<dt> ‘<samp>3 (<em>-hh</em>)</samp>’</dt>
+<dd><p>Very high quality.
+</p>
+</dd>
+<dt> ‘<samp>4-8 (<em>-hh -x</em><var>EXTRAPROC</var>)</samp>’</dt>
+<dd><p>Same as ‘<samp>3</samp>’, but with extra processing enabled.
+</p>
+<p>‘<samp>4</samp>’ is the same as ‘<samp>-x2</samp>’ and ‘<samp>8</samp>’ is the same as ‘<samp>-x6</samp>’.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<p><a name="wavpackenc"></a>
+</p><a name="wavpack"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-wavpack">17.14 wavpack</a></h2>
+
+<p>WavPack lossless audio encoder.
+</p>
+<p>This is a libavcodec-native WavPack encoder. There is also an encoder based on
+libwavpack, but there is virtually no reason to use that encoder.
+</p>
+<p>See also <a href="#libwavpack">libwavpack</a>.
+</p>
+<a name="Options-17"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-17">17.14.1 Options</a></h3>
+
+<p>The equivalent options for <code>wavpack</code> command line utility are listed in
+parentheses.
+</p>
+<a name="Shared-options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Shared-options">17.14.1.1 Shared options</a></h4>
+
+<p>The following shared options are effective for this encoder. Only special notes
+about this particular encoder will be documented here. For the general meaning
+of the options, see <a href="#codec_002doptions">the Codec Options chapter</a>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frame_size (<em>--blocksize</em>)</samp>’</dt>
+<dd><p>For this encoder, the range for this option is between 128 and 131072. Default
+is automatically decided based on sample rate and number of channel.
+</p>
+<p>For the complete formula of calculating default, see
+‘<tt>libavcodec/wavpackenc.c</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>compression_level (<em>-f</em>, <em>-h</em>, <em>-hh</em>, and <em>-x</em>)</samp>’</dt>
+<dd><p>This option’s syntax is consistent with <a href="#libwavpack">libwavpack</a>’s.
+</p></dd>
+</dl>
+
+<a name="Private-options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Private-options">17.14.1.2 Private options</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>joint_stereo (<em>-j</em>)</samp>’</dt>
+<dd><p>Set whether to enable joint stereo. Valid values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>on (<em>1</em>)</samp>’</dt>
+<dd><p>Force mid/side audio encoding.
+</p></dd>
+<dt> ‘<samp>off (<em>0</em>)</samp>’</dt>
+<dd><p>Force left/right audio encoding.
+</p></dd>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Let the encoder decide automatically.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>optimize_mono</samp>’</dt>
+<dd><p>Set whether to enable optimization for mono. This option is only effective for
+non-mono streams. Available values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>enabled
+</p></dd>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>disabled
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="Video-Encoders"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Video-Encoders">18. Video Encoders</a></h1>
+
+<p>A description of some of the currently available video encoders
+follows.
+</p>
+<a name="libtheora"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libtheora">18.1 libtheora</a></h2>
+
+<p>libtheora Theora encoder wrapper.
+</p>
+<p>Requires the presence of the libtheora headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libtheora</code>.
+</p>
+<p>For more information about the libtheora project see
+<a href="http://www.theora.org/">http://www.theora.org/</a>.
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-1">18.1.1 Options</a></h3>
+
+<p>The following global options are mapped to internal libtheora options
+which affect the quality and the bitrate of the encoded stream.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set the video bitrate in bit/s for CBR (Constant Bit Rate) mode. In
+case VBR (Variable Bit Rate) mode is enabled this option is ignored.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Used to enable constant quality mode (VBR) encoding through the
+‘<samp>qscale</samp>’ flag, and to enable the <code>pass1</code> and <code>pass2</code>
+modes.
+</p>
+</dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>Set the GOP size.
+</p>
+</dd>
+<dt> ‘<samp>global_quality</samp>’</dt>
+<dd><p>Set the global quality as an integer in lambda units.
+</p>
+<p>Only relevant when VBR mode is enabled with <code>flags +qscale</code>. The
+value is converted to QP units by dividing it by <code>FF_QP2LAMBDA</code>,
+clipped in the [0 - 10] range, and then multiplied by 6.3 to get a
+value in the native libtheora range [0-63]. A higher value corresponds
+to a higher quality.
+</p>
+</dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Enable VBR mode when set to a non-negative value, and set constant
+quality value as a double floating point value in QP units.
+</p>
+<p>The value is clipped in the [0-10] range, and then multiplied by 6.3
+to get a value in the native libtheora range [0-63].
+</p>
+<p>This option is valid only using the <code>ffmpeg</code> command-line
+tool. For library interface users, use ‘<samp>global_quality</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-17"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-17">18.1.2 Examples</a></h3>
+
+<ul>
+<li>
+Set maximum constant quality (VBR) encoding with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to convert a CBR 1000 kbps Theora video stream:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
+</pre></td></tr></table>
+</li></ul>
+
+<a name="libvpx"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libvpx">18.2 libvpx</a></h2>
+
+<p>VP8 format supported through libvpx.
+</p>
+<p>Requires the presence of the libvpx headers and library during configuration.
+You need to explicitly configure the build with <code>--enable-libvpx</code>.
+</p>
+<a name="Options-39"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-39">18.2.1 Options</a></h3>
+
+<p>Mapping from FFmpeg to libvpx options with conversion notes in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>threads</samp>’</dt>
+<dd><p>g_threads
+</p>
+</dd>
+<dt> ‘<samp>profile</samp>’</dt>
+<dd><p>g_profile
+</p>
+</dd>
+<dt> ‘<samp>vb</samp>’</dt>
+<dd><p>rc_target_bitrate
+</p>
+</dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>kf_max_dist
+</p>
+</dd>
+<dt> ‘<samp>keyint_min</samp>’</dt>
+<dd><p>kf_min_dist
+</p>
+</dd>
+<dt> ‘<samp>qmin</samp>’</dt>
+<dd><p>rc_min_quantizer
+</p>
+</dd>
+<dt> ‘<samp>qmax</samp>’</dt>
+<dd><p>rc_max_quantizer
+</p>
+</dd>
+<dt> ‘<samp>bufsize, vb</samp>’</dt>
+<dd><p>rc_buf_sz
+<code>(bufsize * 1000 / vb)</code>
+</p>
+<p>rc_buf_optimal_sz
+<code>(bufsize * 1000 / vb * 5 / 6)</code>
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy, vb</samp>’</dt>
+<dd><p>rc_buf_initial_sz
+<code>(rc_init_occupancy * 1000 / vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>rc_buffer_aggressivity</samp>’</dt>
+<dd><p>rc_undershoot_pct
+</p>
+</dd>
+<dt> ‘<samp>skip_threshold</samp>’</dt>
+<dd><p>rc_dropframe_thresh
+</p>
+</dd>
+<dt> ‘<samp>qcomp</samp>’</dt>
+<dd><p>rc_2pass_vbr_bias_pct
+</p>
+</dd>
+<dt> ‘<samp>maxrate, vb</samp>’</dt>
+<dd><p>rc_2pass_vbr_maxsection_pct
+<code>(maxrate * 100 / vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>minrate, vb</samp>’</dt>
+<dd><p>rc_2pass_vbr_minsection_pct
+<code>(minrate * 100 / vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>minrate, maxrate, vb</samp>’</dt>
+<dd><p><code>VPX_CBR</code>
+<code>(minrate == maxrate == vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>crf</samp>’</dt>
+<dd><p><code>VPX_CQ</code>, <code>VP8E_SET_CQ_LEVEL</code>
+</p>
+</dd>
+<dt> ‘<samp>quality</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp><var>best</var></samp>’</dt>
+<dd><p><code>VPX_DL_BEST_QUALITY</code>
+</p></dd>
+<dt> ‘<samp><var>good</var></samp>’</dt>
+<dd><p><code>VPX_DL_GOOD_QUALITY</code>
+</p></dd>
+<dt> ‘<samp><var>realtime</var></samp>’</dt>
+<dd><p><code>VPX_DL_REALTIME</code>
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>speed</samp>’</dt>
+<dd><p><code>VP8E_SET_CPUUSED</code>
+</p>
+</dd>
+<dt> ‘<samp>nr</samp>’</dt>
+<dd><p><code>VP8E_SET_NOISE_SENSITIVITY</code>
+</p>
+</dd>
+<dt> ‘<samp>mb_threshold</samp>’</dt>
+<dd><p><code>VP8E_SET_STATIC_THRESHOLD</code>
+</p>
+</dd>
+<dt> ‘<samp>slices</samp>’</dt>
+<dd><p><code>VP8E_SET_TOKEN_PARTITIONS</code>
+</p>
+</dd>
+<dt> ‘<samp>max-intra-rate</samp>’</dt>
+<dd><p><code>VP8E_SET_MAX_INTRA_BITRATE_PCT</code>
+</p>
+</dd>
+<dt> ‘<samp>force_key_frames</samp>’</dt>
+<dd><p><code>VPX_EFLAG_FORCE_KF</code>
+</p>
+</dd>
+<dt> ‘<samp>Alternate reference frame related</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>vp8flags altref</samp>’</dt>
+<dd><p><code>VP8E_SET_ENABLEAUTOALTREF</code>
+</p></dd>
+<dt> ‘<samp><var>arnr_max_frames</var></samp>’</dt>
+<dd><p><code>VP8E_SET_ARNR_MAXFRAMES</code>
+</p></dd>
+<dt> ‘<samp><var>arnr_type</var></samp>’</dt>
+<dd><p><code>VP8E_SET_ARNR_TYPE</code>
+</p></dd>
+<dt> ‘<samp><var>arnr_strength</var></samp>’</dt>
+<dd><p><code>VP8E_SET_ARNR_STRENGTH</code>
+</p></dd>
+<dt> ‘<samp><var>rc_lookahead</var></samp>’</dt>
+<dd><p>g_lag_in_frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vp8flags error_resilient</samp>’</dt>
+<dd><p>g_error_resilient
+</p>
+</dd>
+</dl>
+
+<p>For more information about libvpx see:
+<a href="http://www.webmproject.org/">http://www.webmproject.org/</a>
+</p>
+
+<a name="libwebp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libwebp">18.3 libwebp</a></h2>
+
+<p>libwebp WebP Image encoder wrapper
+</p>
+<p>libwebp is Google’s official encoder for WebP images. It can encode in either
+lossy or lossless mode. Lossy images are essentially a wrapper around a VP8
+frame. Lossless images are a separate codec developed by Google.
+</p>
+<a name="Pixel-Format"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Pixel-Format">18.3.1 Pixel Format</a></h3>
+
+<p>Currently, libwebp only supports YUV420 for lossy and RGB for lossless due
+to limitations of the format and libwebp. Alpha is supported for either mode.
+Because of API limitations, if RGB is passed in when encoding lossy or YUV is
+passed in for encoding lossless, the pixel format will automatically be
+converted using functions from libwebp. This is not ideal and is done only for
+convenience.
+</p>
+<a name="Options-44"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-44">18.3.2 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-lossless <var>boolean</var></samp>’</dt>
+<dd><p>Enables/Disables use of lossless mode. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>-compression_level <var>integer</var></samp>’</dt>
+<dd><p>For lossy, this is a quality/speed tradeoff. Higher values give better quality
+for a given size at the cost of increased encoding time. For lossless, this is
+a size/speed tradeoff. Higher values give smaller size at the cost of increased
+encoding time. More specifically, it controls the number of extra algorithms
+and compression tools used, and varies the combination of these tools. This
+maps to the <var>method</var> option in libwebp. The valid range is 0 to 6.
+Default is 4.
+</p>
+</dd>
+<dt> ‘<samp>-qscale <var>float</var></samp>’</dt>
+<dd><p>For lossy encoding, this controls image quality, 0 to 100. For lossless
+encoding, this controls the effort and time spent at compressing more. The
+default value is 75. Note that for usage via libavcodec, this option is called
+<var>global_quality</var> and must be multiplied by <var>FF_QP2LAMBDA</var>.
+</p>
+</dd>
+<dt> ‘<samp>-preset <var>type</var></samp>’</dt>
+<dd><p>Configuration preset. This does some automatic settings based on the general
+type of the image.
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do not use a preset.
+</p></dd>
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Use the encoder default.
+</p></dd>
+<dt> ‘<samp>picture</samp>’</dt>
+<dd><p>Digital picture, like portrait, inner shot
+</p></dd>
+<dt> ‘<samp>photo</samp>’</dt>
+<dd><p>Outdoor photograph, with natural lighting
+</p></dd>
+<dt> ‘<samp>drawing</samp>’</dt>
+<dd><p>Hand or line drawing, with high-contrast details
+</p></dd>
+<dt> ‘<samp>icon</samp>’</dt>
+<dd><p>Small-sized colorful images
+</p></dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>Text-like
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="libx264_002c-libx264rgb"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libx264_002c-libx264rgb">18.4 libx264, libx264rgb</a></h2>
+
+<p>x264 H.264/MPEG-4 AVC encoder wrapper.
+</p>
+<p>This encoder requires the presence of the libx264 headers and library
+during configuration. You need to explicitly configure the build with
+<code>--enable-libx264</code>.
+</p>
+<p>libx264 supports an impressive number of features, including 8x8 and
+4x4 adaptive spatial transform, adaptive B-frame placement, CAVLC/CABAC
+entropy coding, interlacing (MBAFF), lossless mode, psy optimizations
+for detail retention (adaptive quantization, psy-RD, psy-trellis).
+</p>
+<p>Many libx264 encoder options are mapped to FFmpeg global codec
+options, while unique encoder options are provided through private
+options. Additionally the ‘<samp>x264opts</samp>’ and ‘<samp>x264-params</samp>’
+private options allows one to pass a list of key=value tuples as accepted
+by the libx264 <code>x264_param_parse</code> function.
+</p>
+<p>The x264 project website is at
+<a href="http://www.videolan.org/developers/x264.html">http://www.videolan.org/developers/x264.html</a>.
+</p>
+<p>The libx264rgb encoder is the same as libx264, except it accepts packed RGB
+pixel formats as input instead of YUV.
+</p>
+<a name="Supported-Pixel-Formats"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Supported-Pixel-Formats">18.4.1 Supported Pixel Formats</a></h3>
+
+<p>x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at
+x264’s configure time. FFmpeg only supports one bit depth in one particular
+build. In other words, it is not possible to build one FFmpeg with multiple
+versions of x264 with different bit depths.
+</p>
+<a name="Options-20"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-20">18.4.2 Options</a></h3>
+
+<p>The following options are supported by the libx264 wrapper. The
+<code>x264</code>-equivalent options or values are listed in parentheses
+for easy migration.
+</p>
+<p>To reduce the duplication of documentation, only the private options
+and some others requiring special attention are documented here. For
+the documentation of the undocumented generic options, see
+<a href="#codec_002doptions">the Codec Options chapter</a>.
+</p>
+<p>To get a more accurate and extensive documentation of the libx264
+options, invoke the command <code>x264 --full-help</code> or consult
+the libx264 documentation.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>bitrate</em>)</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Note that FFmpeg’s ‘<samp>b</samp>’ option is
+expressed in bits/s, while <code>x264</code>’s ‘<samp>bitrate</samp>’ is in
+kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>bf (<em>bframes</em>)</samp>’</dt>
+<dt> ‘<samp>g (<em>keyint</em>)</samp>’</dt>
+<dt> ‘<samp>qmax (<em>qpmax</em>)</samp>’</dt>
+<dt> ‘<samp>qmin (<em>qpmin</em>)</samp>’</dt>
+<dt> ‘<samp>qdiff (<em>qpstep</em>)</samp>’</dt>
+<dt> ‘<samp>qblur (<em>qblur</em>)</samp>’</dt>
+<dt> ‘<samp>qcomp (<em>qcomp</em>)</samp>’</dt>
+<dt> ‘<samp>refs (<em>ref</em>)</samp>’</dt>
+<dt> ‘<samp>sc_threshold (<em>scenecut</em>)</samp>’</dt>
+<dt> ‘<samp>trellis (<em>trellis</em>)</samp>’</dt>
+<dt> ‘<samp>nr (<em>nr</em>)</samp>’</dt>
+<dt> ‘<samp>me_range (<em>merange</em>)</samp>’</dt>
+<dt> ‘<samp>me_method (<em>me</em>)</samp>’</dt>
+<dd><p>Set motion estimation method. Possible values in the decreasing order
+of speed:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dia (<em>dia</em>)</samp>’</dt>
+<dt> ‘<samp>epzs (<em>dia</em>)</samp>’</dt>
+<dd><p>Diamond search with radius 1 (fastest). ‘<samp>epzs</samp>’ is an alias for
+‘<samp>dia</samp>’.
+</p></dd>
+<dt> ‘<samp>hex (<em>hex</em>)</samp>’</dt>
+<dd><p>Hexagonal search with radius 2.
+</p></dd>
+<dt> ‘<samp>umh (<em>umh</em>)</samp>’</dt>
+<dd><p>Uneven multi-hexagon search.
+</p></dd>
+<dt> ‘<samp>esa (<em>esa</em>)</samp>’</dt>
+<dd><p>Exhaustive search.
+</p></dd>
+<dt> ‘<samp>tesa (<em>tesa</em>)</samp>’</dt>
+<dd><p>Hadamard exhaustive search (slowest).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>subq (<em>subme</em>)</samp>’</dt>
+<dt> ‘<samp>b_strategy (<em>b-adapt</em>)</samp>’</dt>
+<dt> ‘<samp>keyint_min (<em>min-keyint</em>)</samp>’</dt>
+<dt> ‘<samp>coder</samp>’</dt>
+<dd><p>Set entropy encoder. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>Enable CABAC.
+</p>
+</dd>
+<dt> ‘<samp>vlc</samp>’</dt>
+<dd><p>Enable CAVLC and disable CABAC. It generates the same effect as
+<code>x264</code>’s ‘<samp>--no-cabac</samp>’ option.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cmp</samp>’</dt>
+<dd><p>Set full pixel motion estimation comparation algorithm. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Enable chroma in motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>Ignore chroma in motion estimation. It generates the same effect as
+<code>x264</code>’s ‘<samp>--no-chroma-me</samp>’ option.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>threads (<em>threads</em>)</samp>’</dt>
+<dt> ‘<samp>thread_type</samp>’</dt>
+<dd><p>Set multithreading technique. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>slice</samp>’</dt>
+<dd><p>Slice-based multithreading. It generates the same effect as
+<code>x264</code>’s ‘<samp>--sliced-threads</samp>’ option.
+</p></dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Frame-based multithreading.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set encoding flags. It can be used to disable closed GOP and enable
+open GOP by setting it to <code>-cgop</code>. The result is similar to
+the behavior of <code>x264</code>’s ‘<samp>--open-gop</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy (<em>vbv-init</em>)</samp>’</dt>
+<dt> ‘<samp>preset (<em>preset</em>)</samp>’</dt>
+<dd><p>Set the encoding preset.
+</p>
+</dd>
+<dt> ‘<samp>tune (<em>tune</em>)</samp>’</dt>
+<dd><p>Set tuning of the encoding params.
+</p>
+</dd>
+<dt> ‘<samp>profile (<em>profile</em>)</samp>’</dt>
+<dd><p>Set profile restrictions.
+</p>
+</dd>
+<dt> ‘<samp>fastfirstpass</samp>’</dt>
+<dd><p>Enable fast settings when encoding first pass, when set to 1. When set
+to 0, it has the same effect of <code>x264</code>’s
+‘<samp>--slow-firstpass</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>crf (<em>crf</em>)</samp>’</dt>
+<dd><p>Set the quality for constant quality mode.
+</p>
+</dd>
+<dt> ‘<samp>crf_max (<em>crf-max</em>)</samp>’</dt>
+<dd><p>In CRF mode, prevents VBV from lowering quality beyond this point.
+</p>
+</dd>
+<dt> ‘<samp>qp (<em>qp</em>)</samp>’</dt>
+<dd><p>Set constant quantization rate control method parameter.
+</p>
+</dd>
+<dt> ‘<samp>aq-mode (<em>aq-mode</em>)</samp>’</dt>
+<dd><p>Set AQ method. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>0</em>)</samp>’</dt>
+<dd><p>Disabled.
+</p>
+</dd>
+<dt> ‘<samp>variance (<em>1</em>)</samp>’</dt>
+<dd><p>Variance AQ (complexity mask).
+</p>
+</dd>
+<dt> ‘<samp>autovariance (<em>2</em>)</samp>’</dt>
+<dd><p>Auto-variance AQ (experimental).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>aq-strength (<em>aq-strength</em>)</samp>’</dt>
+<dd><p>Set AQ strength, reduce blocking and blurring in flat and textured areas.
+</p>
+</dd>
+<dt> ‘<samp>psy</samp>’</dt>
+<dd><p>Use psychovisual optimizations when set to 1. When set to 0, it has the
+same effect as <code>x264</code>’s ‘<samp>--no-psy</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>psy-rd (<em>psy-rd</em>)</samp>’</dt>
+<dd><p>Set strength of psychovisual optimization, in
+<var>psy-rd</var>:<var>psy-trellis</var> format.
+</p>
+</dd>
+<dt> ‘<samp>rc-lookahead (<em>rc-lookahead</em>)</samp>’</dt>
+<dd><p>Set number of frames to look ahead for frametype and ratecontrol.
+</p>
+</dd>
+<dt> ‘<samp>weightb</samp>’</dt>
+<dd><p>Enable weighted prediction for B-frames when set to 1. When set to 0,
+it has the same effect as <code>x264</code>’s ‘<samp>--no-weightb</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>weightp (<em>weightp</em>)</samp>’</dt>
+<dd><p>Set weighted prediction method for P-frames. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>0</em>)</samp>’</dt>
+<dd><p>Disabled
+</p></dd>
+<dt> ‘<samp>simple (<em>1</em>)</samp>’</dt>
+<dd><p>Enable only weighted refs
+</p></dd>
+<dt> ‘<samp>smart (<em>2</em>)</samp>’</dt>
+<dd><p>Enable both weighted refs and duplicates
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ssim (<em>ssim</em>)</samp>’</dt>
+<dd><p>Enable calculation and printing SSIM stats after the encoding.
+</p>
+</dd>
+<dt> ‘<samp>intra-refresh (<em>intra-refresh</em>)</samp>’</dt>
+<dd><p>Enable the use of Periodic Intra Refresh instead of IDR frames when set
+to 1.
+</p>
+</dd>
+<dt> ‘<samp>bluray-compat (<em>bluray-compat</em>)</samp>’</dt>
+<dd><p>Configure the encoder to be compatible with the bluray standard.
+It is a shorthand for setting "bluray-compat=1 force-cfr=1".
+</p>
+</dd>
+<dt> ‘<samp>b-bias (<em>b-bias</em>)</samp>’</dt>
+<dd><p>Set the influence on how often B-frames are used.
+</p>
+</dd>
+<dt> ‘<samp>b-pyramid (<em>b-pyramid</em>)</samp>’</dt>
+<dd><p>Set method for keeping of some B-frames as references. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Disabled.
+</p></dd>
+<dt> ‘<samp>strict (<em>strict</em>)</samp>’</dt>
+<dd><p>Strictly hierarchical pyramid.
+</p></dd>
+<dt> ‘<samp>normal (<em>normal</em>)</samp>’</dt>
+<dd><p>Non-strict (not Blu-ray compatible).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>mixed-refs</samp>’</dt>
+<dd><p>Enable the use of one reference per partition, as opposed to one
+reference per macroblock when set to 1. When set to 0, it has the
+same effect as <code>x264</code>’s ‘<samp>--no-mixed-refs</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>8x8dct</samp>’</dt>
+<dd><p>Enable adaptive spatial transform (high profile 8x8 transform)
+when set to 1. When set to 0, it has the same effect as
+<code>x264</code>’s ‘<samp>--no-8x8dct</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>fast-pskip</samp>’</dt>
+<dd><p>Enable early SKIP detection on P-frames when set to 1. When set
+to 0, it has the same effect as <code>x264</code>’s
+‘<samp>--no-fast-pskip</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>aud (<em>aud</em>)</samp>’</dt>
+<dd><p>Enable use of access unit delimiters when set to 1.
+</p>
+</dd>
+<dt> ‘<samp>mbtree</samp>’</dt>
+<dd><p>Enable use macroblock tree ratecontrol when set to 1. When set
+to 0, it has the same effect as <code>x264</code>’s
+‘<samp>--no-mbtree</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>deblock (<em>deblock</em>)</samp>’</dt>
+<dd><p>Set loop filter parameters, in <var>alpha</var>:<var>beta</var> form.
+</p>
+</dd>
+<dt> ‘<samp>cplxblur (<em>cplxblur</em>)</samp>’</dt>
+<dd><p>Set fluctuations reduction in QP (before curve compression).
+</p>
+</dd>
+<dt> ‘<samp>partitions (<em>partitions</em>)</samp>’</dt>
+<dd><p>Set partitions to consider as a comma-separated list of. Possible
+values in the list:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>p8x8</samp>’</dt>
+<dd><p>8x8 P-frame partition.
+</p></dd>
+<dt> ‘<samp>p4x4</samp>’</dt>
+<dd><p>4x4 P-frame partition.
+</p></dd>
+<dt> ‘<samp>b8x8</samp>’</dt>
+<dd><p>4x4 B-frame partition.
+</p></dd>
+<dt> ‘<samp>i8x8</samp>’</dt>
+<dd><p>8x8 I-frame partition.
+</p></dd>
+<dt> ‘<samp>i4x4</samp>’</dt>
+<dd><p>4x4 I-frame partition.
+(Enabling ‘<samp>p4x4</samp>’ requires ‘<samp>p8x8</samp>’ to be enabled. Enabling
+‘<samp>i8x8</samp>’ requires adaptive spatial transform (‘<samp>8x8dct</samp>’
+option) to be enabled.)
+</p></dd>
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Do not consider any partitions.
+</p></dd>
+<dt> ‘<samp>all (<em>all</em>)</samp>’</dt>
+<dd><p>Consider every partition.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>direct-pred (<em>direct</em>)</samp>’</dt>
+<dd><p>Set direct MV prediction mode. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Disable MV prediction.
+</p></dd>
+<dt> ‘<samp>spatial (<em>spatial</em>)</samp>’</dt>
+<dd><p>Enable spatial predicting.
+</p></dd>
+<dt> ‘<samp>temporal (<em>temporal</em>)</samp>’</dt>
+<dd><p>Enable temporal predicting.
+</p></dd>
+<dt> ‘<samp>auto (<em>auto</em>)</samp>’</dt>
+<dd><p>Automatically decided.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>slice-max-size (<em>slice-max-size</em>)</samp>’</dt>
+<dd><p>Set the limit of the size of each slice in bytes. If not specified
+but RTP payload size (‘<samp>ps</samp>’) is specified, that is used.
+</p>
+</dd>
+<dt> ‘<samp>stats (<em>stats</em>)</samp>’</dt>
+<dd><p>Set the file name for multi-pass stats.
+</p>
+</dd>
+<dt> ‘<samp>nal-hrd (<em>nal-hrd</em>)</samp>’</dt>
+<dd><p>Set signal HRD information (requires ‘<samp>vbv-bufsize</samp>’ to be set).
+Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Disable HRD information signaling.
+</p></dd>
+<dt> ‘<samp>vbr (<em>vbr</em>)</samp>’</dt>
+<dd><p>Variable bit rate.
+</p></dd>
+<dt> ‘<samp>cbr (<em>cbr</em>)</samp>’</dt>
+<dd><p>Constant bit rate (not allowed in MP4 container).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>x264opts (N.A.)</samp>’</dt>
+<dd><p>Set any x264 option, see <code>x264 --fullhelp</code> for a list.
+</p>
+<p>Argument is a list of <var>key</var>=<var>value</var> couples separated by
+":". In <var>filter</var> and <var>psy-rd</var> options that use ":" as a separator
+themselves, use "," instead. They accept it as well since long ago but this
+is kept undocumented for some reason.
+</p>
+<p>For example to specify libx264 encoding options with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>x264-params (N.A.)</samp>’</dt>
+<dd><p>Override the x264 configuration using a :-separated list of key=value
+parameters.
+</p>
+<p>This option is functionally the same as the ‘<samp>x264opts</samp>’, but is
+duplicated for compatibility with the Libav fork.
+</p>
+<p>For example to specify libx264 encoding options with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:v libx264 -x264-params level=30:bframes=0:weightp=0:\
+cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:\
+no-fast-pskip=1:subq=6:8x8dct=0:trellis=0 OUTPUT
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>Encoding ffpresets for common usages are provided so they can be used with the
+general presets system (e.g. passing the ‘<samp>pre</samp>’ option).
+</p>
+<a name="libxvid"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libxvid">18.5 libxvid</a></h2>
+
+<p>Xvid MPEG-4 Part 2 encoder wrapper.
+</p>
+<p>This encoder requires the presence of the libxvidcore headers and library
+during configuration. You need to explicitly configure the build with
+<code>--enable-libxvid --enable-gpl</code>.
+</p>
+<p>The native <code>mpeg4</code> encoder supports the MPEG-4 Part 2 format, so
+users can encode to this format without this library.
+</p>
+<a name="Options-13"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-13">18.5.1 Options</a></h3>
+
+<p>The following options are supported by the libxvid wrapper. Some of
+the following options are listed but are not documented, and
+correspond to shared codec options. See <a href="#codec_002doptions">the Codec Options chapter</a> for their documentation. The other shared options
+which are not listed have no effect for the libxvid encoder.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dt> ‘<samp>g</samp>’</dt>
+<dt> ‘<samp>qmin</samp>’</dt>
+<dt> ‘<samp>qmax</samp>’</dt>
+<dt> ‘<samp>mpeg_quant</samp>’</dt>
+<dt> ‘<samp>threads</samp>’</dt>
+<dt> ‘<samp>bf</samp>’</dt>
+<dt> ‘<samp>b_qfactor</samp>’</dt>
+<dt> ‘<samp>b_qoffset</samp>’</dt>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set specific encoding flags. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mv4</samp>’</dt>
+<dd><p>Use four motion vector by macroblock.
+</p>
+</dd>
+<dt> ‘<samp>aic</samp>’</dt>
+<dd><p>Enable high quality AC prediction.
+</p>
+</dd>
+<dt> ‘<samp>gray</samp>’</dt>
+<dd><p>Only encode grayscale.
+</p>
+</dd>
+<dt> ‘<samp>gmc</samp>’</dt>
+<dd><p>Enable the use of global motion compensation (GMC).
+</p>
+</dd>
+<dt> ‘<samp>qpel</samp>’</dt>
+<dd><p>Enable quarter-pixel motion compensation.
+</p>
+</dd>
+<dt> ‘<samp>cgop</samp>’</dt>
+<dd><p>Enable closed GOP.
+</p>
+</dd>
+<dt> ‘<samp>global_header</samp>’</dt>
+<dd><p>Place global headers in extradata instead of every keyframe.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>trellis</samp>’</dt>
+<dt> ‘<samp>me_method</samp>’</dt>
+<dd><p>Set motion estimation method. Possible values in decreasing order of
+speed and increasing order of quality:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>Use no motion estimation (default).
+</p>
+</dd>
+<dt> ‘<samp>phods</samp>’</dt>
+<dt> ‘<samp>x1</samp>’</dt>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>Enable advanced diamond zonal search for 16x16 blocks and half-pixel
+refinement for 16x16 blocks. ‘<samp>x1</samp>’ and ‘<samp>log</samp>’ are aliases for
+‘<samp>phods</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>epzs</samp>’</dt>
+<dd><p>Enable all of the things described above, plus advanced diamond zonal
+search for 8x8 blocks, half-pixel refinement for 8x8 blocks, and motion
+estimation on chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Enable all of the things described above, plus extended 16x16 and 8x8
+blocks search.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>mbd</samp>’</dt>
+<dd><p>Set macroblock decision algorithm. Possible values in the increasing
+order of quality:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>Use macroblock comparing function algorithm (default).
+</p>
+</dd>
+<dt> ‘<samp>bits</samp>’</dt>
+<dd><p>Enable rate distortion-based half pixel and quarter pixel refinement for
+16x16 blocks.
+</p>
+</dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>Enable all of the things described above, plus rate distortion-based
+half pixel and quarter pixel refinement for 8x8 blocks, and rate
+distortion-based search using square pattern.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lumi_aq</samp>’</dt>
+<dd><p>Enable lumi masking adaptive quantization when set to 1. Default is 0
+(disabled).
+</p>
+</dd>
+<dt> ‘<samp>variance_aq</samp>’</dt>
+<dd><p>Enable variance adaptive quantization when set to 1. Default is 0
+(disabled).
+</p>
+<p>When combined with ‘<samp>lumi_aq</samp>’, the resulting quality will not
+be better than any of the two specified individually. In other
+words, the resulting quality will be the worse one of the two
+effects.
+</p>
+</dd>
+<dt> ‘<samp>ssim</samp>’</dt>
+<dd><p>Set structural similarity (SSIM) displaying method. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Disable displaying of SSIM information.
+</p>
+</dd>
+<dt> ‘<samp>avg</samp>’</dt>
+<dd><p>Output average SSIM at the end of encoding to stdout. The format of
+showing the average SSIM is:
+</p>
+<table><tr><td> </td><td><pre class="example">Average SSIM: %f
+</pre></td></tr></table>
+
+<p>For users who are not familiar with C, %f means a float number, or
+a decimal (e.g. 0.939232).
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Output both per-frame SSIM data during encoding and average SSIM at
+the end of encoding to stdout. The format of per-frame information
+is:
+</p>
+<table><tr><td> </td><td><pre class="example"> SSIM: avg: %1.3f min: %1.3f max: %1.3f
+</pre></td></tr></table>
+
+<p>For users who are not familiar with C, %1.3f means a float number
+rounded to 3 digits after the dot (e.g. 0.932).
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ssim_acc</samp>’</dt>
+<dd><p>Set SSIM accuracy. Valid options are integers within the range of
+0-4, while 0 gives the most accurate result and 4 computes the
+fastest.
+</p>
+</dd>
+</dl>
+
+<a name="png"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-png">18.6 png</a></h2>
+
+<p>PNG image encoder.
+</p>
+<a name="Private-options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Private-options-1">18.6.1 Private options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>dpi <var>integer</var></samp>’</dt>
+<dd><p>Set physical density of pixels, in dots per inch, unset by default
+</p></dd>
+<dt> ‘<samp>dpm <var>integer</var></samp>’</dt>
+<dd><p>Set physical density of pixels, in dots per meter, unset by default
+</p></dd>
+</dl>
+
+<a name="ProRes"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ProRes">18.7 ProRes</a></h2>
+
+<p>Apple ProRes encoder.
+</p>
+<p>FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder.
+The used encoder can be chosen with the <code>-vcodec</code> option.
+</p>
+<a name="Private-Options-for-prores_002dks"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Private-Options-for-prores_002dks">18.7.1 Private Options for prores-ks</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>profile <var>integer</var></samp>’</dt>
+<dd><p>Select the ProRes profile to encode
+</p><dl compact="compact">
+<dt> ‘<samp>proxy</samp>’</dt>
+<dt> ‘<samp>lt</samp>’</dt>
+<dt> ‘<samp>standard</samp>’</dt>
+<dt> ‘<samp>hq</samp>’</dt>
+<dt> ‘<samp>4444</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>quant_mat <var>integer</var></samp>’</dt>
+<dd><p>Select quantization matrix.
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dt> ‘<samp>default</samp>’</dt>
+<dt> ‘<samp>proxy</samp>’</dt>
+<dt> ‘<samp>lt</samp>’</dt>
+<dt> ‘<samp>standard</samp>’</dt>
+<dt> ‘<samp>hq</samp>’</dt>
+</dl>
+<p>If set to <var>auto</var>, the matrix matching the profile will be picked.
+If not set, the matrix providing the highest quality, <var>default</var>, will be
+picked.
+</p>
+</dd>
+<dt> ‘<samp>bits_per_mb <var>integer</var></samp>’</dt>
+<dd><p>How many bits to allot for coding one macroblock. Different profiles use
+between 200 and 2400 bits per macroblock, the maximum is 8000.
+</p>
+</dd>
+<dt> ‘<samp>mbs_per_slice <var>integer</var></samp>’</dt>
+<dd><p>Number of macroblocks in each slice (1-8); the default value (8)
+should be good in almost all situations.
+</p>
+</dd>
+<dt> ‘<samp>vendor <var>string</var></samp>’</dt>
+<dd><p>Override the 4-byte vendor ID.
+A custom vendor ID like <var>apl0</var> would claim the stream was produced by
+the Apple encoder.
+</p>
+</dd>
+<dt> ‘<samp>alpha_bits <var>integer</var></samp>’</dt>
+<dd><p>Specify number of bits for alpha component.
+Possible values are <var>0</var>, <var>8</var> and <var>16</var>.
+Use <var>0</var> to disable alpha plane coding.
+</p>
+</dd>
+</dl>
+
+<a name="Speed-considerations"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Speed-considerations">18.7.2 Speed considerations</a></h3>
+
+<p>In the default mode of operation the encoder has to honor frame constraints
+(i.e. not produc frames with size bigger than requested) while still making
+output picture as good as possible.
+A frame containing a lot of small details is harder to compress and the encoder
+would spend more time searching for appropriate quantizers for each slice.
+</p>
+<p>Setting a higher ‘<samp>bits_per_mb</samp>’ limit will improve the speed.
+</p>
+<p>For the fastest encoding speed set the ‘<samp>qscale</samp>’ parameter (4 is the
+recommended value) and do not set a size constraint.
+</p>
+<a name="Bitstream-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Bitstream-Filters">19. Bitstream Filters</a></h1>
+
+<p>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 <code>--list-bsfs</code>.
+</p>
+<p>You can disable all the bitstream filters using the configure option
+<code>--disable-bsfs</code>, and selectively enable any bitstream filter using
+the option <code>--enable-bsf=BSF</code>, or you can disable a particular
+bitstream filter using the option <code>--disable-bsf=BSF</code>.
+</p>
+<p>The option <code>-bsfs</code> of the ff* tools will display the list of
+all the supported bitstream filters included in your build.
+</p>
+<p>Below is a description of the currently available bitstream filters.
+</p>
+<a name="aac_005fadtstoasc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aac_005fadtstoasc">19.1 aac_adtstoasc</a></h2>
+
+<p>Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration
+bitstream filter.
+</p>
+<p>This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
+ADTS header and removes the ADTS header.
+</p>
+<p>This is required for example when copying an AAC stream from a raw
+ADTS AAC container to a FLV or a MOV/MP4 file.
+</p>
+<a name="chomp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-chomp">19.2 chomp</a></h2>
+
+<p>Remove zero padding at the end of a packet.
+</p>
+<a name="dump_005fextra"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-dump_005fextra">19.3 dump_extra</a></h2>
+
+<p>Add extradata to the beginning of the filtered packets.
+</p>
+<p>The additional argument specifies which packets should be filtered.
+It accepts the values:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>add extradata to all key packets, but only if <var>local_header</var> is
+set in the ‘<samp>flags2</samp>’ codec context field
+</p>
+</dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>add extradata to all key packets
+</p>
+</dd>
+<dt> ‘<samp>e</samp>’</dt>
+<dd><p>add extradata to all packets
+</p></dd>
+</dl>
+
+<p>If not specified it is assumed ‘<samp>k</samp>’.
+</p>
+<p>For example the following <code>ffmpeg</code> command forces a global
+header (thus disabling individual packet headers) in the H.264 packets
+generated by the <code>libx264</code> encoder, but corrects them by adding
+the header stored in extradata to the key packets:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
+</pre></td></tr></table>
+
+<a name="h264_005fmp4toannexb"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-h264_005fmp4toannexb">19.4 h264_mp4toannexb</a></h2>
+
+<p>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).
+</p>
+<p>This is required by some streaming formats, typically the MPEG-2
+transport stream format ("mpegts").
+</p>
+<p>For example to remux an MP4 file containing an H.264 stream to mpegts
+format with <code>ffmpeg</code>, you can use the command:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
+</pre></td></tr></table>
+
+<a name="imx_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-imx_005fdump_005fheader">19.5 imx_dump_header</a></h2>
+
+<a name="mjpeg2jpeg"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mjpeg2jpeg">19.6 mjpeg2jpeg</a></h2>
+
+<p>Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
+</p>
+<p>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
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
+</pre></td></tr></table>
+
+<p>Unfortunately, these chunks are incomplete JPEG images, because
+they lack the DHT segment required for decoding. Quoting from
+<a href="http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml">http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml</a>:
+</p>
+<p>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."
+</p>
+<p>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.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
+exiftran -i -9 frame*.jpg
+ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
+</pre></td></tr></table>
+
+<a name="mjpega_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mjpega_005fdump_005fheader">19.7 mjpega_dump_header</a></h2>
+
+<a name="movsub"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-movsub">19.8 movsub</a></h2>
+
+<a name="mp3_005fheader_005fdecompress"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mp3_005fheader_005fdecompress">19.9 mp3_header_decompress</a></h2>
+
+<a name="noise"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-noise">19.10 noise</a></h2>
+
+<a name="remove_005fextra"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-remove_005fextra">19.11 remove_extra</a></h2>
+
+<a name="Format-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Format-Options">20. Format Options</a></h1>
+
+<p>The libavformat library provides some generic global options, which
+can be set on all the muxers and demuxers. In addition each muxer or
+demuxer may support so-called private options, which are specific for
+that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>avioflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>direct</samp>’</dt>
+<dd><p>Reduce buffering.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>probesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set probing size in bytes, i.e. the size of the data to analyze to get
+stream information. A higher value will allow to detect more
+information in case it is dispersed into the stream, but will increase
+latency. Must be an integer not lesser than 32. It is 5000000 by default.
+</p>
+</dd>
+<dt> ‘<samp>packetsize <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set packet size.
+</p>
+</dd>
+<dt> ‘<samp>fflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set format flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ignidx</samp>’</dt>
+<dd><p>Ignore index.
+</p></dd>
+<dt> ‘<samp>genpts</samp>’</dt>
+<dd><p>Generate PTS.
+</p></dd>
+<dt> ‘<samp>nofillin</samp>’</dt>
+<dd><p>Do not fill in missing values that can be exactly calculated.
+</p></dd>
+<dt> ‘<samp>noparse</samp>’</dt>
+<dd><p>Disable AVParsers, this needs <code>+nofillin</code> too.
+</p></dd>
+<dt> ‘<samp>igndts</samp>’</dt>
+<dd><p>Ignore DTS.
+</p></dd>
+<dt> ‘<samp>discardcorrupt</samp>’</dt>
+<dd><p>Discard corrupted frames.
+</p></dd>
+<dt> ‘<samp>sortdts</samp>’</dt>
+<dd><p>Try to interleave output packets by DTS.
+</p></dd>
+<dt> ‘<samp>keepside</samp>’</dt>
+<dd><p>Do not merge side data.
+</p></dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Enable RTP MP4A-LATM payload.
+</p></dd>
+<dt> ‘<samp>nobuffer</samp>’</dt>
+<dd><p>Reduce the latency introduced by optional buffering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seek2any <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Allow seeking to non-keyframes on demuxer level when supported if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>analyzeduration <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Specify how many microseconds are analyzed to probe the input. A
+higher value will allow to detect more accurate information, but will
+increase latency. It defaults to 5,000,000 microseconds = 5 seconds.
+</p>
+</dd>
+<dt> ‘<samp>cryptokey <var>hexadecimal string</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set decryption key.
+</p>
+</dd>
+<dt> ‘<samp>indexmem <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for timestamp index (per stream).
+</p>
+</dd>
+<dt> ‘<samp>rtbufsize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for buffering real-time frames.
+</p>
+</dd>
+<dt> ‘<samp>fdebug <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ts</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>max_delay <var>integer</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set maximum muxing or demuxing delay in microseconds.
+</p>
+</dd>
+<dt> ‘<samp>fpsprobesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of frames used to probe fps.
+</p>
+</dd>
+<dt> ‘<samp>audio_preload <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds by which audio packets should be interleaved earlier.
+</p>
+</dd>
+<dt> ‘<samp>chunk_duration <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>chunk_size <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set size in bytes for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>err_detect, f_err_detect <var>flags</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set error detection flags. <code>f_err_detect</code> is deprecated and
+should be used only via the <code>ffmpeg</code> tool.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>Verify embedded CRCs.
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>Detect bitstream specification deviations.
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>Detect improper bitstream length.
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>Abort decoding on minor error detection.
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>Consider things that violate the spec and have not been seen in the
+wild as errors.
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>Consider all spec non compliancies as errors.
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>Consider things that a sane encoder should not do as an error.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_wallclock_as_timestamps <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Use wallclock as timestamps.
+</p>
+</dd>
+<dt> ‘<samp>avoid_negative_ts <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>make_non_negative</samp>’</dt>
+<dd><p>Shift timestamps to make them non-negative.
+Also note that this affects only leading negative timestamps, and not
+non-monotonic negative timestamps.
+</p></dd>
+<dt> ‘<samp>make_zero</samp>’</dt>
+<dd><p>Shift timestamps so that the first timestamp is 0.
+</p></dd>
+<dt> ‘<samp>auto (default)</samp>’</dt>
+<dd><p>Enables shifting when required by the target format.
+</p></dd>
+<dt> ‘<samp>disabled</samp>’</dt>
+<dd><p>Disables shifting of timestamp.
+</p></dd>
+</dl>
+
+<p>When shifting is enabled, all output timestamps are shifted by the
+same amount. Audio, video, and subtitles desynching and relative
+timestamp differences are preserved compared to how they would have
+been without shifting.
+</p>
+</dd>
+<dt> ‘<samp>skip_initial_bytes <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of bytes to skip before reading header and frames if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>correct_ts_overflow <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Correct single timestamp overflows if set to 1. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>flush_packets <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Flush the underlying I/O stream after each packet. Default 1 enables it, and
+has the effect of reducing the latency; 0 disables it and may slightly
+increase performance in some cases.
+</p>
+</dd>
+<dt> ‘<samp>output_ts_offset <var>offset</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the output time offset.
+</p>
+<p><var>offset</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#time-duration-syntax">(ffmpeg-utils)time duration syntax</a>.
+</p>
+<p>The offset is added by the muxer to the output timestamps.
+</p>
+<p>Specifying a positive offset means that the corresponding streams are
+delayed bt the time duration specified in <var>offset</var>. Default value
+is <code>0</code> (meaning that no offset is applied).
+</p></dd>
+</dl>
+
+
+<p><a name="Format-stream-specifiers"></a>
+</p><a name="Format-stream-specifiers-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Format-stream-specifiers-1">20.1 Format stream specifiers</a></h2>
+
+<p>Format stream specifiers allow selection of one or more streams that
+match specific properties.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index.
+</p>
+</dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio,
+’s’ for subtitle, ’d’ for data, and ’t’ for attachments. If
+<var>stream_index</var> is given, then it matches the stream number
+<var>stream_index</var> of this type. Otherwise, it matches all streams of
+this type.
+</p>
+</dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number
+<var>stream_index</var> in the program with the id
+<var>program_id</var>. Otherwise, it matches all streams in the program.
+</p>
+</dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<p>The exact semantics of stream specifiers is defined by the
+<code>avformat_match_stream_specifier()</code> function declared in the
+‘<tt>libavformat/avformat.h</tt>’ header.
+</p>
+<a name="Demuxers"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Demuxers">21. Demuxers</a></h1>
+
+<p>Demuxers are configured elements in FFmpeg that can read the
+multimedia streams from a particular type of file.
+</p>
+<p>When you configure your FFmpeg build, all the supported demuxers
+are enabled by default. You can list all available ones using the
+configure option <code>--list-demuxers</code>.
+</p>
+<p>You can disable all the demuxers using the configure option
+<code>--disable-demuxers</code>, and selectively enable a single demuxer with
+the option <code>--enable-demuxer=<var>DEMUXER</var></code>, or disable it
+with the option <code>--disable-demuxer=<var>DEMUXER</var></code>.
+</p>
+<p>The option <code>-formats</code> of the ff* tools will display the list of
+enabled demuxers.
+</p>
+<p>The description of some of the currently available demuxers follows.
+</p>
+<a name="applehttp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-applehttp">21.1 applehttp</a></h2>
+
+<p>Apple HTTP Live Streaming demuxer.
+</p>
+<p>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".
+</p>
+<a name="asf"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-asf">21.2 asf</a></h2>
+
+<p>Advanced Systems Format demuxer.
+</p>
+<p>This demuxer is used to demux ASF files and MMS network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-no_resync_search <var>bool</var></samp>’</dt>
+<dd><p>Do not try to resynchronize by looking for a certain optional start code.
+</p></dd>
+</dl>
+
+<p><a name="concat"></a>
+</p><a name="concat-3"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-concat-3">21.3 concat</a></h2>
+
+<p>Virtual concatenation script demuxer.
+</p>
+<p>This demuxer reads a list of files and other directives from a text file and
+demuxes them one after the other, as if all their packet had been muxed
+together.
+</p>
+<p>The timestamps in the files are adjusted so that the first file starts at 0
+and each next file starts where the previous one finishes. Note that it is
+done globally and may cause gaps if all streams do not have exactly the same
+length.
+</p>
+<p>All files must have the same streams (same codecs, same time base, etc.).
+</p>
+<p>The duration of each file is used to adjust the timestamps of the next file:
+if the duration is incorrect (because it was computed using the bit-rate or
+because the file is truncated, for example), it can cause artifacts. The
+<code>duration</code> directive can be used to override the duration stored in
+each file.
+</p>
+<a name="Syntax"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Syntax">21.3.1 Syntax</a></h3>
+
+<p>The script is a text file in extended-ASCII, with one directive per line.
+Empty lines, leading spaces and lines starting with ’#’ are ignored. The
+following directive is recognized:
+</p>
+<dl compact="compact">
+<dt> ‘<samp><code>file <var>path</var></code></samp>’</dt>
+<dd><p>Path to a file to read; special characters and spaces must be escaped with
+backslash or single quotes.
+</p>
+<p>All subsequent directives apply to that file.
+</p>
+</dd>
+<dt> ‘<samp><code>ffconcat version 1.0</code></samp>’</dt>
+<dd><p>Identify the script type and version. It also sets the ‘<samp>safe</samp>’ option
+to 1 if it was to its default -1.
+</p>
+<p>To make FFmpeg recognize the format automatically, this directive must
+appears exactly as is (no extra space or byte-order-mark) on the very first
+line of the script.
+</p>
+</dd>
+<dt> ‘<samp><code>duration <var>dur</var></code></samp>’</dt>
+<dd><p>Duration of the file. This information can be specified from the file;
+specifying it here may be more efficient or help if the information from the
+file is not available or accurate.
+</p>
+<p>If the duration is set for all files, then it is possible to seek in the
+whole concatenated video.
+</p>
+</dd>
+</dl>
+
+<a name="Options-15"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-15">21.3.2 Options</a></h3>
+
+<p>This demuxer accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>safe</samp>’</dt>
+<dd><p>If set to 1, reject unsafe file paths. A file path is considered safe if it
+does not contain a protocol specification and is relative and all components
+only contain characters from the portable character set (letters, digits,
+period, underscore and hyphen) and have no period at the beginning of a
+component.
+</p>
+<p>If set to 0, any file name is accepted.
+</p>
+<p>The default is -1, it is equivalent to 1 if the format was automatically
+probed and 0 otherwise.
+</p>
+</dd>
+</dl>
+
+<a name="flv"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-flv">21.4 flv</a></h2>
+
+<p>Adobe Flash Video Format demuxer.
+</p>
+<p>This demuxer is used to demux FLV files and RTMP network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-flv_metadata <var>bool</var></samp>’</dt>
+<dd><p>Allocate the streams according to the onMetaData array content.
+</p></dd>
+</dl>
+
+<a name="libgme"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libgme">21.5 libgme</a></h2>
+
+<p>The Game Music Emu library is a collection of video game music file emulators.
+</p>
+<p>See <a href="http://code.google.com/p/game-music-emu/">http://code.google.com/p/game-music-emu/</a> for more information.
+</p>
+<p>Some files have multiple tracks. The demuxer will pick the first track by
+default. The ‘<samp>track_index</samp>’ option can be used to select a different
+track. Track indexes start at 0. The demuxer exports the number of tracks as
+<var>tracks</var> meta data entry.
+</p>
+<p>For very large files, the ‘<samp>max_size</samp>’ option may have to be adjusted.
+</p>
+<a name="libquvi"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libquvi">21.6 libquvi</a></h2>
+
+<p>Play media from Internet services using the quvi project.
+</p>
+<p>The demuxer accepts a ‘<samp>format</samp>’ option to request a specific quality. It
+is by default set to <var>best</var>.
+</p>
+<p>See <a href="http://quvi.sourceforge.net/">http://quvi.sourceforge.net/</a> for more information.
+</p>
+<p>FFmpeg needs to be built with <code>--enable-libquvi</code> for this demuxer to be
+enabled.
+</p>
+<a name="image2-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-image2-1">21.7 image2</a></h2>
+
+<p>Image file demuxer.
+</p>
+<p>This demuxer reads from a list of image files specified by a pattern.
+The syntax and meaning of the pattern is specified by the
+option <var>pattern_type</var>.
+</p>
+<p>The pattern may contain a suffix which is used to automatically
+determine the format of the images contained in the files.
+</p>
+<p>The size, the pixel format, and the format of each image must be the
+same for all the files in the sequence.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate for the video stream. It defaults to 25.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>If set to 1, loop over the input. Default value is 0.
+</p></dd>
+<dt> ‘<samp>pattern_type</samp>’</dt>
+<dd><p>Select the pattern type used to interpret the provided filename.
+</p>
+<p><var>pattern_type</var> accepts one of the following values.
+</p><dl compact="compact">
+<dt> ‘<samp>sequence</samp>’</dt>
+<dd><p>Select a sequence pattern type, used to specify a sequence of files
+indexed by sequential numbers.
+</p>
+<p>A sequence pattern may contain the string "%d" or "%0<var>N</var>d", which
+specifies the position of the characters representing a sequential
+number in each filename matched by the pattern. If the form
+"%d0<var>N</var>d" is used, the string representing the number in each
+filename is 0-padded and <var>N</var> is the total number of 0-padded
+digits representing the number. The literal character ’%’ can be
+specified in the pattern with the string "%%".
+</p>
+<p>If the sequence pattern contains "%d" or "%0<var>N</var>d", the first filename of
+the file list specified by the pattern must contain a number
+inclusively contained between <var>start_number</var> and
+<var>start_number</var>+<var>start_number_range</var>-1, and all the following
+numbers must be sequential.
+</p>
+<p>For example the pattern "img-%03d.bmp" will match a sequence of
+filenames of the form ‘<tt>img-001.bmp</tt>’, ‘<tt>img-002.bmp</tt>’, ...,
+‘<tt>img-010.bmp</tt>’, etc.; the pattern "i%%m%%g-%d.jpg" will match a
+sequence of filenames of the form ‘<tt>i%m%g-1.jpg</tt>’,
+‘<tt>i%m%g-2.jpg</tt>’, ..., ‘<tt>i%m%g-10.jpg</tt>’, etc.
+</p>
+<p>Note that the pattern must not necessarily contain "%d" or
+"%0<var>N</var>d", for example to convert a single image file
+‘<tt>img.jpeg</tt>’ you can employ the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i img.jpeg img.png
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>glob</samp>’</dt>
+<dd><p>Select a glob wildcard pattern type.
+</p>
+<p>The pattern is interpreted like a <code>glob()</code> pattern. This is only
+selectable if libavformat was compiled with globbing support.
+</p>
+</dd>
+<dt> ‘<samp>glob_sequence <em>(deprecated, will be removed)</em></samp>’</dt>
+<dd><p>Select a mixed glob wildcard/sequence pattern.
+</p>
+<p>If your version of libavformat was compiled with globbing support, and
+the provided pattern contains at least one glob meta character among
+<code>%*?[]{}</code> that is preceded by an unescaped "%", the pattern is
+interpreted like a <code>glob()</code> pattern, otherwise it is interpreted
+like a sequence pattern.
+</p>
+<p>All glob special characters <code>%*?[]{}</code> must be prefixed
+with "%". To escape a literal "%" you shall use "%%".
+</p>
+<p>For example the pattern <code>foo-%*.jpeg</code> will match all the
+filenames prefixed by "foo-" and terminating with ".jpeg", and
+<code>foo-%?%?%?.jpeg</code> will match all the filenames prefixed with
+"foo-", followed by a sequence of three characters, and terminating
+with ".jpeg".
+</p>
+<p>This pattern type is deprecated in favor of <var>glob</var> and
+<var>sequence</var>.
+</p></dd>
+</dl>
+
+<p>Default value is <var>glob_sequence</var>.
+</p></dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the pixel format of the images to read. If not specified the pixel
+format is guessed from the first image file in the sequence.
+</p></dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>Set the index of the file matched by the image file pattern to start
+to read from. Default value is 0.
+</p></dd>
+<dt> ‘<samp>start_number_range</samp>’</dt>
+<dd><p>Set the index interval range to check when looking for the first image
+file in the sequence, starting from <var>start_number</var>. Default value
+is 5.
+</p></dd>
+<dt> ‘<samp>ts_from_file</samp>’</dt>
+<dd><p>If set to 1, will set frame timestamp to modification time of image file. Note
+that monotonity of timestamps is not provided: images go in the same order as
+without this option. Default value is 0.
+</p></dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size of the images to read. If not specified the video
+size is guessed from the first image file in the sequence.
+</p></dd>
+</dl>
+
+<a name="Examples-13"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-13">21.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for creating a video from the images in the file
+sequence ‘<tt>img-001.jpeg</tt>’, ‘<tt>img-002.jpeg</tt>’, ..., assuming an
+input frame rate of 10 frames per second:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+As above, but start by reading from a file with index 100 in the sequence:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+Read images matching the "*.png" glob pattern , that is all the files
+terminating with the ".png" suffix:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mpegts"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mpegts">21.8 mpegts</a></h2>
+
+<p>MPEG-2 transport stream demuxer.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fix_teletext_pts</samp>’</dt>
+<dd><p>Overrides teletext packet PTS and DTS values with the timestamps calculated
+from the PCR of the first program which the teletext stream is part of and is
+not discarded. Default value is 1, set this option to 0 if you want your
+teletext packet PTS and DTS values untouched.
+</p></dd>
+</dl>
+
+<a name="rawvideo-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rawvideo-1">21.9 rawvideo</a></h2>
+
+<p>Raw video demuxer.
+</p>
+<p>This demuxer allows one to read raw video data. Since there is no header
+specifying the assumed video parameters, the user must specify them
+in order to be able to decode the data correctly.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set input video frame rate. Default value is 25.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the input video pixel format. Default value is <code>yuv420p</code>.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the input video size. This value must be specified explicitly.
+</p></dd>
+</dl>
+
+<p>For example to read a rawvideo file ‘<tt>input.raw</tt>’ with
+<code>ffplay</code>, assuming a pixel format of <code>rgb24</code>, a video
+size of <code>320x240</code>, and a frame rate of 10 images per second, use
+the command:
+</p><table><tr><td> </td><td><pre class="example">ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
+</pre></td></tr></table>
+
+<a name="sbg"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sbg">21.10 sbg</a></h2>
+
+<p>SBaGen script demuxer.
+</p>
+<p>This demuxer reads the script language used by SBaGen
+<a href="http://uazu.net/sbagen/">http://uazu.net/sbagen/</a> to generate binaural beats sessions. A SBG
+script looks like that:
+</p><table><tr><td> </td><td><pre class="example">-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
+</pre></td></tr></table>
+
+<p>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 <var>NOW</var> 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.
+</p>
+<a name="tedcaptions"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-tedcaptions">21.11 tedcaptions</a></h2>
+
+<p>JSON captions used for <a href="http://www.ted.com/">TED Talks</a>.
+</p>
+<p>TED does not provide links to the captions, but they can be guessed from the
+page. The file ‘<tt>tools/bookmarklets.html</tt>’ from the FFmpeg source tree
+contains a bookmarklet to expose them.
+</p>
+<p>This demuxer accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Set the start time of the TED talk, in milliseconds. The default is 15000
+(15s). It is used to sync the captions with the downloadable videos, because
+they include a 15s intro.
+</p></dd>
+</dl>
+
+<p>Example: convert the captions to a format most players understand:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
+</pre></td></tr></table>
+
+<a name="Muxers"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Muxers">22. Muxers</a></h1>
+
+<p>Muxers are configured elements in FFmpeg which allow writing
+multimedia streams to a particular type of file.
+</p>
+<p>When you configure your FFmpeg build, all the supported muxers
+are enabled by default. You can list all available muxers using the
+configure option <code>--list-muxers</code>.
+</p>
+<p>You can disable all the muxers with the configure option
+<code>--disable-muxers</code> and selectively enable / disable single muxers
+with the options <code>--enable-muxer=<var>MUXER</var></code> /
+<code>--disable-muxer=<var>MUXER</var></code>.
+</p>
+<p>The option <code>-formats</code> of the ff* tools will display the list of
+enabled muxers.
+</p>
+<p>A description of some of the currently available muxers follows.
+</p>
+<p><a name="aiff"></a>
+</p><a name="aiff-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aiff-1">22.1 aiff</a></h2>
+
+<p>Audio Interchange File Format muxer.
+</p>
+<a name="Options-23"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-23">22.1.1 Options</a></h3>
+
+<p>It accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>write_id3v2</samp>’</dt>
+<dd><p>Enable ID3v2 tags writing when set to 1. Default is 0 (disabled).
+</p>
+</dd>
+<dt> ‘<samp>id3v2_version</samp>’</dt>
+<dd><p>Select ID3v2 version to write. Currently only version 3 and 4 (aka.
+ID3v2.3 and ID3v2.4) are supported. The default is version 4.
+</p>
+</dd>
+</dl>
+
+<p><a name="crc"></a>
+</p><a name="crc-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-crc-1">22.2 crc</a></h2>
+
+<p>CRC (Cyclic Redundancy Check) testing format.
+</p>
+<p>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.
+</p>
+<p>The output of the muxer consists of a single line of the form:
+CRC=0x<var>CRC</var>, where <var>CRC</var> is a hexadecimal number 0-padded to
+8 digits containing the CRC for all the decoded input frames.
+</p>
+<p>See also the <a href="#framecrc">framecrc</a> muxer.
+</p>
+<a name="Examples-16"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-16">22.2.1 Examples</a></h3>
+
+<p>For example to compute the CRC of the input, and store it in the file
+‘<tt>out.crc</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f crc out.crc
+</pre></td></tr></table>
+
+<p>You can print the CRC to stdout with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f crc -
+</pre></td></tr></table>
+
+<p>You can select the output format of each frame with <code>ffmpeg</code> 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:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
+</pre></td></tr></table>
+
+<p><a name="framecrc"></a>
+</p><a name="framecrc-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-framecrc-1">22.3 framecrc</a></h2>
+
+<p>Per-packet CRC (Cyclic Redundancy Check) testing format.
+</p>
+<p>This muxer computes and prints the Adler-32 CRC for each audio
+and video packet. By default audio frames are converted to signed
+16-bit raw audio and video frames to raw video before computing the
+CRC.
+</p>
+<p>The output of the muxer consists of a line for each audio and video
+packet of the form:
+</p><table><tr><td> </td><td><pre class="example"><var>stream_index</var>, <var>packet_dts</var>, <var>packet_pts</var>, <var>packet_duration</var>, <var>packet_size</var>, 0x<var>CRC</var>
+</pre></td></tr></table>
+
+<p><var>CRC</var> is a hexadecimal number 0-padded to 8 digits containing the
+CRC of the packet.
+</p>
+<a name="Examples-99"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-99">22.3.1 Examples</a></h3>
+
+<p>For example to compute the CRC of the audio and video frames in
+‘<tt>INPUT</tt>’, converted to raw audio and video packets, and store it
+in the file ‘<tt>out.crc</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framecrc out.crc
+</pre></td></tr></table>
+
+<p>To print the information to stdout, use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framecrc -
+</pre></td></tr></table>
+
+<p>With <code>ffmpeg</code>, you can select the output format to which the
+audio and video frames are encoded before computing the CRC for each
+packet by specifying the audio and video codec. 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:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
+</pre></td></tr></table>
+
+<p>See also the <a href="#crc">crc</a> muxer.
+</p>
+<p><a name="framemd5"></a>
+</p><a name="framemd5-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-framemd5-1">22.4 framemd5</a></h2>
+
+<p>Per-packet MD5 testing format.
+</p>
+<p>This muxer computes and prints the MD5 hash for each audio
+and video packet. By default audio frames are converted to signed
+16-bit raw audio and video frames to raw video before computing the
+hash.
+</p>
+<p>The output of the muxer consists of a line for each audio and video
+packet of the form:
+</p><table><tr><td> </td><td><pre class="example"><var>stream_index</var>, <var>packet_dts</var>, <var>packet_pts</var>, <var>packet_duration</var>, <var>packet_size</var>, <var>MD5</var>
+</pre></td></tr></table>
+
+<p><var>MD5</var> is a hexadecimal number representing the computed MD5 hash
+for the packet.
+</p>
+<a name="Examples-73"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-73">22.4.1 Examples</a></h3>
+
+<p>For example to compute the MD5 of the audio and video frames in
+‘<tt>INPUT</tt>’, converted to raw audio and video packets, and store it
+in the file ‘<tt>out.md5</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framemd5 out.md5
+</pre></td></tr></table>
+
+<p>To print the information to stdout, use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framemd5 -
+</pre></td></tr></table>
+
+<p>See also the <a href="#md5">md5</a> muxer.
+</p>
+<p><a name="gif"></a>
+</p><a name="gif-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-gif-1">22.5 gif</a></h2>
+
+<p>Animated GIF muxer.
+</p>
+<p>It accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Set the number of times to loop the output. Use <code>-1</code> for no loop, <code>0</code>
+for looping indefinitely (default).
+</p>
+</dd>
+<dt> ‘<samp>final_delay</samp>’</dt>
+<dd><p>Force the delay (expressed in centiseconds) after the last frame. Each frame
+ends with a delay until the next frame. The default is <code>-1</code>, which is a
+special value to tell the muxer to re-use the previous delay. In case of a
+loop, you might want to customize this value to mark a pause for instance.
+</p></dd>
+</dl>
+
+<p>For example, to encode a gif looping 10 times, with a 5 seconds delay between
+the loops:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
+</pre></td></tr></table>
+
+<p>Note 1: if you wish to extract the frames in separate GIF files, you need to
+force the <a href="#image2">image2</a> muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
+</pre></td></tr></table>
+
+<p>Note 2: the GIF format has a very small time base: the delay between two frames
+can not be smaller than one centi second.
+</p>
+<p><a name="hls"></a>
+</p><a name="hls-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-hls-1">22.6 hls</a></h2>
+
+<p>Apple HTTP Live Streaming muxer that segments MPEG-TS according to
+the HTTP Live Streaming (HLS) specification.
+</p>
+<p>It creates a playlist file and numbered segment files. The output
+filename specifies the playlist filename; the segment filenames
+receive the same basename as the playlist, a sequential number and
+a .ts extension.
+</p>
+<p>For example, to convert an input file with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.nut out.m3u8
+</pre></td></tr></table>
+
+<p>See also the <a href="#segment">segment</a> muxer, which provides a more generic and
+flexible implementation of a segmenter, and can be used to perform HLS
+segmentation.
+</p>
+<a name="Options-10"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-10">22.6.1 Options</a></h3>
+
+<p>This muxer supports the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hls_time <var>seconds</var></samp>’</dt>
+<dd><p>Set the segment length in seconds. Default value is 2.
+</p>
+</dd>
+<dt> ‘<samp>hls_list_size <var>size</var></samp>’</dt>
+<dd><p>Set the maximum number of playlist entries. If set to 0 the list file
+will contain all the segments. Default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>hls_wrap <var>wrap</var></samp>’</dt>
+<dd><p>Set the number after which the segment filename number (the number
+specified in each segment file) wraps. If set to 0 the number will be
+never wrapped. Default value is 0.
+</p>
+<p>This option is useful to avoid to fill the disk with many segment
+files, and limits the maximum number of segment files written to disk
+to <var>wrap</var>.
+</p>
+</dd>
+<dt> ‘<samp>start_number <var>number</var></samp>’</dt>
+<dd><p>Start the playlist sequence number from <var>number</var>. Default value is
+0.
+</p>
+<p>Note that the playlist sequence number must be unique for each segment
+and it is not to be confused with the segment filename sequence number
+which can be cyclic, for example if the ‘<samp>wrap</samp>’ option is
+specified.
+</p></dd>
+</dl>
+
+<p><a name="ico"></a>
+</p><a name="ico-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ico-1">22.7 ico</a></h2>
+
+<p>ICO file muxer.
+</p>
+<p>Microsoft’s icon file format (ICO) has some strict limitations that should be noted:
+</p>
+<ul>
+<li>
+Size cannot exceed 256 pixels in any dimension
+
+</li><li>
+Only BMP and PNG images can be stored
+
+</li><li>
+If a BMP image is used, it must be one of the following pixel formats:
+<table><tr><td> </td><td><pre class="example">BMP Bit Depth FFmpeg Pixel Format
+1bit pal8
+4bit pal8
+8bit pal8
+16bit rgb555le
+24bit bgr24
+32bit bgra
+</pre></td></tr></table>
+
+</li><li>
+If a BMP image is used, it must use the BITMAPINFOHEADER DIB header
+
+</li><li>
+If a PNG image is used, it must use the rgba pixel format
+</li></ul>
+
+<p><a name="image2"></a>
+</p><a name="image2-2"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-image2-2">22.8 image2</a></h2>
+
+<p>Image file muxer.
+</p>
+<p>The image file muxer writes video frames to image files.
+</p>
+<p>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 "%0<var>N</var>d", this string
+specifies the position of the characters representing a numbering in
+the filenames. If the form "%0<var>N</var>d" is used, the string
+representing the number in each filename is 0-padded to <var>N</var>
+digits. The literal character ’%’ can be specified in the pattern with
+the string "%%".
+</p>
+<p>If the pattern contains "%d" or "%0<var>N</var>d", the first filename of
+the file list specified will contain the number 1, all the following
+numbers will be sequential.
+</p>
+<p>The pattern may contain a suffix which is used to automatically
+determine the format of the image files to write.
+</p>
+<p>For example the pattern "img-%03d.bmp" will specify a sequence of
+filenames of the form ‘<tt>img-001.bmp</tt>’, ‘<tt>img-002.bmp</tt>’, ...,
+‘<tt>img-010.bmp</tt>’, etc.
+The pattern "img%%-%d.jpg" will specify a sequence of filenames of the
+form ‘<tt>img%-1.jpg</tt>’, ‘<tt>img%-2.jpg</tt>’, ..., ‘<tt>img%-10.jpg</tt>’,
+etc.
+</p>
+<a name="Examples-15"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-15">22.8.1 Examples</a></h3>
+
+<p>The following example shows how to use <code>ffmpeg</code> for creating a
+sequence of files ‘<tt>img-001.jpeg</tt>’, ‘<tt>img-002.jpeg</tt>’, ...,
+taking one image every second from the input video:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
+</pre></td></tr></table>
+
+<p>Note that with <code>ffmpeg</code>, if the format is not specified with the
+<code>-f</code> option and the output filename specifies an image file
+format, the image2 muxer is automatically selected, so the previous
+command can be written as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
+</pre></td></tr></table>
+
+<p>Note also that the pattern must not necessarily contain "%d" or
+"%0<var>N</var>d", for example to create a single image file
+‘<tt>img.jpeg</tt>’ from the input video you can employ the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
+</pre></td></tr></table>
+
+<p>The ‘<samp>strftime</samp>’ option allows you to expand the filename with
+date and time information. Check the documentation of
+the <code>strftime()</code> function for the syntax.
+</p>
+<p>For example to generate image files from the <code>strftime()</code>
+"%Y-%m-%d_%H-%M-%S" pattern, the following <code>ffmpeg</code> command
+can be used:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
+</pre></td></tr></table>
+
+<a name="Options-22"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-22">22.8.2 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>Start the sequence from the specified number. Default value is 1. Must
+be a non-negative number.
+</p>
+</dd>
+<dt> ‘<samp>update</samp>’</dt>
+<dd><p>If set to 1, the filename will always be interpreted as just a
+filename, not a pattern, and the corresponding file will be continuously
+overwritten with new images. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>strftime</samp>’</dt>
+<dd><p>If set to 1, expand the filename with date and time information from
+<code>strftime()</code>. Default value is 0.
+</p></dd>
+</dl>
+
+<p>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.
+</p>
+<a name="matroska"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-matroska">22.9 matroska</a></h2>
+
+<p>Matroska container muxer.
+</p>
+<p>This muxer implements the matroska and webm container specs.
+</p>
+<a name="Metadata-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Metadata-1">22.9.1 Metadata</a></h3>
+
+<p>The recognized metadata settings in this muxer are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>title</samp>’</dt>
+<dd><p>Set title name provided to a single track.
+</p>
+</dd>
+<dt> ‘<samp>language</samp>’</dt>
+<dd><p>Specify the language of the track in the Matroska languages form.
+</p>
+<p>The language can be either the 3 letters bibliographic ISO-639-2 (ISO
+639-2/B) form (like "fre" for French), or a language code mixed with a
+country code for specialities in languages (like "fre-ca" for Canadian
+French).
+</p>
+</dd>
+<dt> ‘<samp>stereo_mode</samp>’</dt>
+<dd><p>Set stereo 3D video layout of two views in a single video track.
+</p>
+<p>The following values are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>video is not stereo
+</p></dd>
+<dt> ‘<samp>left_right</samp>’</dt>
+<dd><p>Both views are arranged side by side, Left-eye view is on the left
+</p></dd>
+<dt> ‘<samp>bottom_top</samp>’</dt>
+<dd><p>Both views are arranged in top-bottom orientation, Left-eye view is at bottom
+</p></dd>
+<dt> ‘<samp>top_bottom</samp>’</dt>
+<dd><p>Both views are arranged in top-bottom orientation, Left-eye view is on top
+</p></dd>
+<dt> ‘<samp>checkerboard_rl</samp>’</dt>
+<dd><p>Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first
+</p></dd>
+<dt> ‘<samp>checkerboard_lr</samp>’</dt>
+<dd><p>Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first
+</p></dd>
+<dt> ‘<samp>row_interleaved_rl</samp>’</dt>
+<dd><p>Each view is constituted by a row based interleaving, Right-eye view is first row
+</p></dd>
+<dt> ‘<samp>row_interleaved_lr</samp>’</dt>
+<dd><p>Each view is constituted by a row based interleaving, Left-eye view is first row
+</p></dd>
+<dt> ‘<samp>col_interleaved_rl</samp>’</dt>
+<dd><p>Both views are arranged in a column based interleaving manner, Right-eye view is first column
+</p></dd>
+<dt> ‘<samp>col_interleaved_lr</samp>’</dt>
+<dd><p>Both views are arranged in a column based interleaving manner, Left-eye view is first column
+</p></dd>
+<dt> ‘<samp>anaglyph_cyan_red</samp>’</dt>
+<dd><p>All frames are in anaglyph format viewable through red-cyan filters
+</p></dd>
+<dt> ‘<samp>right_left</samp>’</dt>
+<dd><p>Both views are arranged side by side, Right-eye view is on the left
+</p></dd>
+<dt> ‘<samp>anaglyph_green_magenta</samp>’</dt>
+<dd><p>All frames are in anaglyph format viewable through green-magenta filters
+</p></dd>
+<dt> ‘<samp>block_lr</samp>’</dt>
+<dd><p>Both eyes laced in one Block, Left-eye view is first
+</p></dd>
+<dt> ‘<samp>block_rl</samp>’</dt>
+<dd><p>Both eyes laced in one Block, Right-eye view is first
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>For example a 3D WebM clip can be created using the following command line:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
+</pre></td></tr></table>
+
+<a name="Options-30"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-30">22.9.2 Options</a></h3>
+
+<p>This muxer supports the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>reserve_index_space</samp>’</dt>
+<dd><p>By default, this muxer writes the index for seeking (called cues in Matroska
+terms) at the end of the file, because it cannot know in advance how much space
+to leave for the index at the beginning of the file. However for some use cases
+– e.g. streaming where seeking is possible but slow – it is useful to put the
+index at the beginning of the file.
+</p>
+<p>If this option is set to a non-zero value, the muxer will reserve a given amount
+of space in the file header and then try to write the cues there when the muxing
+finishes. If the available space does not suffice, muxing will fail. A safe size
+for most use cases should be about 50kB per hour of video.
+</p>
+<p>Note that cues are only written if the output is seekable and this option will
+have no effect if it is not.
+</p></dd>
+</dl>
+
+<p><a name="md5"></a>
+</p><a name="md5-2"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-md5-2">22.10 md5</a></h2>
+
+<p>MD5 testing format.
+</p>
+<p>This muxer computes and prints the MD5 hash 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
+hash.
+</p>
+<p>The output of the muxer consists of a single line of the form:
+MD5=<var>MD5</var>, where <var>MD5</var> is a hexadecimal number representing
+the computed MD5 hash.
+</p>
+<p>For example to compute the MD5 hash of the input converted to raw
+audio and video, and store it in the file ‘<tt>out.md5</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f md5 out.md5
+</pre></td></tr></table>
+
+<p>You can print the MD5 to stdout with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f md5 -
+</pre></td></tr></table>
+
+<p>See also the <a href="#framemd5">framemd5</a> muxer.
+</p>
+<a name="mov_002c-mp4_002c-ismv"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mov_002c-mp4_002c-ismv">22.11 mov, mp4, ismv</a></h2>
+
+<p>MOV/MP4/ISMV (Smooth Streaming) muxer.
+</p>
+<p>The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4
+file has all the metadata about all packets stored in one location
+(written at the end of the file, it can be moved to the start for
+better playback by adding <var>faststart</var> to the <var>movflags</var>, or
+using the <code>qt-faststart</code> tool). A fragmented
+file consists of a number of fragments, where packets and metadata
+about these packets are stored together. Writing a fragmented
+file has the advantage that the file is decodable even if the
+writing is interrupted (while a normal MOV/MP4 is undecodable if
+it is not properly finished), and it requires less memory when writing
+very long files (since writing normal MOV/MP4 files stores info about
+every single packet in memory until the file is closed). The downside
+is that it is less compatible with other applications.
+</p>
+<a name="Options-16"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-16">22.11.1 Options</a></h3>
+
+<p>Fragmentation is enabled by setting one of the AVOptions that define
+how to cut the file into fragments:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-moov_size <var>bytes</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-movflags frag_keyframe</samp>’</dt>
+<dd><p>Start a new fragment at each video keyframe.
+</p></dd>
+<dt> ‘<samp>-frag_duration <var>duration</var></samp>’</dt>
+<dd><p>Create fragments that are <var>duration</var> microseconds long.
+</p></dd>
+<dt> ‘<samp>-frag_size <var>size</var></samp>’</dt>
+<dd><p>Create fragments that contain up to <var>size</var> bytes of payload data.
+</p></dd>
+<dt> ‘<samp>-movflags frag_custom</samp>’</dt>
+<dd><p>Allow the caller to manually choose when to cut fragments, by
+calling <code>av_write_frame(ctx, NULL)</code> to write a fragment with
+the packets written so far. (This is only useful with other
+applications integrating libavformat, not from <code>ffmpeg</code>.)
+</p></dd>
+<dt> ‘<samp>-min_frag_duration <var>duration</var></samp>’</dt>
+<dd><p>Don’t create fragments that are shorter than <var>duration</var> microseconds long.
+</p></dd>
+</dl>
+
+<p>If more than one condition is specified, fragments are cut when
+one of the specified conditions is fulfilled. The exception to this is
+<code>-min_frag_duration</code>, which has to be fulfilled for any of the other
+conditions to apply.
+</p>
+<p>Additionally, the way the output file is written can be adjusted
+through a few other options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-movflags empty_moov</samp>’</dt>
+<dd><p>Write an initial moov atom directly at the start of the file, without
+describing any samples in it. Generally, an mdat/moov pair is written
+at the start of the file, as a normal MOV/MP4 file, containing only
+a short portion of the file. With this option set, there is no initial
+mdat atom, and the moov atom only describes the tracks but has
+a zero duration.
+</p>
+<p>Files written with this option set do not work in QuickTime.
+This option is implicitly set when writing ismv (Smooth Streaming) files.
+</p></dd>
+<dt> ‘<samp>-movflags separate_moof</samp>’</dt>
+<dd><p>Write a separate moof (movie fragment) atom for each track. Normally,
+packets for all tracks are written in a moof atom (which is slightly
+more efficient), but with this option set, the muxer writes one moof/mdat
+pair for each track, making it easier to separate tracks.
+</p>
+<p>This option is implicitly set when writing ismv (Smooth Streaming) files.
+</p></dd>
+<dt> ‘<samp>-movflags faststart</samp>’</dt>
+<dd><p>Run a second pass moving the index (moov atom) to the beginning of the file.
+This operation can take a while, and will not work in various situations such
+as fragmented output, thus it is not enabled by default.
+</p></dd>
+<dt> ‘<samp>-movflags rtphint</samp>’</dt>
+<dd><p>Add RTP hinting tracks to the output file.
+</p></dd>
+</dl>
+
+<a name="Example-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Example-1">22.11.2 Example</a></h3>
+
+<p>Smooth Streaming content can be pushed in real time to a publishing
+point on IIS with this muxer. Example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re <var><normal input/transcoding options></var> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
+</pre></td></tr></table>
+
+<a name="mp3"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mp3">22.12 mp3</a></h2>
+
+<p>The MP3 muxer writes a raw MP3 stream with an ID3v2 header at the beginning and
+optionally an ID3v1 tag at the end. ID3v2.3 and ID3v2.4 are supported, the
+<code>id3v2_version</code> option controls which one is used. Setting
+<code>id3v2_version</code> to 0 will disable the ID3v2 header completely. The legacy
+ID3v1 tag is not written by default, but may be enabled with the
+<code>write_id3v1</code> option.
+</p>
+<p>The muxer may also write a Xing frame at the beginning, which contains the
+number of frames in the file. It is useful for computing duration of VBR files.
+The Xing frame is written if the output stream is seekable and if the
+<code>write_xing</code> option is set to 1 (the default).
+</p>
+<p>The muxer supports writing ID3v2 attached pictures (APIC frames). The pictures
+are supplied to the muxer in form of a video stream with a single packet. There
+can be any number of those streams, each will correspond to a single APIC frame.
+The stream metadata tags <var>title</var> and <var>comment</var> map to APIC
+<var>description</var> and <var>picture type</var> respectively. See
+<a href="http://id3.org/id3v2.4.0-frames">http://id3.org/id3v2.4.0-frames</a> for allowed picture types.
+</p>
+<p>Note that the APIC frames must be written at the beginning, so the muxer will
+buffer the audio frames until it gets all the pictures. It is therefore advised
+to provide the pictures as soon as possible to avoid excessive buffering.
+</p>
+<p>Examples:
+</p>
+<p>Write an mp3 with an ID3v2.3 header and an ID3v1 footer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
+</pre></td></tr></table>
+
+<p>To attach a picture to an mp3 file select both the audio and the picture stream
+with <code>map</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
+-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
+</pre></td></tr></table>
+
+<p>Write a "clean" MP3 without any extra features:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
+</pre></td></tr></table>
+
+<a name="mpegts-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mpegts-1">22.13 mpegts</a></h2>
+
+<p>MPEG transport stream muxer.
+</p>
+<p>This muxer implements ISO 13818-1 and part of ETSI EN 300 468.
+</p>
+<p>The recognized metadata settings in mpegts muxer are <code>service_provider</code>
+and <code>service_name</code>. If they are not set the default for
+<code>service_provider</code> is "FFmpeg" and the default for
+<code>service_name</code> is "Service01".
+</p>
+<a name="Options-7"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-7">22.13.1 Options</a></h3>
+
+<p>The muxer options are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-mpegts_original_network_id <var>number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-mpegts_transport_stream_id <var>number</var></samp>’</dt>
+<dd><p>Set the transport_stream_id (default 0x0001). This identifies a
+transponder in DVB.
+</p></dd>
+<dt> ‘<samp>-mpegts_service_id <var>number</var></samp>’</dt>
+<dd><p>Set the service_id (default 0x0001) also known as program in DVB.
+</p></dd>
+<dt> ‘<samp>-mpegts_pmt_start_pid <var>number</var></samp>’</dt>
+<dd><p>Set the first PID for PMT (default 0x1000, max 0x1f00).
+</p></dd>
+<dt> ‘<samp>-mpegts_start_pid <var>number</var></samp>’</dt>
+<dd><p>Set the first PID for data packets (default 0x0100, max 0x0f00).
+</p></dd>
+<dt> ‘<samp>-mpegts_m2ts_mode <var>number</var></samp>’</dt>
+<dd><p>Enable m2ts mode if set to 1. Default value is -1 which disables m2ts mode.
+</p></dd>
+<dt> ‘<samp>-muxrate <var>number</var></samp>’</dt>
+<dd><p>Set muxrate.
+</p></dd>
+<dt> ‘<samp>-pes_payload_size <var>number</var></samp>’</dt>
+<dd><p>Set minimum PES packet payload in bytes.
+</p></dd>
+<dt> ‘<samp>-mpegts_flags <var>flags</var></samp>’</dt>
+<dd><p>Set flags (see below).
+</p></dd>
+<dt> ‘<samp>-mpegts_copyts <var>number</var></samp>’</dt>
+<dd><p>Preserve original timestamps, if value is set to 1. Default value is -1, which
+results in shifting timestamps so that they start from 0.
+</p></dd>
+<dt> ‘<samp>-tables_version <var>number</var></samp>’</dt>
+<dd><p>Set PAT, PMT and SDT version (default 0, valid values are from 0 to 31, inclusively).
+This option allows updating stream structure so that standard consumer may
+detect the change. To do so, reopen output AVFormatContext (in case of API
+usage) or restart ffmpeg instance, cyclically changing tables_version value:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
+ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
+...
+ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
+ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
+ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
+...
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>Option mpegts_flags may take a set of such flags:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>resend_headers</samp>’</dt>
+<dd><p>Reemit PAT/PMT before writing the next packet.
+</p></dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Use LATM packetization for AAC.
+</p></dd>
+</dl>
+
+<a name="Example"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Example">22.13.2 Example</a></h3>
+
+<table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<a name="null-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-null-1">22.14 null</a></h2>
+
+<p>Null muxer.
+</p>
+<p>This muxer does not generate any output file, it is mainly useful for
+testing or benchmarking purposes.
+</p>
+<p>For example to benchmark decoding with <code>ffmpeg</code> you can use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -benchmark -i INPUT -f null out.null
+</pre></td></tr></table>
+
+<p>Note that the above command does not read or write the ‘<tt>out.null</tt>’
+file, but specifying the output file is required by the <code>ffmpeg</code>
+syntax.
+</p>
+<p>Alternatively you can write the command as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -benchmark -i INPUT -f null -
+</pre></td></tr></table>
+
+<a name="ogg"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ogg">22.15 ogg</a></h2>
+
+<p>Ogg container muxer.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-page_duration <var>duration</var></samp>’</dt>
+<dd><p>Preferred page duration, in microseconds. The muxer will attempt to create
+pages that are approximately <var>duration</var> microseconds long. This allows the
+user to compromise between seek granularity and container overhead. The default
+is 1 second. A value of 0 will fill all segments, making pages as large as
+possible. A value of 1 will effectively use 1 packet-per-page in most
+situations, giving a small seek granularity at the cost of additional container
+overhead.
+</p></dd>
+</dl>
+
+<p><a name="segment"></a>
+</p><a name="segment_002c-stream_005fsegment_002c-ssegment"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-segment_002c-stream_005fsegment_002c-ssegment">22.16 segment, stream_segment, ssegment</a></h2>
+
+<p>Basic stream segmenter.
+</p>
+<p>This muxer outputs streams to a number of separate files of nearly
+fixed duration. Output filename pattern can be set in a fashion similar to
+<a href="#image2">image2</a>.
+</p>
+<p><code>stream_segment</code> is a variant of the muxer used to write to
+streaming output formats, i.e. which do not require global headers,
+and is recommended for outputting e.g. to MPEG transport stream segments.
+<code>ssegment</code> is a shorter alias for <code>stream_segment</code>.
+</p>
+<p>Every segment starts with a keyframe of the selected reference stream,
+which is set through the ‘<samp>reference_stream</samp>’ option.
+</p>
+<p>Note that if you want accurate splitting for a video file, you need to
+make the input key frames correspond to the exact splitting times
+expected by the segmenter, or the segment muxer will start the new
+segment with the key frame found next after the specified start
+time.
+</p>
+<p>The segment muxer works best with a single constant frame rate video.
+</p>
+<p>Optionally it can generate a list of the created segments, by setting
+the option <var>segment_list</var>. The list type is specified by the
+<var>segment_list_type</var> option. The entry filenames in the segment
+list are set by default to the basename of the corresponding segment
+files.
+</p>
+<p>See also the <a href="#hls">hls</a> muxer, which provides a more specific
+implementation for HLS segmentation.
+</p>
+<a name="Options-5"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-5">22.16.1 Options</a></h3>
+
+<p>The segment muxer supports the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>reference_stream <var>specifier</var></samp>’</dt>
+<dd><p>Set the reference stream, as specified by the string <var>specifier</var>.
+If <var>specifier</var> is set to <code>auto</code>, the reference is chosen
+automatically. Otherwise it must be a stream specifier (see the “Stream
+specifiers” chapter in the ffmpeg manual) which specifies the
+reference stream. The default value is <code>auto</code>.
+</p>
+</dd>
+<dt> ‘<samp>segment_format <var>format</var></samp>’</dt>
+<dd><p>Override the inner container format, by default it is guessed by the filename
+extension.
+</p>
+</dd>
+<dt> ‘<samp>segment_list <var>name</var></samp>’</dt>
+<dd><p>Generate also a listfile named <var>name</var>. If not specified no
+listfile is generated.
+</p>
+</dd>
+<dt> ‘<samp>segment_list_flags <var>flags</var></samp>’</dt>
+<dd><p>Set flags affecting the segment list generation.
+</p>
+<p>It currently supports the following flags:
+</p><dl compact="compact">
+<dt> ‘<samp>cache</samp>’</dt>
+<dd><p>Allow caching (only affects M3U8 list files).
+</p>
+</dd>
+<dt> ‘<samp>live</samp>’</dt>
+<dd><p>Allow live-friendly file generation.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>segment_list_size <var>size</var></samp>’</dt>
+<dd><p>Update the list file so that it contains at most the last <var>size</var>
+segments. If 0 the list file will contain all the segments. Default
+value is 0.
+</p>
+</dd>
+<dt> ‘<samp>segment_list_entry_prefix <var>prefix</var></samp>’</dt>
+<dd><p>Set <var>prefix</var> to prepend to the name of each entry filename. By
+default no prefix is applied.
+</p>
+</dd>
+<dt> ‘<samp>segment_list_type <var>type</var></samp>’</dt>
+<dd><p>Specify the format for the segment list file.
+</p>
+<p>The following values are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>flat</samp>’</dt>
+<dd><p>Generate a flat list for the created segments, one segment per line.
+</p>
+</dd>
+<dt> ‘<samp>csv, ext</samp>’</dt>
+<dd><p>Generate a list for the created segments, one segment per line,
+each line matching the format (comma-separated values):
+</p><table><tr><td> </td><td><pre class="example"><var>segment_filename</var>,<var>segment_start_time</var>,<var>segment_end_time</var>
+</pre></td></tr></table>
+
+<p><var>segment_filename</var> is the name of the output file generated by the
+muxer according to the provided pattern. CSV escaping (according to
+RFC4180) is applied if required.
+</p>
+<p><var>segment_start_time</var> and <var>segment_end_time</var> specify
+the segment start and end time expressed in seconds.
+</p>
+<p>A list file with the suffix <code>".csv"</code> or <code>".ext"</code> will
+auto-select this format.
+</p>
+<p>‘<samp>ext</samp>’ is deprecated in favor or ‘<samp>csv</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>ffconcat</samp>’</dt>
+<dd><p>Generate an ffconcat file for the created segments. The resulting file
+can be read using the FFmpeg <a href="#concat">concat</a> demuxer.
+</p>
+<p>A list file with the suffix <code>".ffcat"</code> or <code>".ffconcat"</code> will
+auto-select this format.
+</p>
+</dd>
+<dt> ‘<samp>m3u8</samp>’</dt>
+<dd><p>Generate an extended M3U8 file, version 3, compliant with
+<a href="http://tools.ietf.org/id/draft-pantos-http-live-streaming">http://tools.ietf.org/id/draft-pantos-http-live-streaming</a>.
+</p>
+<p>A list file with the suffix <code>".m3u8"</code> will auto-select this format.
+</p></dd>
+</dl>
+
+<p>If not specified the type is guessed from the list file name suffix.
+</p>
+</dd>
+<dt> ‘<samp>segment_time <var>time</var></samp>’</dt>
+<dd><p>Set segment duration to <var>time</var>, the value must be a duration
+specification. Default value is "2". See also the
+‘<samp>segment_times</samp>’ option.
+</p>
+<p>Note that splitting may not be accurate, unless you force the
+reference stream key-frames at the given time. See the introductory
+notice and the examples below.
+</p>
+</dd>
+<dt> ‘<samp>segment_time_delta <var>delta</var></samp>’</dt>
+<dd><p>Specify the accuracy time when selecting the start time for a
+segment, expressed as a duration specification. Default value is "0".
+</p>
+<p>When delta is specified a key-frame will start a new segment if its
+PTS satisfies the relation:
+</p><table><tr><td> </td><td><pre class="example">PTS >= start_time - time_delta
+</pre></td></tr></table>
+
+<p>This option is useful when splitting video content, which is always
+split at GOP boundaries, in case a key frame is found just before the
+specified split time.
+</p>
+<p>In particular may be used in combination with the ‘<tt>ffmpeg</tt>’ option
+<var>force_key_frames</var>. The key frame times specified by
+<var>force_key_frames</var> may not be set accurately because of rounding
+issues, with the consequence that a key frame time may result set just
+before the specified time. For constant frame rate videos a value of
+1/(2*<var>frame_rate</var>) should address the worst case mismatch between
+the specified time and the time set by <var>force_key_frames</var>.
+</p>
+</dd>
+<dt> ‘<samp>segment_times <var>times</var></samp>’</dt>
+<dd><p>Specify a list of split points. <var>times</var> contains a list of comma
+separated duration specifications, in increasing order. See also
+the ‘<samp>segment_time</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>segment_frames <var>frames</var></samp>’</dt>
+<dd><p>Specify a list of split video frame numbers. <var>frames</var> contains a
+list of comma separated integer numbers, in increasing order.
+</p>
+<p>This option specifies to start a new segment whenever a reference
+stream key frame is found and the sequential number (starting from 0)
+of the frame is greater or equal to the next value in the list.
+</p>
+</dd>
+<dt> ‘<samp>segment_wrap <var>limit</var></samp>’</dt>
+<dd><p>Wrap around segment index once it reaches <var>limit</var>.
+</p>
+</dd>
+<dt> ‘<samp>segment_start_number <var>number</var></samp>’</dt>
+<dd><p>Set the sequence number of the first segment. Defaults to <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>reset_timestamps <var>1|0</var></samp>’</dt>
+<dd><p>Reset timestamps at the begin of each segment, so that each segment
+will start with near-zero timestamps. It is meant to ease the playback
+of the generated segments. May not work with some combinations of
+muxers/codecs. It is set to <code>0</code> by default.
+</p>
+</dd>
+<dt> ‘<samp>initial_offset <var>offset</var></samp>’</dt>
+<dd><p>Specify timestamp offset to apply to the output packet timestamps. The
+argument must be a time duration specification, and defaults to 0.
+</p></dd>
+</dl>
+
+<a name="Examples-43"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-43">22.16.2 Examples</a></h3>
+
+<ul>
+<li>
+To remux the content of file ‘<tt>in.mkv</tt>’ to a list of segments
+‘<tt>out-000.nut</tt>’, ‘<tt>out-001.nut</tt>’, etc., and write the list of
+generated segments to ‘<tt>out.list</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut
+</pre></td></tr></table>
+
+</li><li>
+As the example above, but segment the input file according to the split
+points specified by the <var>segment_times</var> option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
+</pre></td></tr></table>
+
+</li><li>
+As the example above, but use the <code>ffmpeg</code> ‘<samp>force_key_frames</samp>’
+option to force key frames in the input at the specified location, together
+with the segment option ‘<samp>segment_time_delta</samp>’ to account for
+possible roundings operated when setting key frame times.
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \
+-f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
+</pre></td></tr></table>
+<p>In order to force key frames on the input file, transcoding is
+required.
+</p>
+</li><li>
+Segment the input file by splitting the input file according to the
+frame numbers sequence specified with the ‘<samp>segment_frames</samp>’ option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
+</pre></td></tr></table>
+
+</li><li>
+To convert the ‘<tt>in.mkv</tt>’ to TS segments using the <code>libx264</code>
+and <code>libfaac</code> encoders:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts
+</pre></td></tr></table>
+
+</li><li>
+Segment the input file, and create an M3U8 live playlist (can be used
+as live HLS source):
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \
+-segment_list_flags +live -segment_time 10 out%03d.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tee"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-tee">22.17 tee</a></h2>
+
+<p>The tee muxer can be used to write the same data to several files or any
+other kind of muxer. It can be used, for example, to both stream a video to
+the network and save it to disk at the same time.
+</p>
+<p>It is different from specifying several outputs to the <code>ffmpeg</code>
+command-line tool because the audio and video data will be encoded only once
+with the tee muxer; encoding can be a very expensive process. It is not
+useful when using the libavformat API directly because it is then possible
+to feed the same packets to several muxers directly.
+</p>
+<p>The slave outputs are specified in the file name given to the muxer,
+separated by ’|’. If any of the slave name contains the ’|’ separator,
+leading or trailing spaces or any special character, it must be
+escaped (see <a href="ffmpeg-utils.html#quoting_005fand_005fescaping">(ffmpeg-utils)quoting_and_escaping</a>).
+</p>
+<p>Muxer options can be specified for each slave by prepending them as a list of
+<var>key</var>=<var>value</var> pairs separated by ’:’, between square brackets. If
+the options values contain a special character or the ’:’ separator, they
+must be escaped; note that this is a second level escaping.
+</p>
+<p>The following special options are also recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>f</samp>’</dt>
+<dd><p>Specify the format name. Useful if it cannot be guessed from the
+output name suffix.
+</p>
+</dd>
+<dt> ‘<samp>bsfs[/<var>spec</var>]</samp>’</dt>
+<dd><p>Specify a list of bitstream filters to apply to the specified
+output.
+</p>
+<p>It is possible to specify to which streams a given bitstream filter
+applies, by appending a stream specifier to the option separated by
+<code>/</code>. <var>spec</var> must be a stream specifier (see <a href="#Format-stream-specifiers">Format stream specifiers</a>). If the stream specifier is not specified, the
+bistream filters will be applied to all streams in the output.
+</p>
+<p>Several bitstream filters can be specified, separated by ",".
+</p>
+</dd>
+<dt> ‘<samp>select</samp>’</dt>
+<dd><p>Select the streams that should be mapped to the slave output,
+specified by a stream specifier. If not specified, this defaults to
+all the input streams.
+</p></dd>
+</dl>
+
+<a name="Examples-97"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-97">22.17.1 Examples</a></h3>
+
+<ul>
+<li>
+Encode something and both archive it in a WebM file and stream it
+as MPEG-TS over UDP (the streams need to be explicitly mapped):
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
+ "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to encode the input, and send the output
+to three different destinations. The <code>dump_extra</code> bitstream
+filter is used to add extradata information to all the output video
+keyframes packets, as requested by the MPEG-TS format. The select
+option is applied to ‘<tt>out.aac</tt>’ in order to make it contain only
+audio packets.
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -strict experimental
+ -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"
+</pre></td></tr></table>
+
+</li><li>
+As below, but select only stream <code>a:1</code> for the audio output. Note
+that a second level escaping must be performed, as ":" is a special
+character used to separate options.
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -strict experimental
+ -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
+</pre></td></tr></table>
+</li></ul>
+
+<p>Note: some codecs may need different options depending on the output format;
+the auto-detection of this can not work with the tee muxer. The main example
+is the ‘<samp>global_header</samp>’ flag.
+</p>
+<a name="Metadata"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Metadata">23. Metadata</a></h1>
+
+<p>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.
+</p>
+<p>The file format is as follows:
+</p><ol>
+<li>
+A file consists of a header and a number of metadata tags divided into sections,
+each on its own line.
+
+</li><li>
+The header is a ’;FFMETADATA’ string, followed by a version number (now 1).
+
+</li><li>
+Metadata tags are of the form ’key=value’
+
+</li><li>
+Immediately after header follows global metadata
+
+</li><li>
+After global metadata there may be sections with per-stream/per-chapter
+metadata.
+
+</li><li>
+A section starts with the section name in uppercase (i.e. STREAM or CHAPTER) in
+brackets (’[’, ’]’) and ends with next section or end of file.
+
+</li><li>
+At the beginning of a chapter section there may be an optional timebase to be
+used for start/end values. It must be in form ’TIMEBASE=num/den’, where num and
+den are integers. If the timebase is missing then start/end times are assumed to
+be in milliseconds.
+Next a chapter section must contain chapter start and end times in form
+’START=num’, ’END=num’, where num is a positive integer.
+
+</li><li>
+Empty lines and lines starting with ’;’ or ’#’ are ignored.
+
+</li><li>
+Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a
+newline) must be escaped with a backslash ’\’.
+
+</li><li>
+Note that whitespace in metadata (e.g. foo = bar) is considered to be a part of
+the tag (in the example above key is ’foo ’, value is ’ bar’).
+</li></ol>
+
+<p>A ffmetadata file might look like this:
+</p><table><tr><td> </td><td><pre class="example">;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
+</pre></td></tr></table>
+
+<p>By using the ffmetadata muxer and demuxer it is possible to extract
+metadata from an input file to an ffmetadata file, and then transcode
+the file into an output file with the edited ffmetadata file.
+</p>
+<p>Extracting an ffmetadata file with ‘<tt>ffmpeg</tt>’ goes as follows:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
+</pre></td></tr></table>
+
+<p>Reinserting edited metadata information from the FFMETADATAFILE file can
+be done as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
+</pre></td></tr></table>
+
+<a name="Protocols"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Protocols">24. Protocols</a></h1>
+
+<p>Protocols are configured elements in FFmpeg that enable access to
+resources that require specific protocols.
+</p>
+<p>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".
+</p>
+<p>You can disable all the protocols using the configure option
+"–disable-protocols", and selectively enable a protocol using the
+option "–enable-protocol=<var>PROTOCOL</var>", or you can disable a
+particular protocol using the option
+"–disable-protocol=<var>PROTOCOL</var>".
+</p>
+<p>The option "-protocols" of the ff* tools will display the list of
+supported protocols.
+</p>
+<p>A description of the currently available protocols follows.
+</p>
+<a name="bluray"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-bluray">24.1 bluray</a></h2>
+
+<p>Read BluRay playlist.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>angle</samp>’</dt>
+<dd><p>BluRay angle
+</p>
+</dd>
+<dt> ‘<samp>chapter</samp>’</dt>
+<dd><p>Start chapter (1...N)
+</p>
+</dd>
+<dt> ‘<samp>playlist</samp>’</dt>
+<dd><p>Playlist to read (BDMV/PLAYLIST/?????.mpls)
+</p>
+</dd>
+</dl>
+
+<p>Examples:
+</p>
+<p>Read longest playlist from BluRay mounted to /mnt/bluray:
+</p><table><tr><td> </td><td><pre class="example">bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<p>Read angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2:
+</p><table><tr><td> </td><td><pre class="example">-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<a name="cache"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-cache">24.2 cache</a></h2>
+
+<p>Caching wrapper for input stream.
+</p>
+<p>Cache the input stream to temporary file. It brings seeking capability to live streams.
+</p>
+<table><tr><td> </td><td><pre class="example">cache:<var>URL</var>
+</pre></td></tr></table>
+
+<a name="concat-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-concat-1">24.3 concat</a></h2>
+
+<p>Physical concatenation protocol.
+</p>
+<p>Allow to read and seek from many resource in sequence as if they were
+a unique resource.
+</p>
+<p>A URL accepted by this protocol has the syntax:
+</p><table><tr><td> </td><td><pre class="example">concat:<var>URL1</var>|<var>URL2</var>|...|<var>URLN</var>
+</pre></td></tr></table>
+
+<p>where <var>URL1</var>, <var>URL2</var>, ..., <var>URLN</var> are the urls of the
+resource to be concatenated, each one possibly specifying a distinct
+protocol.
+</p>
+<p>For example to read a sequence of files ‘<tt>split1.mpeg</tt>’,
+‘<tt>split2.mpeg</tt>’, ‘<tt>split3.mpeg</tt>’ with <code>ffplay</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
+</pre></td></tr></table>
+
+<p>Note that you may need to escape the character "|" which is special for
+many shells.
+</p>
+<a name="crypto"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-crypto">24.4 crypto</a></h2>
+
+<p>AES-encrypted stream reading protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>Set the AES decryption key binary block from given hexadecimal representation.
+</p>
+</dd>
+<dt> ‘<samp>iv</samp>’</dt>
+<dd><p>Set the AES decryption initialization vector binary block from given hexadecimal representation.
+</p></dd>
+</dl>
+
+<p>Accepted URL formats:
+</p><table><tr><td> </td><td><pre class="example">crypto:<var>URL</var>
+crypto+<var>URL</var>
+</pre></td></tr></table>
+
+<a name="data"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-data">24.5 data</a></h2>
+
+<p>Data in-line in the URI. See <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">http://en.wikipedia.org/wiki/Data_URI_scheme</a>.
+</p>
+<p>For example, to convert a GIF file given inline with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
+</pre></td></tr></table>
+
+<a name="file"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-file">24.6 file</a></h2>
+
+<p>File access protocol.
+</p>
+<p>Allow to read from or write to a file.
+</p>
+<p>A file URL can have the form:
+</p><table><tr><td> </td><td><pre class="example">file:<var>filename</var>
+</pre></td></tr></table>
+
+<p>where <var>filename</var> is the path of the file to read.
+</p>
+<p>An URL that does not have a protocol prefix will be assumed to be a
+file URL. Depending on the build, an URL that looks like a Windows
+path with the drive letter at the beginning will also be assumed to be
+a file URL (usually not the case in builds for unix-like systems).
+</p>
+<p>For example to read from a file ‘<tt>input.mpeg</tt>’ with <code>ffmpeg</code>
+use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i file:input.mpeg output.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable for files on slow medium.
+</p></dd>
+</dl>
+
+<a name="ftp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ftp">24.7 ftp</a></h2>
+
+<p>FTP (File Transfer Protocol).
+</p>
+<p>Allow to read from or write to remote resources using FTP protocol.
+</p>
+<p>Following syntax is required.
+</p><table><tr><td> </td><td><pre class="example">ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>ftp-anonymous-password</samp>’</dt>
+<dd><p>Password used when login as anonymous user. Typically an e-mail address
+should be used.
+</p>
+</dd>
+<dt> ‘<samp>ftp-write-seekable</samp>’</dt>
+<dd><p>Control seekability of connection during encoding. If set to 1 the
+resource is supposed to be seekable, if set to 0 it is assumed not
+to be seekable. Default value is 0.
+</p></dd>
+</dl>
+
+<p>NOTE: Protocol can be used as output, but it is recommended to not do
+it, unless special care is taken (tests, customized server configuration
+etc.). Different FTP servers behave in different way during seek
+operation. ff* tools may produce incomplete content due to server limitations.
+</p>
+<a name="gopher"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-gopher">24.8 gopher</a></h2>
+
+<p>Gopher protocol.
+</p>
+<a name="hls-2"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-hls-2">24.9 hls</a></h2>
+
+<p>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.
+The nested protocol is declared by specifying
+"+<var>proto</var>" after the hls URI scheme name, where <var>proto</var>
+is either "file" or "http".
+</p>
+<table><tr><td> </td><td><pre class="example">hls+http://host/path/to/remote/resource.m3u8
+hls+file://path/to/local/resource.m3u8
+</pre></td></tr></table>
+
+<p>Using this protocol is discouraged - the hls demuxer should work
+just as well (if not, please report the issues) and is more complete.
+To use the hls demuxer instead, simply use the direct URLs to the
+m3u8 files.
+</p>
+<a name="http"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-http">24.10 http</a></h2>
+
+<p>HTTP (Hyper Text Transfer Protocol).
+</p>
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>seekable</samp>’</dt>
+<dd><p>Control seekability of connection. If set to 1 the resource is
+supposed to be seekable, if set to 0 it is assumed not to be seekable,
+if set to -1 it will try to autodetect if it is seekable. Default
+value is -1.
+</p>
+</dd>
+<dt> ‘<samp>chunked_post</samp>’</dt>
+<dd><p>If set to 1 use chunked Transfer-Encoding for posts, default is 1.
+</p>
+</dd>
+<dt> ‘<samp>content_type</samp>’</dt>
+<dd><p>Set a specific content type for the POST messages.
+</p>
+</dd>
+<dt> ‘<samp>headers</samp>’</dt>
+<dd><p>Set custom HTTP headers, can override built in default headers. The
+value must be a string encoding the headers.
+</p>
+</dd>
+<dt> ‘<samp>multiple_requests</samp>’</dt>
+<dd><p>Use persistent connections if set to 1, default is 0.
+</p>
+</dd>
+<dt> ‘<samp>post_data</samp>’</dt>
+<dd><p>Set custom HTTP post data.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dt> ‘<samp>user_agent</samp>’</dt>
+<dd><p>Override the User-Agent header. If not specified the protocol will use a
+string describing the libavformat build. ("Lavf/<version>")
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>mime_type</samp>’</dt>
+<dd><p>Export the MIME type.
+</p>
+</dd>
+<dt> ‘<samp>icy</samp>’</dt>
+<dd><p>If set to 1 request ICY (SHOUTcast) metadata from the server. If the server
+supports this, the metadata has to be retrieved by the application by reading
+the ‘<samp>icy_metadata_headers</samp>’ and ‘<samp>icy_metadata_packet</samp>’ options.
+The default is 0.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_headers</samp>’</dt>
+<dd><p>If the server supports ICY metadata, this contains the ICY-specific HTTP reply
+headers, separated by newline characters.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_packet</samp>’</dt>
+<dd><p>If the server supports ICY metadata, and ‘<samp>icy</samp>’ was set to 1, this
+contains the last non-empty metadata packet sent by the server. It should be
+polled in regular intervals by applications interested in mid-stream metadata
+updates.
+</p>
+</dd>
+<dt> ‘<samp>cookies</samp>’</dt>
+<dd><p>Set the cookies to be sent in future requests. The format of each cookie is the
+same as the value of a Set-Cookie HTTP response field. Multiple cookies can be
+delimited by a newline character.
+</p>
+</dd>
+<dt> ‘<samp>offset</samp>’</dt>
+<dd><p>Set initial byte offset.
+</p>
+</dd>
+<dt> ‘<samp>end_offset</samp>’</dt>
+<dd><p>Try to limit the request to bytes preceding this offset.
+</p></dd>
+</dl>
+
+<a name="HTTP-Cookies"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-HTTP-Cookies">24.10.1 HTTP Cookies</a></h3>
+
+<p>Some HTTP requests will be denied unless cookie values are passed in with the
+request. The ‘<samp>cookies</samp>’ option allows these cookies to be specified. At
+the very least, each cookie must specify a value along with a path and domain.
+HTTP requests that match both the domain and path will automatically include the
+cookie value in the HTTP Cookie header field. Multiple cookies can be delimited
+by a newline.
+</p>
+<p>The required syntax to play a stream specifying a cookie is:
+</p><table><tr><td> </td><td><pre class="example">ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
+</pre></td></tr></table>
+
+<a name="mmst"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mmst">24.11 mmst</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over TCP.
+</p>
+<a name="mmsh"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mmsh">24.12 mmsh</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over HTTP.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">mmsh://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<a name="md5-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-md5-1">24.13 md5</a></h2>
+
+<p>MD5 output protocol.
+</p>
+<p>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.
+</p>
+<p>Some examples follow.
+</p><table><tr><td> </td><td><pre class="example"># 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:
+</pre></td></tr></table>
+
+<p>Note that some formats (typically MOV) require the output protocol to
+be seekable, so they will fail with the MD5 output protocol.
+</p>
+<a name="pipe"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pipe">24.14 pipe</a></h2>
+
+<p>UNIX pipe access protocol.
+</p>
+<p>Allow to read and write from UNIX pipes.
+</p>
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">pipe:[<var>number</var>]
+</pre></td></tr></table>
+
+<p><var>number</var> is the number corresponding to the file descriptor of the
+pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If <var>number</var>
+is not specified, by default the stdout file descriptor will be used
+for writing, stdin for reading.
+</p>
+<p>For example to read from stdin with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">cat test.wav | ffmpeg -i pipe:0
+# ...this is the same as...
+cat test.wav | ffmpeg -i pipe:
+</pre></td></tr></table>
+
+<p>For writing to stdout with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable if data transmission is slow.
+</p></dd>
+</dl>
+
+<p>Note that some formats (typically MOV), require the output protocol to
+be seekable, so they will fail with the pipe output protocol.
+</p>
+<a name="rtmp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtmp">24.15 rtmp</a></h2>
+
+<p>Real-Time Messaging Protocol.
+</p>
+<p>The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia
+content across a TCP/IP network.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">rtmp://[<var>username</var>:<var>password</var>@]<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>instance</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<p>The accepted parameters are:
+</p><dl compact="compact">
+<dt> ‘<samp>username</samp>’</dt>
+<dd><p>An optional username (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>password</samp>’</dt>
+<dd><p>An optional password (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>The address of the RTMP server.
+</p>
+</dd>
+<dt> ‘<samp>port</samp>’</dt>
+<dd><p>The number of the TCP port to use (by default is 1935).
+</p>
+</dd>
+<dt> ‘<samp>app</samp>’</dt>
+<dd><p>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. ‘<tt>/ondemand/</tt>’, ‘<tt>/flash/live/</tt>’, etc.). You can override
+the value parsed from the URI through the <code>rtmp_app</code> option, too.
+</p>
+</dd>
+<dt> ‘<samp>playpath</samp>’</dt>
+<dd><p>It is the path or name of the resource to play with reference to the
+application specified in <var>app</var>, may be prefixed by "mp4:". You
+can override the value parsed from the URI through the <code>rtmp_playpath</code>
+option, too.
+</p>
+</dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Maximum time to wait for the incoming connection. Implies listen.
+</p></dd>
+</dl>
+
+<p>Additionally, the following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p><dl compact="compact">
+<dt> ‘<samp>rtmp_app</samp>’</dt>
+<dd><p>Name of application to connect on the RTMP server. This option
+overrides the parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_buffer</samp>’</dt>
+<dd><p>Set the client buffer time in milliseconds. The default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_conn</samp>’</dt>
+<dd><p>Extra arbitrary AMF connection parameters, parsed from a string,
+e.g. like <code>B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0</code>.
+Each value is prefixed by a single character denoting the type,
+B for Boolean, N for number, S for string, O for object, or Z for null,
+followed by a colon. For Booleans the data must be either 0 or 1 for
+FALSE or TRUE, respectively. Likewise for Objects the data must be 0 or
+1 to end or begin an object, respectively. Data items in subobjects may
+be named, by prefixing the type with ’N’ and specifying the name before
+the value (i.e. <code>NB:myFlag:1</code>). This option may be used multiple
+times to construct arbitrary AMF sequences.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flashver</samp>’</dt>
+<dd><p>Version of the Flash plugin used to run the SWF player. The default
+is LNX 9,0,124,2. (When publishing, the default is FMLE/3.0 (compatible;
+<libavformat version>).)
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flush_interval</samp>’</dt>
+<dd><p>Number of packets flushed in the same request (RTMPT only). The default
+is 10.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_live</samp>’</dt>
+<dd><p>Specify that the media is a live stream. No resuming or seeking in
+live streams is possible. The default value is <code>any</code>, which means the
+subscriber first tries to play the live stream specified in the
+playpath. If a live stream of that name is not found, it plays the
+recorded stream. The other possible values are <code>live</code> and
+<code>recorded</code>.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_pageurl</samp>’</dt>
+<dd><p>URL of the web page in which the media was embedded. By default no
+value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_playpath</samp>’</dt>
+<dd><p>Stream identifier to play or to publish. This option overrides the
+parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_subscribe</samp>’</dt>
+<dd><p>Name of live stream to subscribe to. By default no value will be sent.
+It is only sent if the option is specified or if rtmp_live
+is set to live.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfhash</samp>’</dt>
+<dd><p>SHA256 hash of the decompressed SWF file (32 bytes).
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfsize</samp>’</dt>
+<dd><p>Size of the decompressed SWF file, required for SWFVerification.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfurl</samp>’</dt>
+<dd><p>URL of the SWF player for the media. By default no value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfverify</samp>’</dt>
+<dd><p>URL to player swf file, compute hash/size automatically.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_tcurl</samp>’</dt>
+<dd><p>URL of the target stream. Defaults to proto://host[:port]/app.
+</p>
+</dd>
+</dl>
+
+<p>For example to read with <code>ffplay</code> a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+</p><table><tr><td> </td><td><pre class="example">ffplay rtmp://myserver/vod/sample
+</pre></td></tr></table>
+
+<p>To publish to a password protected server, passing the playpath and
+app names separately:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
+</pre></td></tr></table>
+
+<a name="rtmpe"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtmpe">24.16 rtmpe</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol (RTMPE) is used for
+streaming multimedia content within standard cryptographic primitives,
+consisting of Diffie-Hellman key exchange and HMACSHA256, generating
+a pair of RC4 keys.
+</p>
+<a name="rtmps"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtmps">24.17 rtmps</a></h2>
+
+<p>Real-Time Messaging Protocol over a secure SSL connection.
+</p>
+<p>The Real-Time Messaging Protocol (RTMPS) is used for streaming
+multimedia content across an encrypted connection.
+</p>
+<a name="rtmpt"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtmpt">24.18 rtmpt</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTP (RTMPT) is used
+for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpte"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtmpte">24.19 rtmpte</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol tunneled through HTTP (RTMPTE)
+is used for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpts"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtmpts">24.20 rtmpts</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTPS.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTPS (RTMPTS) is used
+for streaming multimedia content within HTTPS requests to traverse
+firewalls.
+</p>
+<a name="libssh"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libssh">24.21 libssh</a></h2>
+
+<p>Secure File Transfer Protocol via libssh
+</p>
+<p>Allow to read from or write to remote resources using SFTP protocol.
+</p>
+<p>Following syntax is required.
+</p>
+<table><tr><td> </td><td><pre class="example">sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout
+is not specified.
+</p>
+</dd>
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>private_key</samp>’</dt>
+<dd><p>Specify the path of the file containing private key to use during authorization.
+By default libssh searches for keys in the ‘<tt>~/.ssh/</tt>’ directory.
+</p>
+</dd>
+</dl>
+
+<p>Example: Play a file stored on remote server.
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
+</pre></td></tr></table>
+
+<a name="librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">24.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></h2>
+
+<p>Real-Time Messaging Protocol and its variants supported through
+librtmp.
+</p>
+<p>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.
+</p>
+<p>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).
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example"><var>rtmp_proto</var>://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>] <var>options</var>
+</pre></td></tr></table>
+
+<p>where <var>rtmp_proto</var> is one of the strings "rtmp", "rtmpt", "rtmpe",
+"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and
+<var>server</var>, <var>port</var>, <var>app</var> and <var>playpath</var> have the same
+meaning as specified for the RTMP native protocol.
+<var>options</var> contains a list of space-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>See the librtmp manual page (man 3 librtmp) for more information.
+</p>
+<p>For example, to stream a file in real-time to an RTMP server using
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
+</pre></td></tr></table>
+
+<p>To play the same stream using <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffplay "rtmp://myserver/live/mystream live=1"
+</pre></td></tr></table>
+
+<a name="rtp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtp">24.23 rtp</a></h2>
+
+<p>Real-time Transport Protocol.
+</p>
+<p>The required syntax for an RTP URL is:
+rtp://<var>hostname</var>[:<var>port</var>][?<var>option</var>=<var>val</var>...]
+</p>
+<p><var>port</var> specifies the RTP port to use.
+</p>
+<p>The following URL options are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ttl=<var>n</var></samp>’</dt>
+<dd><p>Set the TTL (Time-To-Live) value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>rtcpport=<var>n</var></samp>’</dt>
+<dd><p>Set the remote RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtpport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtcpport=<var>n</var>'</samp>’</dt>
+<dd><p>Set the local RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>n</var></samp>’</dt>
+<dd><p>Set max packet size (in bytes) to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>connect=0|1</samp>’</dt>
+<dd><p>Do a <code>connect()</code> on the UDP socket (if set to 1) or not (if set
+to 0).
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List allowed source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List disallowed (blocked) source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>write_to_source=0|1</samp>’</dt>
+<dd><p>Send packets to the source address of the latest received packet (if
+set to 1) or to a default remote address (if set to 0).
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+<p>This is a deprecated option. Instead, ‘<samp>localrtpport</samp>’ should be
+used.
+</p>
+</dd>
+</dl>
+
+<p>Important notes:
+</p>
+<ol>
+<li>
+If ‘<samp>rtcpport</samp>’ is not set the RTCP port will be set to the RTP
+port value plus 1.
+
+</li><li>
+If ‘<samp>localrtpport</samp>’ (the local RTP port) is not set any available
+port will be used for the local RTP and RTCP ports.
+
+</li><li>
+If ‘<samp>localrtcpport</samp>’ (the local RTCP port) is not set it will be
+set to the the local RTP port value plus 1.
+</li></ol>
+
+<a name="rtsp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rtsp">24.24 rtsp</a></h2>
+
+<p>Real-Time Streaming Protocol.
+</p>
+<p>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).
+</p>
+<p>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
+<a href="http://github.com/revmischa/rtsp-server">RTSP server</a>).
+</p>
+<p>The required syntax for a RTSP url is:
+</p><table><tr><td> </td><td><pre class="example">rtsp://<var>hostname</var>[:<var>port</var>]/<var>path</var>
+</pre></td></tr></table>
+
+<p>Options can be set on the <code>ffmpeg</code>/<code>ffplay</code> command
+line, or set in code via <code>AVOption</code>s or in
+<code>avformat_open_input</code>.
+</p>
+<p>The following options are supported.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>initial_pause</samp>’</dt>
+<dd><p>Do not start playing the stream immediately if set to 1. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_transport</samp>’</dt>
+<dd><p>Set RTSP trasport protocols.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>udp</samp>’</dt>
+<dd><p>Use UDP as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>tcp</samp>’</dt>
+<dd><p>Use TCP (interleaving within the RTSP control channel) as lower
+transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>udp_multicast</samp>’</dt>
+<dd><p>Use UDP multicast as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>http</samp>’</dt>
+<dd><p>Use HTTP tunneling as lower transport protocol, which is useful for
+passing proxies.
+</p></dd>
+</dl>
+
+<p>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 ‘<samp>tcp</samp>’ and ‘<samp>udp</samp>’ options are supported.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_flags</samp>’</dt>
+<dd><p>Set RTSP flags.
+</p>
+<p>The following values are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>filter_src</samp>’</dt>
+<dd><p>Accept packets only from negotiated peer address and port.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>none</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>allowed_media_types</samp>’</dt>
+<dd><p>Set media types to accept from the server.
+</p>
+<p>The following flags are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dt> ‘<samp>audio</samp>’</dt>
+<dt> ‘<samp>data</samp>’</dt>
+</dl>
+
+<p>By default it accepts all media types.
+</p>
+</dd>
+<dt> ‘<samp>min_port</samp>’</dt>
+<dd><p>Set minimum local UDP port. Default value is 5000.
+</p>
+</dd>
+<dt> ‘<samp>max_port</samp>’</dt>
+<dd><p>Set maximum local UDP port. Default value is 65000.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set maximum timeout (in seconds) to wait for incoming connections.
+</p>
+<p>A value of -1 mean infinite (default). This option implies the
+‘<samp>rtsp_flags</samp>’ set to ‘<samp>listen</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>reorder_queue_size</samp>’</dt>
+<dd><p>Set number of packets to buffer for handling of reordered packets.
+</p>
+</dd>
+<dt> ‘<samp>stimeout</samp>’</dt>
+<dd><p>Set socket TCP I/O timeout in micro seconds.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dd><p>Override User-Agent header. If not specified, it default to the
+libavformat identifier string.
+</p></dd>
+</dl>
+
+<p>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). This
+can be disabled by setting the maximum demuxing delay to zero (via
+the <code>max_delay</code> field of AVFormatContext).
+</p>
+<p>When watching multi-bitrate Real-RTSP streams with <code>ffplay</code>, the
+streams to display can be chosen with <code>-vst</code> <var>n</var> and
+<code>-ast</code> <var>n</var> for video and audio respectively, and can be switched
+on the fly by pressing <code>v</code> and <code>a</code>.
+</p>
+<a name="Examples-47"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-47">24.24.1 Examples</a></h3>
+
+<p>The following examples all make use of the <code>ffplay</code> and
+<code>ffmpeg</code> tools.
+</p>
+<ul>
+<li>
+Watch a stream over UDP, with a max reordering delay of 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Watch a stream tunneled over HTTP:
+<table><tr><td> </td><td><pre class="example">ffplay -rtsp_transport http rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Send a stream in realtime to a RTSP server, for others to watch:
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
+</pre></td></tr></table>
+
+</li><li>
+Receive a stream in realtime:
+<table><tr><td> </td><td><pre class="example">ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp <var>output</var>
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sap"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sap">24.25 sap</a></h2>
+
+<p>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.
+</p>
+<a name="Muxer"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Muxer">24.25.1 Muxer</a></h3>
+
+<p>The syntax for a SAP url given to the muxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://<var>destination</var>[:<var>port</var>][?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The RTP packets are sent to <var>destination</var> on port <var>port</var>,
+or to port 5004 if no port is specified.
+<var>options</var> is a <code>&</code>-separated list. The following options
+are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>announce_addr=<var>address</var></samp>’</dt>
+<dd><p>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 <var>destination</var> is an IPv6 address.
+</p>
+</dd>
+<dt> ‘<samp>announce_port=<var>port</var></samp>’</dt>
+<dd><p>Specify the port to send the announcements on, defaults to
+9875 if not specified.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Specify the time to live value for the announcements and RTP packets,
+defaults to 255.
+</p>
+</dd>
+<dt> ‘<samp>same_port=<var>0|1</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>Example command lines follow.
+</p>
+<p>To broadcast a stream on the local subnet, for watching in VLC:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255?same_port=1
+</pre></td></tr></table>
+
+<p>Similarly, for watching in <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255
+</pre></td></tr></table>
+
+<p>And for watching in <code>ffplay</code>, over IPv6:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://[ff0e::1:2:3:4]
+</pre></td></tr></table>
+
+<a name="Demuxer"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Demuxer">24.25.2 Demuxer</a></h3>
+
+<p>The syntax for a SAP url given to the demuxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://[<var>address</var>][:<var>port</var>]
+</pre></td></tr></table>
+
+<p><var>address</var> is the multicast address to listen for announcements on,
+if omitted, the default 224.2.127.254 (sap.mcast.net) is used. <var>port</var>
+is the port that is listened on, 9875 if omitted.
+</p>
+<p>The demuxers listens for announcements on the given address and port.
+Once an announcement is received, it tries to receive that particular stream.
+</p>
+<p>Example command lines follow.
+</p>
+<p>To play back the first stream announced on the normal SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://
+</pre></td></tr></table>
+
+<p>To play back the first stream announced on one the default IPv6 SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://[ff0e::2:7ffe]
+</pre></td></tr></table>
+
+<a name="sctp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sctp">24.26 sctp</a></h2>
+
+<p>Stream Control Transmission Protocol.
+</p>
+<p>The accepted URL syntax is:
+</p><table><tr><td> </td><td><pre class="example">sctp://<var>host</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The protocol accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>If set to any value, listen for an incoming connection. Outgoing connection is done by default.
+</p>
+</dd>
+<dt> ‘<samp>max_streams</samp>’</dt>
+<dd><p>Set the maximum number of streams. By default no limit is set.
+</p></dd>
+</dl>
+
+<a name="srtp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-srtp">24.27 srtp</a></h2>
+
+<p>Secure Real-time Transport Protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>srtp_in_suite</samp>’</dt>
+<dt> ‘<samp>srtp_out_suite</samp>’</dt>
+<dd><p>Select input and output encoding suites.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_32</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_32</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>srtp_in_params</samp>’</dt>
+<dt> ‘<samp>srtp_out_params</samp>’</dt>
+<dd><p>Set input and output encoding parameters, which are expressed by a
+base64-encoded representation of a binary block. The first 16 bytes of
+this binary block are used as master key, the following 14 bytes are
+used as master salt.
+</p></dd>
+</dl>
+
+<a name="tcp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-tcp">24.28 tcp</a></h2>
+
+<p>Transmission Control Protocol.
+</p>
+<p>The required syntax for a TCP url is:
+</p><table><tr><td> </td><td><pre class="example">tcp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>Listen for an incoming connection. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p>
+</dd>
+<dt> ‘<samp>listen_timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set listen timeout, expressed in microseconds.
+</p></dd>
+</dl>
+
+<p>The following example shows how to setup a listening TCP connection
+with <code>ffmpeg</code>, which is then accessed with <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tcp://<var>hostname</var>:<var>port</var>?listen
+ffplay tcp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="tls"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-tls">24.29 tls</a></h2>
+
+<p>Transport Layer Security (TLS) / Secure Sockets Layer (SSL)
+</p>
+<p>The required syntax for a TLS/SSL url is:
+</p><table><tr><td> </td><td><pre class="example">tls://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ca_file, cafile=<var>filename</var></samp>’</dt>
+<dd><p>A file containing certificate authority (CA) root certificates to treat
+as trusted. If the linked TLS library contains a default this might not
+need to be specified for verification to work, but not all libraries and
+setups have defaults built in.
+The file must be in OpenSSL PEM format.
+</p>
+</dd>
+<dt> ‘<samp>tls_verify=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, try to verify the peer that we are communicating with.
+Note, if using OpenSSL, this currently only makes sure that the
+peer certificate is signed by one of the root certificates in the CA
+database, but it does not validate that the certificate actually
+matches the host name we are trying to connect to. (With GnuTLS,
+the host name is validated as well.)
+</p>
+<p>This is disabled by default since it requires a CA database to be
+provided by the caller in many cases.
+</p>
+</dd>
+<dt> ‘<samp>cert_file, cert=<var>filename</var></samp>’</dt>
+<dd><p>A file containing a certificate to use in the handshake with the peer.
+(When operating as server, in listen mode, this is more often required
+by the peer, while client certificates only are mandated in certain
+setups.)
+</p>
+</dd>
+<dt> ‘<samp>key_file, key=<var>filename</var></samp>’</dt>
+<dd><p>A file containing the private key for the certificate.
+</p>
+</dd>
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, listen for connections on the provided port, and assume
+the server role in the handshake instead of the client role.
+</p>
+</dd>
+</dl>
+
+<p>Example command lines:
+</p>
+<p>To create a TLS/SSL server that serves an input stream.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tls://<var>hostname</var>:<var>port</var>?listen&cert=<var>server.crt</var>&key=<var>server.key</var>
+</pre></td></tr></table>
+
+<p>To play back a stream from the TLS/SSL server using <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay tls://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="udp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-udp">24.30 udp</a></h2>
+
+<p>User Datagram Protocol.
+</p>
+<p>The required syntax for an UDP URL is:
+</p><table><tr><td> </td><td><pre class="example">udp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form <var>key</var>=<var>val</var>.
+</p>
+<p>In case threading is enabled on the system, a circular buffer is used
+to store the incoming data, which allows one to reduce loss of data due to
+UDP socket buffer overruns. The <var>fifo_size</var> and
+<var>overrun_nonfatal</var> options are related to this buffer.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>buffer_size=<var>size</var></samp>’</dt>
+<dd><p>Set the UDP socket buffer size in bytes. This is used both for the
+receiving and the sending buffer size.
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>port</var></samp>’</dt>
+<dd><p>Override the local UDP port to bind with.
+</p>
+</dd>
+<dt> ‘<samp>localaddr=<var>addr</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>size</var></samp>’</dt>
+<dd><p>Set the size in bytes of UDP packets.
+</p>
+</dd>
+<dt> ‘<samp>reuse=<var>1|0</var></samp>’</dt>
+<dd><p>Explicitly allow or disallow reusing UDP sockets.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Set the time to live value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>connect=<var>1|0</var></samp>’</dt>
+<dd><p>Initialize the UDP socket with <code>connect()</code>. 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.
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Only receive packets sent to the multicast group from one of the
+specified sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Ignore packets sent to the multicast group from the specified
+sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>fifo_size=<var>units</var></samp>’</dt>
+<dd><p>Set the UDP receiving circular buffer size, expressed as a number of
+packets with size of 188 bytes. If not specified defaults to 7*4096.
+</p>
+</dd>
+<dt> ‘<samp>overrun_nonfatal=<var>1|0</var></samp>’</dt>
+<dd><p>Survive in case of UDP receiving circular buffer overrun. Default
+value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p></dd>
+</dl>
+
+<a name="Examples-65"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-65">24.30.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to stream over UDP to a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> udp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to stream in mpegts format over UDP using 188
+sized UDP packets, using a large input buffer:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f mpegts udp://<var>hostname</var>:<var>port</var>?pkt_size=188&buffer_size=65535
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to receive over UDP from a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i udp://[<var>multicast-address</var>]:<var>port</var> ...
+</pre></td></tr></table>
+</li></ul>
+
+<a name="unix"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-unix">24.31 unix</a></h2>
+
+<p>Unix local socket
+</p>
+<p>The required syntax for a Unix socket URL is:
+</p>
+<table><tr><td> </td><td><pre class="example">unix://<var>filepath</var>
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Timeout in ms.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Create the Unix socket in listening mode.
+</p></dd>
+</dl>
+
+<a name="Device-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Device-Options">25. Device Options</a></h1>
+
+<p>The libavdevice library provides the same interface as
+libavformat. Namely, an input device is considered like a demuxer, and
+an output device like a muxer, and the interface and generic device
+options are the same provided by libavformat (see the ffmpeg-formats
+manual).
+</p>
+<p>In addition each input or output device may support so-called private
+options, which are specific for that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the device
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+
+<a name="Input-Devices"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Input-Devices">26. Input Devices</a></h1>
+
+<p>Input devices are configured elements in FFmpeg which allow to access
+the data coming from a multimedia device attached to your system.
+</p>
+<p>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".
+</p>
+<p>You can disable all the input devices using the configure option
+"–disable-indevs", and selectively enable an input device using the
+option "–enable-indev=<var>INDEV</var>", or you can disable a particular
+input device using the option "–disable-indev=<var>INDEV</var>".
+</p>
+<p>The option "-formats" of the ff* tools will display the list of
+supported input devices (amongst the demuxers).
+</p>
+<p>A description of the currently available input devices follows.
+</p>
+<a name="alsa"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-alsa">26.1 alsa</a></h2>
+
+<p>ALSA (Advanced Linux Sound Architecture) input device.
+</p>
+<p>To enable this input device during configuration you need libasound
+installed on your system.
+</p>
+<p>This device allows capturing from an ALSA device. The name of the
+device to capture has to be an ALSA card identifier.
+</p>
+<p>An ALSA identifier has the syntax:
+</p><table><tr><td> </td><td><pre class="example">hw:<var>CARD</var>[,<var>DEV</var>[,<var>SUBDEV</var>]]
+</pre></td></tr></table>
+
+<p>where the <var>DEV</var> and <var>SUBDEV</var> components are optional.
+</p>
+<p>The three arguments (in order: <var>CARD</var>,<var>DEV</var>,<var>SUBDEV</var>)
+specify card number or identifier, device number and subdevice number
+(-1 means any).
+</p>
+<p>To see the list of cards currently recognized by your system check the
+files ‘<tt>/proc/asound/cards</tt>’ and ‘<tt>/proc/asound/devices</tt>’.
+</p>
+<p>For example to capture with <code>ffmpeg</code> from an ALSA device with
+card id 0, you may run the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f alsa -i hw:0 alsaout.wav
+</pre></td></tr></table>
+
+<p>For more information see:
+<a href="http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html">http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html</a>
+</p>
+<a name="bktr"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-bktr">26.2 bktr</a></h2>
+
+<p>BSD video input device.
+</p>
+<a name="dshow"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-dshow">26.3 dshow</a></h2>
+
+<p>Windows DirectShow input device.
+</p>
+<p>DirectShow support is enabled when FFmpeg is built with the mingw-w64 project.
+Currently only audio and video devices are supported.
+</p>
+<p>Multiple devices may be opened as separate inputs, but they may also be
+opened on the same input, which should improve synchronism between them.
+</p>
+<p>The input name should be in the format:
+</p>
+<table><tr><td> </td><td><pre class="example"><var>TYPE</var>=<var>NAME</var>[:<var>TYPE</var>=<var>NAME</var>]
+</pre></td></tr></table>
+
+<p>where <var>TYPE</var> can be either <var>audio</var> or <var>video</var>,
+and <var>NAME</var> is the device’s name.
+</p>
+<a name="Options-28"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-28">26.3.1 Options</a></h3>
+
+<p>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.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+</p>
+</dd>
+<dt> ‘<samp>list_options</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of selected device’s options
+and exit.
+</p>
+</dd>
+<dt> ‘<samp>video_device_number</samp>’</dt>
+<dd><p>Set video device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>audio_device_number</samp>’</dt>
+<dd><p>Set audio device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select pixel format to be used by DirectShow. This may only be set when
+the video codec is not set or set to rawvideo.
+</p>
+</dd>
+<dt> ‘<samp>audio_buffer_size</samp>’</dt>
+<dd><p>Set audio device buffer size in milliseconds (which can directly
+impact latency, depending on the device).
+Defaults to using the audio device’s
+default buffer size (typically some multiple of 500ms).
+Setting this value too low can degrade performance.
+See also
+<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx</a>
+</p>
+</dd>
+</dl>
+
+<a name="Examples-92"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-92">26.3.2 Examples</a></h3>
+
+<ul>
+<li>
+Print the list of DirectShow supported devices and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f dshow -i dummy
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open second video device with name <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var> and audio device <var>Microphone</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
+</pre></td></tr></table>
+
+</li><li>
+Print the list of supported options in selected device and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_options true -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="dv1394"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-dv1394">26.4 dv1394</a></h2>
+
+<p>Linux DV 1394 input device.
+</p>
+<a name="fbdev-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fbdev-1">26.5 fbdev</a></h2>
+
+<p>Linux framebuffer input device.
+</p>
+<p>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
+‘<tt>/dev/fb0</tt>’.
+</p>
+<p>For more detailed information read the file
+Documentation/fb/framebuffer.txt included in the Linux source tree.
+</p>
+<p>To record from the framebuffer device ‘<tt>/dev/fb0</tt>’ with
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
+</pre></td></tr></table>
+
+<p>You can take a single screenshot image with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
+</pre></td></tr></table>
+
+<p>See also <a href="http://linux-fbdev.sourceforge.net/">http://linux-fbdev.sourceforge.net/</a>, and fbset(1).
+</p>
+<a name="iec61883"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-iec61883">26.6 iec61883</a></h2>
+
+<p>FireWire DV/HDV input device using libiec61883.
+</p>
+<p>To enable this input device, you need libiec61883, libraw1394 and
+libavc1394 installed on your system. Use the configure option
+<code>--enable-libiec61883</code> to compile with the device enabled.
+</p>
+<p>The iec61883 capture device supports capturing from a video device
+connected via IEEE1394 (FireWire), using libiec61883 and the new Linux
+FireWire stack (juju). This is the default DV/HDV input method in Linux
+Kernel 2.6.37 and later, since the old FireWire stack was removed.
+</p>
+<p>Specify the FireWire port to be used as input file, or "auto"
+to choose the first port connected.
+</p>
+<a name="Options-32"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-32">26.6.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>dvtype</samp>’</dt>
+<dd><p>Override autodetection of DV/HDV. This should only be used if auto
+detection does not work, or if usage of a different device type
+should be prohibited. Treating a DV device as HDV (or vice versa) will
+not work and result in undefined behavior.
+The values ‘<samp>auto</samp>’, ‘<samp>dv</samp>’ and ‘<samp>hdv</samp>’ are supported.
+</p>
+</dd>
+<dt> ‘<samp>dvbuffer</samp>’</dt>
+<dd><p>Set maxiumum size of buffer for incoming data, in frames. For DV, this
+is an exact value. For HDV, it is not frame exact, since HDV does
+not have a fixed frame size.
+</p>
+</dd>
+<dt> ‘<samp>dvguid</samp>’</dt>
+<dd><p>Select the capture device by specifying it’s GUID. Capturing will only
+be performed from the specified device and fails if no device with the
+given GUID is found. This is useful to select the input if multiple
+devices are connected at the same time.
+Look at /sys/bus/firewire/devices to find out the GUIDs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-2">26.6.2 Examples</a></h3>
+
+<ul>
+<li>
+Grab and show the input of a FireWire DV/HDV device.
+<table><tr><td> </td><td><pre class="example">ffplay -f iec61883 -i auto
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a FireWire DV/HDV device,
+using a packet buffer of 100000 packets if the source is HDV.
+<table><tr><td> </td><td><pre class="example">ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="jack"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-jack">26.7 jack</a></h2>
+
+<p>JACK input device.
+</p>
+<p>To enable this input device during configuration you need libjack
+installed on your system.
+</p>
+<p>A JACK input device creates one or more JACK writable clients, one for
+each audio channel, with name <var>client_name</var>:input_<var>N</var>, where
+<var>client_name</var> is the name provided by the application, and <var>N</var>
+is a number which identifies the channel.
+Each writable client will send the acquired data to the FFmpeg input
+device.
+</p>
+<p>Once you have created one or more JACK readable clients, you need to
+connect them to one or more JACK writable clients.
+</p>
+<p>To connect or disconnect JACK clients you can use the <code>jack_connect</code>
+and <code>jack_disconnect</code> programs, or do it through a graphical interface,
+for example with <code>qjackctl</code>.
+</p>
+<p>To list the JACK clients and their properties you can invoke the command
+<code>jack_lsp</code>.
+</p>
+<p>Follows an example which shows how to capture a JACK readable client
+with <code>ffmpeg</code>.
+</p><table><tr><td> </td><td><pre class="example"># 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
+</pre></td></tr></table>
+
+<p>For more information read:
+<a href="http://jackaudio.org/">http://jackaudio.org/</a>
+</p>
+<a name="lavfi"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-lavfi">26.8 lavfi</a></h2>
+
+<p>Libavfilter input virtual device.
+</p>
+<p>This input device reads data from the open output pads of a libavfilter
+filtergraph.
+</p>
+<p>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 ‘<samp>graph</samp>’.
+</p>
+<a name="Options-34"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-34">26.8.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>graph</samp>’</dt>
+<dd><p>Specify the filtergraph to use as input. Each video open output must be
+labelled by a unique string of the form "out<var>N</var>", where <var>N</var> 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.
+</p>
+<p>If not specified defaults to the filename specified for the input
+device.
+</p>
+</dd>
+<dt> ‘<samp>graph_file</samp>’</dt>
+<dd><p>Set the filename of the filtergraph to be read and sent to the other
+filters. Syntax of the filtergraph is the same as the one specified by
+the option <var>graph</var>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-66"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-66">26.8.2 Examples</a></h3>
+
+<ul>
+<li>
+Create a color video stream and play it back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "color=c=pink [out0]" dummy
+</pre></td></tr></table>
+
+</li><li>
+As the previous example, but use filename for specifying the graph
+description, and omit the "out0" label:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi color=c=pink
+</pre></td></tr></table>
+
+</li><li>
+Create three different video test filtered sources and play them:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream from a file using the amovie source and play it
+back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "amovie=test.wav"
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream and a video stream and play it back with
+<code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="libdc1394"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-libdc1394">26.9 libdc1394</a></h2>
+
+<p>IIDC1394 input device, based on libdc1394 and libraw1394.
+</p>
+<a name="openal"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-openal">26.10 openal</a></h2>
+
+<p>The OpenAL input device provides audio capture on all systems with a
+working OpenAL 1.1 implementation.
+</p>
+<p>To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with <code>--enable-openal</code>.
+</p>
+<p>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
+<code>--extra-cflags</code> and <code>--extra-ldflags</code> for allowing the build
+system to locate the OpenAL headers and libraries.
+</p>
+<p>An incomplete list of OpenAL implementations follows:
+</p>
+<dl compact="compact">
+<dt> <strong>Creative</strong></dt>
+<dd><p>The official Windows implementation, providing hardware acceleration
+with supported devices and software fallback.
+See <a href="http://openal.org/">http://openal.org/</a>.
+</p></dd>
+<dt> <strong>OpenAL Soft</strong></dt>
+<dd><p>Portable, open source (LGPL) software implementation. Includes
+backends for the most common sound APIs on the Windows, Linux,
+Solaris, and BSD operating systems.
+See <a href="http://kcat.strangesoft.net/openal.html">http://kcat.strangesoft.net/openal.html</a>.
+</p></dd>
+<dt> <strong>Apple</strong></dt>
+<dd><p>OpenAL is part of Core Audio, the official Mac OS X Audio interface.
+See <a href="http://developer.apple.com/technologies/mac/audio-and-video.html">http://developer.apple.com/technologies/mac/audio-and-video.html</a>
+</p></dd>
+</dl>
+
+<p>This device allows one to capture from an audio input device handled
+through OpenAL.
+</p>
+<p>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 <var>list_devices</var>.
+</p>
+<a name="Options-33"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-33">26.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio. Only the values
+‘<samp>1</samp>’ (monaural) and ‘<samp>2</samp>’ (stereo) are currently supported.
+Defaults to ‘<samp>2</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio. Only the values
+‘<samp>8</samp>’ and ‘<samp>16</samp>’ are currently supported. Defaults to
+‘<samp>16</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+Defaults to ‘<samp>44.1k</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-42"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-42">26.10.2 Examples</a></h3>
+
+<p>Print the list of OpenAL supported devices and exit:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f openal -i dummy out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the OpenAL device ‘<tt>DR-BT101 via PulseAudio</tt>’:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the default device (note the empty string ” as filename):
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i '' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from two devices simultaneously, writing to two different files,
+within the same <code>ffmpeg</code> command:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
+</pre></td></tr></table>
+<p>Note: not all OpenAL implementations support multiple simultaneous capture -
+try the latest OpenAL Soft if the above does not work.
+</p>
+<a name="oss"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-oss">26.11 oss</a></h2>
+
+<p>Open Sound System input device.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the OSS input device, and is usually set to
+‘<tt>/dev/dsp</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/dsp</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
+</pre></td></tr></table>
+
+<p>For more information about OSS see:
+<a href="http://manuals.opensound.com/usersguide/dsp.html">http://manuals.opensound.com/usersguide/dsp.html</a>
+</p>
+<a name="pulse"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pulse">26.12 pulse</a></h2>
+
+<p>PulseAudio input device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-libpulse</code>.
+</p>
+<p>The filename to provide to the input device is a source device or the
+string "default"
+</p>
+<p>To list the PulseAudio source devices and their properties you can invoke
+the command <code>pactl list sources</code>.
+</p>
+<p>More information about PulseAudio can be found on <a href="http://www.pulseaudio.org">http://www.pulseaudio.org</a>.
+</p>
+<a name="Options-6"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-6">26.12.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>Connect to a specific PulseAudio server, specified by an IP address.
+Default server is used when not provided.
+</p>
+</dd>
+<dt> ‘<samp>name</samp>’</dt>
+<dd><p>Specify the application name PulseAudio will use when showing active clients,
+by default it is the <code>LIBAVFORMAT_IDENT</code> string.
+</p>
+</dd>
+<dt> ‘<samp>stream_name</samp>’</dt>
+<dd><p>Specify the stream name PulseAudio will use when showing active streams,
+by default it is "record".
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Specify the samplerate in Hz, by default 48kHz is used.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Specify the channels in use, by default 2 (stereo) is set.
+</p>
+</dd>
+<dt> ‘<samp>frame_size</samp>’</dt>
+<dd><p>Specify the number of bytes per frame, by default it is set to 1024.
+</p>
+</dd>
+<dt> ‘<samp>fragment_size</samp>’</dt>
+<dd><p>Specify the minimal buffering fragment in PulseAudio, it will affect the
+audio latency. By default it is unset.
+</p></dd>
+</dl>
+
+<a name="Examples-33"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-33">26.12.2 Examples</a></h3>
+<p>Record a stream from default device:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f pulse -i default /tmp/pulse.wav
+</pre></td></tr></table>
+
+<a name="sndio"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sndio">26.13 sndio</a></h2>
+
+<p>sndio input device.
+</p>
+<p>To enable this input device during configuration you need libsndio
+installed on your system.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the sndio input device, and is usually set to
+‘<tt>/dev/audio0</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/audio0</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
+</pre></td></tr></table>
+
+<a name="video4linux2_002c-v4l2"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-video4linux2_002c-v4l2">26.14 video4linux2, v4l2</a></h2>
+
+<p>Video4Linux2 input video device.
+</p>
+<p>"v4l2" can be used as alias for "video4linux2".
+</p>
+<p>If FFmpeg is built with v4l-utils support (by using the
+<code>--enable-libv4l2</code> configure option), it is possible to use it with the
+<code>-use_libv4l2</code> input device option.
+</p>
+<p>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 ‘<tt>/dev/video<var>N</var></tt>’, where <var>N</var> is a number associated to
+the device.
+</p>
+<p>Video4Linux2 devices usually support a limited set of
+<var>width</var>x<var>height</var> sizes and frame rates. You can check which are
+supported using <code>-list_formats all</code> for Video4Linux2 devices.
+Some devices, like TV cards, support one or more standards. It is possible
+to list all the supported standards using <code>-list_standards all</code>.
+</p>
+<p>The time base for the timestamps is 1 microsecond. Depending on the kernel
+version and configuration, the timestamps may be derived from the real time
+clock (origin at the Unix Epoch) or the monotonic clock (origin usually at
+boot time, unaffected by NTP or manual changes to the clock). The
+‘<samp>-timestamps abs</samp>’ or ‘<samp>-ts abs</samp>’ option can be used to force
+conversion into the real time clock.
+</p>
+<p>Some usage examples of the video4linux2 device with <code>ffmpeg</code>
+and <code>ffplay</code>:
+</p><ul>
+<li>
+Grab and show the input of a video4linux2 device:
+<table><tr><td> </td><td><pre class="example">ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a video4linux2 device, leave the
+frame rate and size as previously set:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about Video4Linux, check <a href="http://linuxtv.org/">http://linuxtv.org/</a>.
+</p>
+<a name="Options-40"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-40">26.14.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>standard</samp>’</dt>
+<dd><p>Set the standard. Must be the name of a supported standard. To get a
+list of the supported standards, use the ‘<samp>list_standards</samp>’
+option.
+</p>
+</dd>
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>Set the input channel number. Default to -1, which means using the
+previously selected channel.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. The argument must be a string in the form
+<var>WIDTH</var>x<var>HEIGHT</var> or a valid size abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select the pixel format (only valid for raw video input).
+</p>
+</dd>
+<dt> ‘<samp>input_format</samp>’</dt>
+<dd><p>Set the preferred pixel format (for raw video) or a codec name.
+This option allows one to select the input format, when several are
+available.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the preferred video frame rate.
+</p>
+</dd>
+<dt> ‘<samp>list_formats</samp>’</dt>
+<dd><p>List available formats (supported pixel formats, codecs, and frame
+sizes) and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all available (compressed and non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>Show only raw video (non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>compressed</samp>’</dt>
+<dd><p>Show only compressed formats.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>list_standards</samp>’</dt>
+<dd><p>List supported standards and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all supported standards.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>timestamps, ts</samp>’</dt>
+<dd><p>Set type of timestamps for grabbed frames.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Use timestamps from the kernel.
+</p>
+</dd>
+<dt> ‘<samp>abs</samp>’</dt>
+<dd><p>Use absolute timestamps (wall clock).
+</p>
+</dd>
+<dt> ‘<samp>mono2abs</samp>’</dt>
+<dd><p>Force conversion from monotonic to absolute timestamps.
+</p></dd>
+</dl>
+
+<p>Default value is <code>default</code>.
+</p></dd>
+</dl>
+
+<a name="vfwcap"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-vfwcap">26.15 vfwcap</a></h2>
+
+<p>VfW (Video for Windows) capture input device.
+</p>
+<p>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.
+</p>
+<a name="x11grab"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-x11grab">26.16 x11grab</a></h2>
+
+<p>X11 video input device.
+</p>
+<p>This device allows one to capture a region of an X11 display.
+</p>
+<p>The filename passed as input has the syntax:
+</p><table><tr><td> </td><td><pre class="example">[<var>hostname</var>]:<var>display_number</var>.<var>screen_number</var>[+<var>x_offset</var>,<var>y_offset</var>]
+</pre></td></tr></table>
+
+<p><var>hostname</var>:<var>display_number</var>.<var>screen_number</var> specifies the
+X11 display name of the screen to grab from. <var>hostname</var> can be
+omitted, and defaults to "localhost". The environment variable
+<code>DISPLAY</code> contains the default display name.
+</p>
+<p><var>x_offset</var> and <var>y_offset</var> specify the offsets of the grabbed
+area with respect to the top-left border of the X11 screen. They
+default to 0.
+</p>
+<p>Check the X11 documentation (e.g. man X) for more detailed information.
+</p>
+<p>Use the <code>dpyinfo</code> program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+</p>
+<p>For example to grab from ‘<tt>:0.0</tt>’ using <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>Grab at position <code>10,20</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<a name="Options-25"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-25">26.16.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>draw_mouse</samp>’</dt>
+<dd><p>Specify whether to draw the mouse pointer. A value of <code>0</code> specify
+not to draw the pointer. Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>follow_mouse</samp>’</dt>
+<dd><p>Make the grabbed area follow the mouse. The argument can be
+<code>centered</code> or a number of pixels <var>PIXELS</var>.
+</p>
+<p>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 <var>PIXELS</var> (greater than
+zero) to the edge of region.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>To follow only when the mouse pointer reaches within 100 pixels to edge:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the grabbing frame rate. Default value is <code>ntsc</code>,
+corresponding to a frame rate of <code>30000/1001</code>.
+</p>
+</dd>
+<dt> ‘<samp>show_region</samp>’</dt>
+<dd><p>Show grabbed region on screen.
+</p>
+<p>If <var>show_region</var> is specified with <code>1</code>, then the grabbing
+region will be indicated on screen. With this option, it is easy to
+know what is being grabbed if only a portion of the screen is grabbed.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<p>With <var>follow_mouse</var>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. Default value is <code>vga</code>.
+</p></dd>
+</dl>
+
+<a name="Output-Devices"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Output-Devices">27. Output Devices</a></h1>
+
+<p>Output devices are configured elements in FFmpeg that can write
+multimedia data to an output device attached to your system.
+</p>
+<p>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".
+</p>
+<p>You can disable all the output devices using the configure option
+"–disable-outdevs", and selectively enable an output device using the
+option "–enable-outdev=<var>OUTDEV</var>", or you can disable a particular
+input device using the option "–disable-outdev=<var>OUTDEV</var>".
+</p>
+<p>The option "-formats" of the ff* tools will display the list of
+enabled output devices (amongst the muxers).
+</p>
+<p>A description of the currently available output devices follows.
+</p>
+<a name="alsa-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-alsa-1">27.1 alsa</a></h2>
+
+<p>ALSA (Advanced Linux Sound Architecture) output device.
+</p>
+<a name="Examples-53"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-53">27.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Play a file on default ALSA device:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f alsa default
+</pre></td></tr></table>
+
+</li><li>
+Play a file on soundcard 1, audio device 7:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f alsa hw:1,7
+</pre></td></tr></table>
+</li></ul>
+
+<a name="caca"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-caca">27.2 caca</a></h2>
+
+<p>CACA output device.
+</p>
+<p>This output device allows one to show a video stream in CACA window.
+Only one CACA window is allowed per application, so you can
+have only one instance of this output device in an application.
+</p>
+<p>To enable this output device you need to configure FFmpeg with
+<code>--enable-libcaca</code>.
+libcaca is a graphics library that outputs text instead of pixels.
+</p>
+<p>For more information about libcaca, check:
+<a href="http://caca.zoy.org/wiki/libcaca">http://caca.zoy.org/wiki/libcaca</a>
+</p>
+<a name="Options-45"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-45">27.2.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the CACA window title, if not specified default to the filename
+specified for the output device.
+</p>
+</dd>
+<dt> ‘<samp>window_size</samp>’</dt>
+<dd><p>Set the CACA window size, can be a string of the form
+<var>width</var>x<var>height</var> or a video size abbreviation.
+If not specified it defaults to the size of the input video.
+</p>
+</dd>
+<dt> ‘<samp>driver</samp>’</dt>
+<dd><p>Set display driver.
+</p>
+</dd>
+<dt> ‘<samp>algorithm</samp>’</dt>
+<dd><p>Set dithering algorithm. Dithering is necessary
+because the picture being rendered has usually far more colours than
+the available palette.
+The accepted values are listed with <code>-list_dither algorithms</code>.
+</p>
+</dd>
+<dt> ‘<samp>antialias</samp>’</dt>
+<dd><p>Set antialias method. Antialiasing smoothens the rendered
+image and avoids the commonly seen staircase effect.
+The accepted values are listed with <code>-list_dither antialiases</code>.
+</p>
+</dd>
+<dt> ‘<samp>charset</samp>’</dt>
+<dd><p>Set which characters are going to be used when rendering text.
+The accepted values are listed with <code>-list_dither charsets</code>.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Set color to be used when rendering text.
+The accepted values are listed with <code>-list_dither colors</code>.
+</p>
+</dd>
+<dt> ‘<samp>list_drivers</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of available drivers and exit.
+</p>
+</dd>
+<dt> ‘<samp>list_dither</samp>’</dt>
+<dd><p>List available dither options related to the argument.
+The argument must be one of <code>algorithms</code>, <code>antialiases</code>,
+<code>charsets</code>, <code>colors</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-84"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-84">27.2.2 Examples</a></h3>
+
+<ul>
+<li>
+The following command shows the <code>ffmpeg</code> output is an
+CACA window, forcing its size to 80x25:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vcodec rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
+</pre></td></tr></table>
+
+</li><li>
+Show the list of available drivers and exit:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
+</pre></td></tr></table>
+
+</li><li>
+Show the list of available dither colors and exit:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="decklink"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-decklink">27.3 decklink</a></h2>
+
+<p>The decklink output device provides playback capabilities for Blackmagic
+DeckLink devices.
+</p>
+<p>To enable this output device, you need the Blackmagic DeckLink SDK and you
+need to configure with the appropriate <code>--extra-cflags</code>
+and <code>--extra-ldflags</code>.
+On Windows, you need to run the IDL files through <code>widl</code>.
+</p>
+<p>DeckLink is very picky about the formats it supports. Pixel format is always
+uyvy422, framerate and video size must be determined for your device with
+<code>-list_formats 1</code>. Audio sample rate is always 48 kHz.
+</p>
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options">27.3.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>list_formats</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of supported formats and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>preroll</samp>’</dt>
+<dd><p>Amount of time to preroll video in seconds.
+Defaults to ‘<samp>0.5</samp>’.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-61"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-61">27.3.2 Examples</a></h3>
+
+<ul>
+<li>
+List output devices:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -list_devices 1 dummy
+</pre></td></tr></table>
+
+</li><li>
+List supported formats:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
+</pre></td></tr></table>
+
+</li><li>
+Play video clip:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
+</pre></td></tr></table>
+
+</li><li>
+Play video clip with non-standard framerate or video size:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="fbdev"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fbdev">27.4 fbdev</a></h2>
+
+<p>Linux framebuffer output device.
+</p>
+<p>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
+‘<tt>/dev/fb0</tt>’.
+</p>
+<p>For more detailed information read the file
+‘<tt>Documentation/fb/framebuffer.txt</tt>’ included in the Linux source tree.
+</p>
+<a name="Options-36"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-36">27.4.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>xoffset</samp>’</dt>
+<dt> ‘<samp>yoffset</samp>’</dt>
+<dd><p>Set x/y coordinate of top left corner. Default is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-36"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-36">27.4.2 Examples</a></h3>
+<p>Play a file on framebuffer device ‘<tt>/dev/fb0</tt>’.
+Required pixel format depends on current framebuffer settings.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i INPUT -vcodec rawvideo -pix_fmt bgra -f fbdev /dev/fb0
+</pre></td></tr></table>
+
+<p>See also <a href="http://linux-fbdev.sourceforge.net/">http://linux-fbdev.sourceforge.net/</a>, and fbset(1).
+</p>
+<a name="opengl"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-opengl">27.5 opengl</a></h2>
+<p>OpenGL output device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-opengl</code>.
+</p>
+<p>This output device allows one to render to OpenGL context.
+Context may be provided by application or default SDL window is created.
+</p>
+<p>When device renders to external context, application must implement handlers for following messages:
+<code>AV_CTL_MESSAGE_CREATE_WINDOW_BUFFER</code> - create OpenGL context on current thread.
+<code>AV_CTL_MESSAGE_PREPARE_WINDOW_BUFFER</code> - make OpenGL context current.
+<code>AV_CTL_MESSAGE_DISPLAY_WINDOW_BUFFER</code> - swap buffers.
+<code>AV_CTL_MESSAGE_DESTROY_WINDOW_BUFFER</code> - destroy OpenGL context.
+Application is also required to inform a device about current resolution by sending <code>AV_DEVICE_WINDOW_RESIZED</code> message.
+</p>
+<a name="Options-18"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-18">27.5.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>background</samp>’</dt>
+<dd><p>Set background color. Black is a default.
+</p></dd>
+<dt> ‘<samp>no_window</samp>’</dt>
+<dd><p>Disables default SDL window when set to non-zero value.
+Application must provide OpenGL context and both <code>window_size_cb</code> and <code>window_swap_buffers_cb</code> callbacks when set.
+</p></dd>
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the SDL window title, if not specified default to the filename specified for the output device.
+Ignored when ‘<samp>no_window</samp>’ is set.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-100"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-100">27.5.2 Examples</a></h3>
+<p>Play a file on SDL window using OpenGL rendering:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f opengl "window title"
+</pre></td></tr></table>
+
+<a name="oss-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-oss-1">27.6 oss</a></h2>
+
+<p>OSS (Open Sound System) output device.
+</p>
+<a name="pulse-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pulse-1">27.7 pulse</a></h2>
+
+<p>PulseAudio output device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-libpulse</code>.
+</p>
+<p>More information about PulseAudio can be found on <a href="http://www.pulseaudio.org">http://www.pulseaudio.org</a>
+</p>
+<a name="Options-11"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-11">27.7.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>Connect to a specific PulseAudio server, specified by an IP address.
+Default server is used when not provided.
+</p>
+</dd>
+<dt> ‘<samp>name</samp>’</dt>
+<dd><p>Specify the application name PulseAudio will use when showing active clients,
+by default it is the <code>LIBAVFORMAT_IDENT</code> string.
+</p>
+</dd>
+<dt> ‘<samp>stream_name</samp>’</dt>
+<dd><p>Specify the stream name PulseAudio will use when showing active streams,
+by default it is set to the specified output name.
+</p>
+</dd>
+<dt> ‘<samp>device</samp>’</dt>
+<dd><p>Specify the device to use. Default device is used when not provided.
+List of output devices can be obtained with command <code>pactl list sinks</code>.
+</p>
+</dd>
+<dt> ‘<samp>buffer_size</samp>’</dt>
+<dt> ‘<samp>buffer_duration</samp>’</dt>
+<dd><p>Control the size and duration of the PulseAudio buffer. A small buffer
+gives more control, but requires more frequent updates.
+</p>
+<p>‘<samp>buffer_size</samp>’ specifies size in bytes while
+‘<samp>buffer_duration</samp>’ specifies duration in milliseconds.
+</p>
+<p>When both options are provided then the highest value is used
+(duration is recalculated to bytes using stream parameters). If they
+are set to 0 (which is default), the device will use the default
+PulseAudio duration value. By default PulseAudio set buffer duration
+to around 2 seconds.
+</p></dd>
+</dl>
+
+<a name="Examples-56"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-56">27.7.2 Examples</a></h3>
+<p>Play a file on default device on default server:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f pulse "stream name"
+</pre></td></tr></table>
+
+<a name="sdl"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sdl">27.8 sdl</a></h2>
+
+<p>SDL (Simple DirectMedia Layer) output device.
+</p>
+<p>This output device allows one 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.
+</p>
+<p>To enable this output device you need libsdl installed on your system
+when configuring your build.
+</p>
+<p>For more information about SDL, check:
+<a href="http://www.libsdl.org/">http://www.libsdl.org/</a>
+</p>
+<a name="Options-38"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-38">27.8.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the SDL window title, if not specified default to the filename
+specified for the output device.
+</p>
+</dd>
+<dt> ‘<samp>icon_title</samp>’</dt>
+<dd><p>Set the name of the iconified SDL window, if not specified it is set
+to the same value of <var>window_title</var>.
+</p>
+</dd>
+<dt> ‘<samp>window_size</samp>’</dt>
+<dd><p>Set the SDL window size, can be a string of the form
+<var>width</var>x<var>height</var> or a video size abbreviation.
+If not specified it defaults to the size of the input video,
+downscaled according to the aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>window_fullscreen</samp>’</dt>
+<dd><p>Set fullscreen mode when non-zero value is provided.
+Default value is zero.
+</p></dd>
+</dl>
+
+<a name="Interactive-commands"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Interactive-commands">27.8.2 Interactive commands</a></h3>
+
+<p>The window created by the device can be controlled through the
+following interactive commands.
+</p>
+<dl compact="compact">
+<dt> <q, ESC></dt>
+<dd><p>Quit the device immediately.
+</p></dd>
+</dl>
+
+<a name="Examples-32"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-32">27.8.3 Examples</a></h3>
+
+<p>The following command shows the <code>ffmpeg</code> output is an
+SDL window, forcing its size to the qcif format:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
+</pre></td></tr></table>
+
+<a name="sndio-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sndio-1">27.9 sndio</a></h2>
+
+<p>sndio audio output device.
+</p>
+<a name="xv"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-xv">27.10 xv</a></h2>
+
+<p>XV (XVideo) output device.
+</p>
+<p>This output device allows one to show a video stream in a X Window System
+window.
+</p>
+<a name="Options-4"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-4">27.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>display_name</samp>’</dt>
+<dd><p>Specify the hardware display name, which determines the display and
+communications domain to be used.
+</p>
+<p>The display name or DISPLAY environment variable can be a string in
+the format <var>hostname</var>[:<var>number</var>[.<var>screen_number</var>]].
+</p>
+<p><var>hostname</var> specifies the name of the host machine on which the
+display is physically attached. <var>number</var> specifies the number of
+the display server on that host machine. <var>screen_number</var> specifies
+the screen to be used on that server.
+</p>
+<p>If unspecified, it defaults to the value of the DISPLAY environment
+variable.
+</p>
+<p>For example, <code>dual-headed:0.1</code> would specify screen 1 of display
+0 on the machine named “dual-headed”.
+</p>
+<p>Check the X11 specification for more detailed information about the
+display name format.
+</p>
+</dd>
+<dt> ‘<samp>window_size</samp>’</dt>
+<dd><p>Set the created window size, can be a string of the form
+<var>width</var>x<var>height</var> or a video size abbreviation. If not
+specified it defaults to the size of the input video.
+</p>
+</dd>
+<dt> ‘<samp>window_x</samp>’</dt>
+<dt> ‘<samp>window_y</samp>’</dt>
+<dd><p>Set the X and Y window offsets for the created window. They are both
+set to 0 by default. The values may be ignored by the window manager.
+</p>
+</dd>
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the window title, if not specified default to the filename
+specified for the output device.
+</p></dd>
+</dl>
+
+<p>For more information about XVideo see <a href="http://www.x.org/">http://www.x.org/</a>.
+</p>
+<a name="Examples-26"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-26">27.10.2 Examples</a></h3>
+
+<ul>
+<li>
+Decode, display and encode video input with <code>ffmpeg</code> at the
+same time:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT OUTPUT -f xv display
+</pre></td></tr></table>
+
+</li><li>
+Decode and display the input video to multiple X11 windows:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Resampler-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Resampler-Options">28. Resampler Options</a></h1>
+
+<p>The audio resampler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, <var>option</var>=<var>value</var> for the aresample filter,
+by setting the value explicitly in the
+<code>SwrContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API for
+programmatic use.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ich, in_channel_count</samp>’</dt>
+<dd><p>Set the number of input channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>in_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>och, out_channel_count</samp>’</dt>
+<dd><p>Set the number of output channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>out_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>uch, used_channel_count</samp>’</dt>
+<dd><p>Set the number of used input channels. Default value is 0. This option is
+only used for special remapping.
+</p>
+</dd>
+<dt> ‘<samp>isr, in_sample_rate</samp>’</dt>
+<dd><p>Set the input sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>osr, out_sample_rate</samp>’</dt>
+<dd><p>Set the output sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>isf, in_sample_fmt</samp>’</dt>
+<dd><p>Specify the input sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>osf, out_sample_fmt</samp>’</dt>
+<dd><p>Specify the output sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>tsf, internal_sample_fmt</samp>’</dt>
+<dd><p>Set the internal sample format. Default value is <code>none</code>.
+This will automatically be chosen when it is not explicitly set.
+</p>
+</dd>
+<dt> ‘<samp>icl, in_channel_layout</samp>’</dt>
+<dt> ‘<samp>ocl, out_channel_layout</samp>’</dt>
+<dd><p>Set the input/output channel layout.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p>
+</dd>
+<dt> ‘<samp>clev, center_mix_level</samp>’</dt>
+<dd><p>Set the center mix level. It is a value expressed in deciBel, and must be
+in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>slev, surround_mix_level</samp>’</dt>
+<dd><p>Set the surround mix level. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>lfe_mix_level</samp>’</dt>
+<dd><p>Set LFE mix into non LFE level. It is used when there is a LFE input but no
+LFE output. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>rmvol, rematrix_volume</samp>’</dt>
+<dd><p>Set rematrix volume. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>rematrix_maxval</samp>’</dt>
+<dd><p>Set maximum output value for rematrixing.
+This can be used to prevent clipping vs. preventing volumn reduction
+A value of 1.0 prevents cliping.
+</p>
+</dd>
+<dt> ‘<samp>flags, swr_flags</samp>’</dt>
+<dd><p>Set flags used by the converter. Default value is 0.
+</p>
+<p>It supports the following individual flags:
+</p><dl compact="compact">
+<dt> ‘<samp>res</samp>’</dt>
+<dd><p>force resampling, this flag forces resampling to be used even when the
+input and output sample rates match.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dither_scale</samp>’</dt>
+<dd><p>Set the dither scale. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>dither_method</samp>’</dt>
+<dd><p>Set dither method. Default value is 0.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>rectangular</samp>’</dt>
+<dd><p>select rectangular dither
+</p></dd>
+<dt> ‘<samp>triangular</samp>’</dt>
+<dd><p>select triangular dither
+</p></dd>
+<dt> ‘<samp>triangular_hp</samp>’</dt>
+<dd><p>select triangular dither with high pass
+</p></dd>
+<dt> ‘<samp>lipshitz</samp>’</dt>
+<dd><p>select lipshitz noise shaping dither
+</p></dd>
+<dt> ‘<samp>shibata</samp>’</dt>
+<dd><p>select shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>low_shibata</samp>’</dt>
+<dd><p>select low shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>high_shibata</samp>’</dt>
+<dd><p>select high shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>f_weighted</samp>’</dt>
+<dd><p>select f-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>modified_e_weighted</samp>’</dt>
+<dd><p>select modified-e-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>improved_e_weighted</samp>’</dt>
+<dd><p>select improved-e-weighted noise shaping dither
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>resampler</samp>’</dt>
+<dd><p>Set resampling engine. Default value is swr.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>swr</samp>’</dt>
+<dd><p>select the native SW Resampler; filter options precision and cheby are not
+applicable in this case.
+</p></dd>
+<dt> ‘<samp>soxr</samp>’</dt>
+<dd><p>select the SoX Resampler (where available); compensation, and filter options
+filter_size, phase_shift, filter_type & kaiser_beta, are not applicable in this
+case.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>filter_size</samp>’</dt>
+<dd><p>For swr only, set resampling filter size, default value is 32.
+</p>
+</dd>
+<dt> ‘<samp>phase_shift</samp>’</dt>
+<dd><p>For swr only, set resampling phase shift, default value is 10, and must be in
+the interval [0,30].
+</p>
+</dd>
+<dt> ‘<samp>linear_interp</samp>’</dt>
+<dd><p>Use Linear Interpolation if set to 1, default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>cutoff</samp>’</dt>
+<dd><p>Set cutoff frequency (swr: 6dB point; soxr: 0dB point) ratio; must be a float
+value between 0 and 1. Default value is 0.97 with swr, and 0.91 with soxr
+(which, with a sample-rate of 44100, preserves the entire audio band to 20kHz).
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>For soxr only, the precision in bits to which the resampled signal will be
+calculated. The default value of 20 (which, with suitable dithering, is
+appropriate for a destination bit-depth of 16) gives SoX’s ’High Quality’; a
+value of 28 gives SoX’s ’Very High Quality’.
+</p>
+</dd>
+<dt> ‘<samp>cheby</samp>’</dt>
+<dd><p>For soxr only, selects passband rolloff none (Chebyshev) & higher-precision
+approximation for ’irrational’ ratios. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>async</samp>’</dt>
+<dd><p>For swr only, simple 1 parameter audio sync to timestamps using stretching,
+squeezing, filling and trimming. Setting this to 1 will enable filling and
+trimming, larger values represent the maximum amount in samples that the data
+may be stretched or squeezed for each second.
+Default value is 0, thus no compensation is applied to make the samples match
+the audio timestamps.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>For swr only, assume the first pts should be this value. The time unit is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+<dt> ‘<samp>min_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger stretching/squeezing/filling or trimming of the
+data to make it match the timestamps. The default is that
+stretching/squeezing/filling and trimming is disabled
+(‘<samp>min_comp</samp>’ = <code>FLT_MAX</code>).
+</p>
+</dd>
+<dt> ‘<samp>min_hard_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger adding/dropping samples to make it match the
+timestamps. This option effectively is a threshold to select between
+hard (trim/fill) and soft (squeeze/stretch) compensation. Note that
+all compensation is by default disabled through ‘<samp>min_comp</samp>’.
+The default is 0.1.
+</p>
+</dd>
+<dt> ‘<samp>comp_duration</samp>’</dt>
+<dd><p>For swr only, set duration (in seconds) over which data is stretched/squeezed
+to make it match the timestamps. Must be a non-negative double float value,
+default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>max_soft_comp</samp>’</dt>
+<dd><p>For swr only, set maximum factor by which data is stretched/squeezed to make it
+match the timestamps. Must be a non-negative double float value, default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>matrix_encoding</samp>’</dt>
+<dd><p>Select matrixed stereo encoding.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>select none
+</p></dd>
+<dt> ‘<samp>dolby</samp>’</dt>
+<dd><p>select Dolby
+</p></dd>
+<dt> ‘<samp>dplii</samp>’</dt>
+<dd><p>select Dolby Pro Logic II
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>filter_type</samp>’</dt>
+<dd><p>For swr only, select resampling filter type. This only affects resampling
+operations.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>cubic</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>blackman_nuttall</samp>’</dt>
+<dd><p>select Blackman Nuttall Windowed Sinc
+</p></dd>
+<dt> ‘<samp>kaiser</samp>’</dt>
+<dd><p>select Kaiser Windowed Sinc
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>kaiser_beta</samp>’</dt>
+<dd><p>For swr only, set Kaiser Window Beta value. Must be an integer in the
+interval [2,16], default value is 9.
+</p>
+</dd>
+<dt> ‘<samp>output_sample_bits</samp>’</dt>
+<dd><p>For swr only, set number of used output sample bits for dithering. Must be an integer in the
+interval [0,64], default value is 0, which means it’s not used.
+</p>
+</dd>
+</dl>
+
+<p><a name="scaler_005foptions"></a>
+</p><a name="Scaler-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Scaler-Options">29. Scaler Options</a></h1>
+
+<p>The video scaler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools. For programmatic use, they can be set explicitly in the
+<code>SwsContext</code> options or through the ‘<tt>libavutil/opt.h</tt>’ API.
+</p>
+<dl compact="compact">
+<dd>
+<p><a name="sws_005fflags"></a>
+</p></dd>
+<dt> ‘<samp>sws_flags</samp>’</dt>
+<dd><p>Set the scaler flags. This is also used to set the scaling
+algorithm. Only a single algorithm should be selected.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast_bilinear</samp>’</dt>
+<dd><p>Select fast bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Select bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>Select experimental scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>neighbor</samp>’</dt>
+<dd><p>Select nearest neighbor rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>area</samp>’</dt>
+<dd><p>Select averaging area rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicublin</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm for the luma component, bilinear for
+chroma components.
+</p>
+</dd>
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>Select Gaussian rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>sinc</samp>’</dt>
+<dd><p>Select sinc rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>lanczos</samp>’</dt>
+<dd><p>Select lanczos rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>spline</samp>’</dt>
+<dd><p>Select natural bicubic spline rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>print_info</samp>’</dt>
+<dd><p>Enable printing/debug logging.
+</p>
+</dd>
+<dt> ‘<samp>accurate_rnd</samp>’</dt>
+<dd><p>Enable accurate rounding.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_int</samp>’</dt>
+<dd><p>Enable full chroma interpolation.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_inp</samp>’</dt>
+<dd><p>Select full chroma input.
+</p>
+</dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Enable bitexact output.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>srcw</samp>’</dt>
+<dd><p>Set source width.
+</p>
+</dd>
+<dt> ‘<samp>srch</samp>’</dt>
+<dd><p>Set source height.
+</p>
+</dd>
+<dt> ‘<samp>dstw</samp>’</dt>
+<dd><p>Set destination width.
+</p>
+</dd>
+<dt> ‘<samp>dsth</samp>’</dt>
+<dd><p>Set destination height.
+</p>
+</dd>
+<dt> ‘<samp>src_format</samp>’</dt>
+<dd><p>Set source pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>dst_format</samp>’</dt>
+<dd><p>Set destination pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>src_range</samp>’</dt>
+<dd><p>Select source range.
+</p>
+</dd>
+<dt> ‘<samp>dst_range</samp>’</dt>
+<dd><p>Select destination range.
+</p>
+</dd>
+<dt> ‘<samp>param0, param1</samp>’</dt>
+<dd><p>Set scaling algorithm parameters. The specified values are specific of
+some scaling algorithms and ignored by others. The specified values
+are floating point number values.
+</p>
+</dd>
+<dt> ‘<samp>sws_dither</samp>’</dt>
+<dd><p>Set the dithering algorithm. Accepts one of the following
+values. Default value is ‘<samp>auto</samp>’.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>automatic choice
+</p>
+</dd>
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>no dithering
+</p>
+</dd>
+<dt> ‘<samp>bayer</samp>’</dt>
+<dd><p>bayer dither
+</p>
+</dd>
+<dt> ‘<samp>ed</samp>’</dt>
+<dd><p>error diffusion dither
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Filtering-Introduction"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Filtering-Introduction">30. Filtering Introduction</a></h1>
+
+<p>Filtering in FFmpeg is enabled through the libavfilter library.
+</p>
+<p>In libavfilter, a filter can have multiple inputs and multiple
+outputs.
+To illustrate the sorts of things that are possible, we consider the
+following filtergraph.
+</p>
+<table><tr><td> </td><td><pre class="example"> [main]
+input --> split ---------------------> overlay --> output
+ | ^
+ |[tmp] [flip]|
+ +-----> crop --> vflip -------+
+</pre></td></tr></table>
+
+<p>This filtergraph splits the input 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:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
+</pre></td></tr></table>
+
+<p>The result will be that in output the top half of the video is mirrored
+onto the bottom half.
+</p>
+<p>Filters in the same linear chain are separated by commas, and distinct
+linear chains of filters are separated by semicolons. In our example,
+<var>crop,vflip</var> are in one linear chain, <var>split</var> and
+<var>overlay</var> are separately in another. The points where the linear
+chains join are labelled by names enclosed in square brackets. In the
+example, the split filter generates two outputs that are associated to
+the labels <var>[main]</var> and <var>[tmp]</var>.
+</p>
+<p>The stream sent to the second output of <var>split</var>, labelled as
+<var>[tmp]</var>, is processed through the <var>crop</var> filter, which crops
+away the lower half part of the video, and then vertically flipped. The
+<var>overlay</var> filter takes in input the first unchanged output of the
+split filter (which was labelled as <var>[main]</var>), and overlay on its
+lower half the output generated by the <var>crop,vflip</var> filterchain.
+</p>
+<p>Some filters take in input a list of parameters: they are specified
+after the filter name and an equal sign, and are separated from each other
+by a colon.
+</p>
+<p>There exist so-called <var>source filters</var> that do not have an
+audio/video input, and <var>sink filters</var> that will not have audio/video
+output.
+</p>
+
+<a name="graph2dot"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-graph2dot">31. graph2dot</a></h1>
+
+<p>The ‘<tt>graph2dot</tt>’ program included in the FFmpeg ‘<tt>tools</tt>’
+directory can be used to parse a filtergraph description and issue a
+corresponding textual representation in the dot language.
+</p>
+<p>Invoke the command:
+</p><table><tr><td> </td><td><pre class="example">graph2dot -h
+</pre></td></tr></table>
+
+<p>to see how to use ‘<tt>graph2dot</tt>’.
+</p>
+<p>You can then pass the dot description to the ‘<tt>dot</tt>’ program (from
+the graphviz suite of programs) and obtain a graphical representation
+of the filtergraph.
+</p>
+<p>For example the sequence of commands:
+</p><table><tr><td> </td><td><pre class="example">echo <var>GRAPH_DESCRIPTION</var> | \
+tools/graph2dot -o graph.tmp && \
+dot -Tpng graph.tmp -o graph.png && \
+display graph.png
+</pre></td></tr></table>
+
+<p>can be used to create and display an image representing the graph
+described by the <var>GRAPH_DESCRIPTION</var> string. Note that this string must be
+a complete self-contained graph, with its inputs and outputs explicitly defined.
+For example if your command line is of the form:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i infile -vf scale=640:360 outfile
+</pre></td></tr></table>
+<p>your <var>GRAPH_DESCRIPTION</var> string will need to be of the form:
+</p><table><tr><td> </td><td><pre class="example">nullsrc,scale=640:360,nullsink
+</pre></td></tr></table>
+<p>you may also need to set the <var>nullsrc</var> parameters and add a <var>format</var>
+filter in order to simulate a specific input file.
+</p>
+
+<a name="Filtergraph-description"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Filtergraph-description">32. Filtergraph description</a></h1>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>A filter with no input pads is called a "source", a filter with no
+output pads is called a "sink".
+</p>
+<p><a name="Filtergraph-syntax"></a>
+</p><a name="Filtergraph-syntax-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Filtergraph-syntax-1">32.1 Filtergraph syntax</a></h2>
+
+<p>A filtergraph can be represented using a textual representation, which is
+recognized by the ‘<samp>-filter</samp>’/‘<samp>-vf</samp>’ and ‘<samp>-filter_complex</samp>’
+options in <code>ffmpeg</code> and ‘<samp>-vf</samp>’ in <code>ffplay</code>, and by the
+<code>avfilter_graph_parse()</code>/<code>avfilter_graph_parse2()</code> function defined in
+‘<tt>libavfilter/avfilter.h</tt>’.
+</p>
+<p>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.
+</p>
+<p>A filtergraph consists of a sequence of filterchains. A sequence of
+filterchains is represented by a list of ";"-separated filterchain
+descriptions.
+</p>
+<p>A filter is represented by a string of the form:
+[<var>in_link_1</var>]...[<var>in_link_N</var>]<var>filter_name</var>=<var>arguments</var>[<var>out_link_1</var>]...[<var>out_link_M</var>]
+</p>
+<p><var>filter_name</var> 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
+"=<var>arguments</var>".
+</p>
+<p><var>arguments</var> is a string which contains the parameters used to
+initialize the filter instance. It may have one of the following forms:
+</p><ul>
+<li>
+A ’:’-separated list of <var>key=value</var> pairs.
+
+</li><li>
+A ’:’-separated list of <var>value</var>. In this case, the keys are assumed to be
+the option names in the order they are declared. E.g. the <code>fade</code> filter
+declares three options in this order – ‘<samp>type</samp>’, ‘<samp>start_frame</samp>’ and
+‘<samp>nb_frames</samp>’. Then the parameter list <var>in:0:30</var> means that the value
+<var>in</var> is assigned to the option ‘<samp>type</samp>’, <var>0</var> to
+‘<samp>start_frame</samp>’ and <var>30</var> to ‘<samp>nb_frames</samp>’.
+
+</li><li>
+A ’:’-separated list of mixed direct <var>value</var> and long <var>key=value</var>
+pairs. The direct <var>value</var> must precede the <var>key=value</var> pairs, and
+follow the same constraints order of the previous point. The following
+<var>key=value</var> pairs can be set in any preferred order.
+
+</li></ul>
+
+<p>If the option value itself is a list of items (e.g. the <code>format</code> filter
+takes a list of pixel formats), the items in the list are usually separated by
+’|’.
+</p>
+<p>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.
+</p>
+<p>The name and arguments of the filter are optionally preceded and
+followed by a list of link labels.
+A link label allows one to name a link and associate it to a filter output
+or input pad. The preceding labels <var>in_link_1</var>
+... <var>in_link_N</var>, are associated to the filter input pads,
+the following labels <var>out_link_1</var> ... <var>out_link_M</var>, are
+associated to the output pads.
+</p>
+<p>When two link labels with the same name are found in the
+filtergraph, a link between the corresponding input and output pad is
+created.
+</p>
+<p>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:
+</p><table><tr><td> </td><td><pre class="example">nullsrc, split[L1], [L2]overlay, nullsink
+</pre></td></tr></table>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>Libavfilter will automatically insert <a href="#scale">scale</a> filters where format
+conversion is required. It is possible to specify swscale flags
+for those automatically inserted scalers by prepending
+<code>sws_flags=<var>flags</var>;</code>
+to the filtergraph description.
+</p>
+<p>Follows a BNF description for the filtergraph syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>NAME</var> ::= sequence of alphanumeric characters and '_'
+<var>LINKLABEL</var> ::= "[" <var>NAME</var> "]"
+<var>LINKLABELS</var> ::= <var>LINKLABEL</var> [<var>LINKLABELS</var>]
+<var>FILTER_ARGUMENTS</var> ::= sequence of chars (eventually quoted)
+<var>FILTER</var> ::= [<var>LINKLABELS</var>] <var>NAME</var> ["=" <var>FILTER_ARGUMENTS</var>] [<var>LINKLABELS</var>]
+<var>FILTERCHAIN</var> ::= <var>FILTER</var> [,<var>FILTERCHAIN</var>]
+<var>FILTERGRAPH</var> ::= [sws_flags=<var>flags</var>;] <var>FILTERCHAIN</var> [;<var>FILTERGRAPH</var>]
+</pre></td></tr></table>
+
+<a name="Notes-on-filtergraph-escaping"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-Notes-on-filtergraph-escaping">32.2 Notes on filtergraph escaping</a></h2>
+
+<p>Filtergraph description composition entails several levels of
+escaping. See <a href="ffmpeg-utils.html#quoting_005fand_005fescaping">(ffmpeg-utils)quoting_and_escaping</a> for more
+information about the employed escaping procedure.
+</p>
+<p>A first level escaping affects the content of each filter option
+value, which may contain the special character <code>:</code> used to
+separate values, or one of the escaping characters <code>\'</code>.
+</p>
+<p>A second level escaping affects the whole filter description, which
+may contain the escaping characters <code>\'</code> or the special
+characters <code>[],;</code> used by the filtergraph description.
+</p>
+<p>Finally, when you specify a filtergraph on a shell commandline, you
+need to perform a third level escaping for the shell special
+characters contained within it.
+</p>
+<p>For example, consider the following string to be embedded in
+the <a href="#drawtext">drawtext</a> filter description ‘<samp>text</samp>’ value:
+</p><table><tr><td> </td><td><pre class="example">this is a 'string': may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>This string contains the <code>'</code> special escaping character, and the
+<code>:</code> special character, so it needs to be escaped in this way:
+</p><table><tr><td> </td><td><pre class="example">text=this is a \'string\'\: may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>A second level of escaping is required when embedding the filter
+description in a filtergraph description, in order to escape all the
+filtergraph special characters. Thus the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
+</pre></td></tr></table>
+<p>(note that in addition to the <code>\'</code> escaping special characters,
+also <code>,</code> needs to be escaped).
+</p>
+<p>Finally an additional level of escaping is needed when writing the
+filtergraph description in a shell command, which depends on the
+escaping rules of the adopted shell. For example, assuming that
+<code>\</code> is special and needs to be escaped with another <code>\</code>, the
+previous string will finally result in:
+</p><table><tr><td> </td><td><pre class="example">-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
+</pre></td></tr></table>
+
+<a name="Timeline-editing"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Timeline-editing">33. Timeline editing</a></h1>
+
+<p>Some filters support a generic ‘<samp>enable</samp>’ option. For the filters
+supporting timeline editing, this option can be set to an expression which is
+evaluated before sending a frame to the filter. If the evaluation is non-zero,
+the filter will be enabled, otherwise the frame will be sent unchanged to the
+next filter in the filtergraph.
+</p>
+<p>The expression accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p></dd>
+</dl>
+
+<p>Additionally, these filters support an ‘<samp>enable</samp>’ command that can be used
+to re-define the expression.
+</p>
+<p>Like any other filtering option, the ‘<samp>enable</samp>’ option follows the same
+rules.
+</p>
+<p>For example, to enable a blur filter (<a href="#smartblur">smartblur</a>) from 10 seconds to 3
+minutes, and a <a href="#curves">curves</a> filter starting at 3 seconds:
+</p><table><tr><td> </td><td><pre class="example">smartblur = enable='between(t,10,3*60)',
+curves = enable='gte(t,3)' : preset=cross_process
+</pre></td></tr></table>
+
+
+<a name="Audio-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Audio-Filters">34. Audio Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the audio filters included in your
+build.
+</p>
+<p>Below is a description of the currently available audio filters.
+</p>
+<a name="aconvert"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aconvert">34.1 aconvert</a></h2>
+
+<p>Convert the input audio format to the specified formats.
+</p>
+<p><em>This filter is deprecated. Use <a href="#aformat">aformat</a> instead.</em>
+</p>
+<p>The filter accepts a string of the form:
+"<var>sample_format</var>:<var>channel_layout</var>".
+</p>
+<p><var>sample_format</var> specifies the sample format, and can be a string or the
+corresponding numeric value defined in ‘<tt>libavutil/samplefmt.h</tt>’. Use ’p’
+suffix for a planar sample format.
+</p>
+<p><var>channel_layout</var> specifies the channel layout, and can be a string
+or the corresponding number value defined in ‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<p>The special parameter "auto", signifies that the filter will
+automatically select the output format depending on the output filter.
+</p>
+<a name="Examples-11"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-11">34.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input to float, planar, stereo:
+<table><tr><td> </td><td><pre class="example">aconvert=fltp:stereo
+</pre></td></tr></table>
+
+</li><li>
+Convert input to unsigned 8-bit, automatically select out channel layout:
+<table><tr><td> </td><td><pre class="example">aconvert=u8:auto
+</pre></td></tr></table>
+</li></ul>
+
+<a name="adelay"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-adelay">34.2 adelay</a></h2>
+
+<p>Delay one or more audio channels.
+</p>
+<p>Samples in delayed channel are filled with silence.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of delays in milliseconds for each channel separated by ’|’.
+At least one delay greater than 0 should be provided.
+Unused delays will be silently ignored. If number of given delays is
+smaller than number of channels all remaining channels will not be delayed.
+</p></dd>
+</dl>
+
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples">34.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Delay first channel by 1.5 seconds, the third channel by 0.5 seconds and leave
+the second channel (and any other channels that may be present) unchanged.
+<table><tr><td> </td><td><pre class="example">adelay=1500|0|500
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aecho"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aecho">34.3 aecho</a></h2>
+
+<p>Apply echoing to the input audio.
+</p>
+<p>Echoes are reflected sound and can occur naturally amongst mountains
+(and sometimes large buildings) when talking or shouting; digital echo
+effects emulate this behaviour and are often used to help fill out the
+sound of a single instrument or vocal. The time difference between the
+original signal and the reflection is the <code>delay</code>, and the
+loudness of the reflected signal is the <code>decay</code>.
+Multiple echoes can have different delays and decays.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain of reflected signal. Default is <code>0.6</code>.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain of reflected signal. Default is <code>0.3</code>.
+</p>
+</dd>
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of time intervals in milliseconds between original signal and reflections
+separated by ’|’. Allowed range for each <code>delay</code> is <code>(0 - 90000.0]</code>.
+Default is <code>1000</code>.
+</p>
+</dd>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of loudnesses of reflected signals separated by ’|’.
+Allowed range for each <code>decay</code> is <code>(0 - 1.0]</code>.
+Default is <code>0.5</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-10"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-10">34.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Make it sound as if there are twice as many instruments as are actually playing:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:60:0.4
+</pre></td></tr></table>
+
+</li><li>
+If delay is very short, then it sound like a (metallic) robot playing music:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:6:0.4
+</pre></td></tr></table>
+
+</li><li>
+A longer delay will sound like an open air concert in the mountains:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000:0.3
+</pre></td></tr></table>
+
+</li><li>
+Same as above but with one more mountain:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000|1800:0.3|0.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aeval"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aeval">34.4 aeval</a></h2>
+
+<p>Modify an audio signal according to the specified expressions.
+</p>
+<p>This filter accepts one or more expressions (one for each channel),
+which are evaluated and used to modify a corresponding audio signal.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. If
+the number of input channels is greater than the number of
+expressions, the last specified expression is used for the remaining
+output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set output channel layout. If not specified, the channel layout is
+specified by the number of expressions. If set to ‘<samp>same</samp>’, it will
+use by default the same input channel layout.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>channel number of the current expression
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds
+</p>
+</dd>
+<dt> ‘<samp>nb_in_channels</samp>’</dt>
+<dt> ‘<samp>nb_out_channels</samp>’</dt>
+<dd><p>input and output number of channels
+</p>
+</dd>
+<dt> ‘<samp>val(CH)</samp>’</dt>
+<dd><p>the value of input channel with number <var>CH</var>
+</p></dd>
+</dl>
+
+<p>Note: this filter is slow. For faster processing you should use a
+dedicated filter.
+</p>
+<a name="Examples-23"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-23">34.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Half volume:
+<table><tr><td> </td><td><pre class="example">aeval=val(ch)/2:c=same
+</pre></td></tr></table>
+
+</li><li>
+Invert phase of the second channel:
+<table><tr><td> </td><td><pre class="example">eval=val(0)|-val(1)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="afade"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-afade">34.5 afade</a></h2>
+
+<p>Apply fade-in/out effect to input audio.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>Specify the effect type, can be either <code>in</code> for fade-in, or
+<code>out</code> for a fade-out effect. Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_sample, ss</samp>’</dt>
+<dd><p>Specify the number of the start sample for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, ns</samp>’</dt>
+<dd><p>Specify the number of samples for which the fade effect has to last. At
+the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence. Default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify time for starting to apply the fade effect. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+If set this option is used instead of <var>start_sample</var> one.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration for which the fade effect has to last. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+At the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence.
+If set this option is used instead of <var>nb_samples</var> one.
+</p>
+</dd>
+<dt> ‘<samp>curve</samp>’</dt>
+<dd><p>Set curve for fade transition.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>tri</samp>’</dt>
+<dd><p>select triangular, linear slope (default)
+</p></dd>
+<dt> ‘<samp>qsin</samp>’</dt>
+<dd><p>select quarter of sine wave
+</p></dd>
+<dt> ‘<samp>hsin</samp>’</dt>
+<dd><p>select half of sine wave
+</p></dd>
+<dt> ‘<samp>esin</samp>’</dt>
+<dd><p>select exponential sine wave
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>select logarithmic
+</p></dd>
+<dt> ‘<samp>par</samp>’</dt>
+<dd><p>select inverted parabola
+</p></dd>
+<dt> ‘<samp>qua</samp>’</dt>
+<dd><p>select quadratic
+</p></dd>
+<dt> ‘<samp>cub</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>squ</samp>’</dt>
+<dd><p>select square root
+</p></dd>
+<dt> ‘<samp>cbr</samp>’</dt>
+<dd><p>select cubic root
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-21"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-21">34.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 15 seconds of audio:
+<table><tr><td> </td><td><pre class="example">afade=t=in:ss=0:d=15
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 25 seconds of a 900 seconds audio:
+<table><tr><td> </td><td><pre class="example">afade=t=out:st=875:d=25
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="aformat"></a>
+</p><a name="aformat-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aformat-1">34.6 aformat</a></h2>
+
+<p>Set output format constraints for the input audio. The framework will
+negotiate the most appropriate format to minimize conversions.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>sample_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample formats.
+</p>
+</dd>
+<dt> ‘<samp>sample_rates</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample rates.
+</p>
+</dd>
+<dt> ‘<samp>channel_layouts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested channel layouts.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p></dd>
+</dl>
+
+<p>If a parameter is omitted, all values are allowed.
+</p>
+<p>For example to force the output to either unsigned 8-bit or signed 16-bit stereo:
+</p><table><tr><td> </td><td><pre class="example">aformat=sample_fmts=u8|s16:channel_layouts=stereo
+</pre></td></tr></table>
+
+<a name="allpass"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-allpass">34.7 allpass</a></h2>
+
+<p>Apply a two-pole all-pass filter with central frequency (in Hz)
+<var>frequency</var>, and filter-width <var>width</var>.
+An all-pass filter changes the audio’s frequency to phase relationship
+without changing its frequency to amplitude relationship.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="amerge"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-amerge">34.8 amerge</a></h2>
+
+<p>Merge two or more audio streams into a single multi-channel stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Set the number of inputs. Default is 2.
+</p>
+</dd>
+</dl>
+
+<p>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.
+</p>
+<p>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).
+</p>
+<p>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.
+</p>
+<p>All inputs must have the same sample rate, and format.
+</p>
+<p>If inputs do not have the same duration, the output will stop with the
+shortest.
+</p>
+<a name="Examples-54"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-54">34.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge two mono files into a stereo stream:
+<table><tr><td> </td><td><pre class="example">amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
+</pre></td></tr></table>
+
+</li><li>
+Multiple merges assuming 1 video stream and 6 audio streams in ‘<tt>input.mkv</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="amix"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-amix">34.9 amix</a></h2>
+
+<p>Mixes multiple audio inputs into a single output.
+</p>
+<p>For example
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
+</pre></td></tr></table>
+<p>will mix 3 input audio streams to a single output with the same duration as the
+first input and a dropout transition time of 3 seconds.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of inputs. If unspecified, it defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>How to determine the end-of-stream.
+</p><dl compact="compact">
+<dt> ‘<samp>longest</samp>’</dt>
+<dd><p>Duration of longest input. (default)
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Duration of shortest input.
+</p>
+</dd>
+<dt> ‘<samp>first</samp>’</dt>
+<dd><p>Duration of first input.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dropout_transition</samp>’</dt>
+<dd><p>Transition time, in seconds, for volume renormalization when an input
+stream ends. The default value is 2 seconds.
+</p>
+</dd>
+</dl>
+
+<a name="anull"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-anull">34.10 anull</a></h2>
+
+<p>Pass the audio source unchanged to the output.
+</p>
+<a name="apad"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-apad">34.11 apad</a></h2>
+
+<p>Pad the end of a audio stream with silence, this can be used together with
+-shortest to extend audio streams to the same length as the video stream.
+</p>
+<a name="aphaser"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aphaser">34.12 aphaser</a></h2>
+<p>Add a phasing effect to the input audio.
+</p>
+<p>A phaser filter creates series of peaks and troughs in the frequency spectrum.
+The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain. Default is 0.74
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in milliseconds. Default is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>decay</samp>’</dt>
+<dd><p>Set decay. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>speed</samp>’</dt>
+<dd><p>Set modulation speed in Hz. Default is 0.5.
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Set modulation type. Default is triangular.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>triangular, t</samp>’</dt>
+<dt> ‘<samp>sinusoidal, s</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+<p><a name="aresample"></a>
+</p><a name="aresample-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aresample-1">34.13 aresample</a></h2>
+
+<p>Resample the input audio to the specified parameters, using the
+libswresample library. If none are specified then the filter will
+automatically convert between its input and output.
+</p>
+<p>This filter is also able to stretch/squeeze the audio data to make it match
+the timestamps or to inject silence / cut out audio to make it match the
+timestamps, do a combination of both or do neither.
+</p>
+<p>The filter accepts the syntax
+[<var>sample_rate</var>:]<var>resampler_options</var>, where <var>sample_rate</var>
+expresses a sample rate and <var>resampler_options</var> is a list of
+<var>key</var>=<var>value</var> pairs, separated by ":". See the
+ffmpeg-resampler manual for the complete list of supported options.
+</p>
+<a name="Examples-101"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-101">34.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Resample the input audio to 44100Hz:
+<table><tr><td> </td><td><pre class="example">aresample=44100
+</pre></td></tr></table>
+
+</li><li>
+Stretch/squeeze samples to the given timestamps, with a maximum of 1000
+samples per second compensation:
+<table><tr><td> </td><td><pre class="example">aresample=async=1000
+</pre></td></tr></table>
+</li></ul>
+
+<a name="asetnsamples"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-asetnsamples">34.14 asetnsamples</a></h2>
+
+<p>Set the number of samples per each output audio frame.
+</p>
+<p>The last output packet may contain a different number of samples, as
+the filter will flush all the remaining samples when the input audio
+signal its end.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_out_samples, n</samp>’</dt>
+<dd><p>Set the number of frames per each output audio frame. The number is
+intended as the number of samples <em>per each channel</em>.
+Default value is 1024.
+</p>
+</dd>
+<dt> ‘<samp>pad, p</samp>’</dt>
+<dd><p>If set to 1, the filter will pad the last audio frame with zeroes, so
+that the last frame will contain the same number of samples as the
+previous ones. Default value is 1.
+</p></dd>
+</dl>
+
+<p>For example, to set the number of per-frame samples to 1234 and
+disable padding for the last frame, use:
+</p><table><tr><td> </td><td><pre class="example">asetnsamples=n=1234:p=0
+</pre></td></tr></table>
+
+<a name="asetrate"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-asetrate">34.15 asetrate</a></h2>
+
+<p>Set the sample rate without altering the PCM data.
+This will result in a change of speed and pitch.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Set the output sample rate. Default is 44100 Hz.
+</p></dd>
+</dl>
+
+<a name="ashowinfo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ashowinfo">34.16 ashowinfo</a></h2>
+
+<p>Show a line containing various information for each input audio frame.
+The input audio is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation timestamp of the input frame, in time base units; the time base
+depends on the filter input pad, and is usually 1/<var>sample_rate</var>.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>presentation timestamp of the input frame in seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic audio)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>sample format
+</p>
+</dd>
+<dt> ‘<samp>chlayout</samp>’</dt>
+<dd><p>channel layout
+</p>
+</dd>
+<dt> ‘<samp>rate</samp>’</dt>
+<dd><p>sample rate for the audio frame
+</p>
+</dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples (per channel) in the frame
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio
+the data is treated as if all the planes were concatenated.
+</p>
+</dd>
+<dt> ‘<samp>plane_checksums</samp>’</dt>
+<dd><p>A list of Adler-32 checksums for each data plane.
+</p></dd>
+</dl>
+
+<a name="astats"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-astats">34.17 astats</a></h2>
+
+<p>Display time domain statistical information about the audio channels.
+Statistics are calculated and displayed for each audio channel and,
+where applicable, an overall figure is also given.
+</p>
+<p>The filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>length</samp>’</dt>
+<dd><p>Short window length in seconds, used for peak and trough RMS measurement.
+Default is <code>0.05</code> (50 miliseconds). Allowed range is <code>[0.1 - 10]</code>.
+</p></dd>
+</dl>
+
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>DC offset</samp>’</dt>
+<dd><p>Mean amplitude displacement from zero.
+</p>
+</dd>
+<dt> ‘<samp>Min level</samp>’</dt>
+<dd><p>Minimal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Max level</samp>’</dt>
+<dd><p>Maximal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Peak level dB</samp>’</dt>
+<dt> ‘<samp>RMS level dB</samp>’</dt>
+<dd><p>Standard peak and RMS level measured in dBFS.
+</p>
+</dd>
+<dt> ‘<samp>RMS peak dB</samp>’</dt>
+<dt> ‘<samp>RMS trough dB</samp>’</dt>
+<dd><p>Peak and trough values for RMS level measured over a short window.
+</p>
+</dd>
+<dt> ‘<samp>Crest factor</samp>’</dt>
+<dd><p>Standard ratio of peak to RMS level (note: not in dB).
+</p>
+</dd>
+<dt> ‘<samp>Flat factor</samp>’</dt>
+<dd><p>Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels
+(i.e. either <var>Min level</var> or <var>Max level</var>).
+</p>
+</dd>
+<dt> ‘<samp>Peak count</samp>’</dt>
+<dd><p>Number of occasions (not the number of samples) that the signal attained either
+<var>Min level</var> or <var>Max level</var>.
+</p></dd>
+</dl>
+
+<a name="astreamsync"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-astreamsync">34.18 astreamsync</a></h2>
+
+<p>Forward two audio streams and control the order the buffers are forwarded.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the 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:
+</p>
+<dl compact="compact">
+<dt> <var>b1 b2</var></dt>
+<dd><p>number of buffers forwarded so far on each stream
+</p></dd>
+<dt> <var>s1 s2</var></dt>
+<dd><p>number of samples forwarded so far on each stream
+</p></dd>
+<dt> <var>t1 t2</var></dt>
+<dd><p>current timestamp of each stream
+</p></dd>
+</dl>
+
+<p>The default value is <code>t1-t2</code>, which means to always forward the stream
+that has a smaller timestamp.
+</p></dd>
+</dl>
+
+<a name="Examples-5"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-5">34.18.1 Examples</a></h3>
+
+<p>Stress-test <code>amerge</code> by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+</p><table><tr><td> </td><td><pre class="example">amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
+[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
+[a2] [b2] amerge
+</pre></td></tr></table>
+
+<a name="asyncts"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-asyncts">34.19 asyncts</a></h2>
+
+<p>Synchronize audio data with timestamps by squeezing/stretching it and/or
+dropping samples/adding silence when needed.
+</p>
+<p>This filter is not built by default, please use <a href="#aresample">aresample</a> to do squeezing/stretching.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>compensate</samp>’</dt>
+<dd><p>Enable stretching/squeezing the data to make it match the timestamps. Disabled
+by default. When disabled, time gaps are covered with silence.
+</p>
+</dd>
+<dt> ‘<samp>min_delta</samp>’</dt>
+<dd><p>Minimum difference between timestamps and audio data (in seconds) to trigger
+adding/dropping samples. Default value is 0.1. If you get non-perfect sync with
+this filter, try setting this parameter to 0.
+</p>
+</dd>
+<dt> ‘<samp>max_comp</samp>’</dt>
+<dd><p>Maximum compensation in samples per second. Relevant only with compensate=1.
+Default value 500.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>Assume the first pts should be this value. The time base is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+</dl>
+
+<a name="atempo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-atempo">34.20 atempo</a></h2>
+
+<p>Adjust audio tempo.
+</p>
+<p>The filter accepts exactly one parameter, the audio tempo. If not
+specified then the filter will assume nominal 1.0 tempo. Tempo must
+be in the [0.5, 2.0] range.
+</p>
+<a name="Examples-50"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-50">34.20.1 Examples</a></h3>
+
+<ul>
+<li>
+Slow down audio to 80% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=0.8
+</pre></td></tr></table>
+
+</li><li>
+To speed up audio to 125% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=1.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="atrim"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-atrim">34.21 atrim</a></h2>
+
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the audio sample
+with the timestamp <var>start</var> will be the first sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first audio sample that will be dropped, i.e. the
+audio sample immediately preceding the one with the timestamp <var>end</var> will be
+the last sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in samples
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in samples instead
+of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _sample options simply count the
+samples that pass through the filter. So start/end_pts and start/end_sample will
+give different results when the timestamps are wrong, inexact or do not start at
+zero. Also note that this filter does not modify the timestamps. If you wish
+that the output timestamps start at zero, insert the asetpts filter after the
+atrim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all samples that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple atrim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first 1000 samples
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=end_sample=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="bandpass"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-bandpass">34.22 bandpass</a></h2>
+
+<p>Apply a two-pole Butterworth band-pass filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width width.
+The <var>csg</var> option selects a constant skirt gain (peak gain = Q)
+instead of the default: constant 0dB peak gain.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>csg</samp>’</dt>
+<dd><p>Constant skirt gain if set to 1. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bandreject"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-bandreject">34.23 bandreject</a></h2>
+
+<p>Apply a two-pole Butterworth band-reject filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width <var>width</var>.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bass"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-bass">34.24 bass</a></h2>
+
+<p>Boost or cut the bass (lower) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at 0 Hz. Its useful range is about -20
+(for a large cut) to +20 (for a large boost).
+Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>100</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="biquad"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-biquad">34.25 biquad</a></h2>
+
+<p>Apply a biquad IIR filter with the given coefficients.
+Where <var>b0</var>, <var>b1</var>, <var>b2</var> and <var>a0</var>, <var>a1</var>, <var>a2</var>
+are the numerator and denominator coefficients respectively.
+</p>
+<a name="channelmap"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-channelmap">34.26 channelmap</a></h2>
+
+<p>Remap input channels to new locations.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the output stream.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from input to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>in_channel</var>-<var>out_channel</var></code> or
+<var>in_channel</var> form. <var>in_channel</var> can be either the name of the input
+channel (e.g. FL for front left) or its index in the input channel layout.
+<var>out_channel</var> is the name of the output channel or its index in the output
+channel layout. If <var>out_channel</var> is not given then it is implicitly an
+index, starting with zero and increasing by one for each mapping.
+</p></dd>
+</dl>
+
+<p>If no mapping is present, the filter will implicitly map input channels to
+output channels preserving index.
+</p>
+<p>For example, assuming a 5.1+downmix input MOV file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
+</pre></td></tr></table>
+<p>will create an output WAV file tagged as stereo from the downmix channels of
+the input.
+</p>
+<p>To fix a 5.1 WAV improperly encoded in AAC’s native channel order
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
+</pre></td></tr></table>
+
+<a name="channelsplit"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-channelsplit">34.27 channelsplit</a></h2>
+
+<p>Split each channel in input audio stream into a separate output stream.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the input stream. Default is "stereo".
+</p></dd>
+</dl>
+
+<p>For example, assuming a stereo input MP3 file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
+</pre></td></tr></table>
+<p>will create an output Matroska file with two audio streams, one containing only
+the left channel and the other the right channel.
+</p>
+<p>To split a 5.1 WAV file into per-channel files
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter_complex
+'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
+-map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
+front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
+side_right.wav
+</pre></td></tr></table>
+
+<a name="compand"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-compand">34.28 compand</a></h2>
+<p>Compress or expand audio dynamic range.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>attacks</samp>’</dt>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of times in seconds for each channel over which the instantaneous level
+of the input signal is averaged to determine its volume. <var>attacks</var> refers to
+increase of volume and <var>decays</var> refers to decrease of volume. For most
+situations, the attack time (response to the audio getting louder) should be
+shorter than the decay time because the human ear is more sensitive to sudden
+loud audio than sudden soft audio. A typical value for attack is 0.3 seconds and
+a typical value for decay is 0.8 seconds.
+</p>
+</dd>
+<dt> ‘<samp>points</samp>’</dt>
+<dd><p>Set list of points for the transfer function, specified in dB relative to the
+maximum possible signal amplitude. Each key points list must be defined using
+the following syntax: <code>x0/y0|x1/y1|x2/y2|....</code> or
+<code>x0/y0 x1/y1 x2/y2 ....</code>
+</p>
+<p>The input values must be in strictly increasing order but the transfer function
+does not have to be monotonically rising. The point <code>0/0</code> is assumed but
+may be overridden (by <code>0/out-dBn</code>). Typical values for the transfer
+function are <code>-70/-70|-60/-20</code>.
+</p>
+</dd>
+<dt> ‘<samp>soft-knee</samp>’</dt>
+<dd><p>Set the curve radius in dB for all joints. Defaults to 0.01.
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>Set additional gain in dB to be applied at all points on the transfer function.
+This allows easy adjustment of the overall gain. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set initial volume in dB to be assumed for each channel when filtering starts.
+This permits the user to supply a nominal level initially, so that, for
+example, a very large gain is not applied to initial signal levels before the
+companding has begun to operate. A typical value for audio which is initially
+quiet is -90 dB. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in seconds. The input audio is analyzed immediately, but audio is
+delayed before being fed to the volume adjuster. Specifying a delay
+approximately equal to the attack/decay times allows the filter to effectively
+operate in predictive rather than reactive mode. Defaults to 0.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-78"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-78">34.28.1 Examples</a></h3>
+
+<ul>
+<li>
+Make music with both quiet and loud passages suitable for listening in a noisy
+environment:
+<table><tr><td> </td><td><pre class="example">compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
+</pre></td></tr></table>
+
+</li><li>
+Noise gate for when the noise is at a lower level than the signal:
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
+</pre></td></tr></table>
+
+</li><li>
+Here is another noise gate, this time for when the noise is at a higher level
+than the signal (making it, in some ways, similar to squelch):
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="earwax"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-earwax">34.29 earwax</a></h2>
+
+<p>Make audio easier to listen to on headphones.
+</p>
+<p>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).
+</p>
+<p>Ported from SoX.
+</p>
+<a name="equalizer"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-equalizer">34.30 equalizer</a></h2>
+
+<p>Apply a two-pole peaking equalisation (EQ) filter. With this
+filter, the signal-level at and around a selected frequency can
+be increased or decreased, whilst (unlike bandpass and bandreject
+filters) that at all other frequencies is unchanged.
+</p>
+<p>In order to produce complex equalisation curves, this filter can
+be given several times, each with a different central frequency.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p>
+</dd>
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Set the required gain or attenuation in dB.
+Beware of clipping when using a positive gain.
+</p></dd>
+</dl>
+
+<a name="Examples-102"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-102">34.30.1 Examples</a></h3>
+<ul>
+<li>
+Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=h:width=200:g=-10
+</pre></td></tr></table>
+
+</li><li>
+Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=q:width=1:g=2,equalizer=f=100:width_type=q:width=2:g=-5
+</pre></td></tr></table>
+</li></ul>
+
+<a name="highpass"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-highpass">34.31 highpass</a></h2>
+
+<p>Apply a high-pass filter with 3dB point frequency.
+The filter can be either single-pole, or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="join"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-join">34.32 join</a></h2>
+
+<p>Join multiple input streams into one multi-channel stream.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of input streams. Defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Desired output channel layout. Defaults to stereo.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from inputs to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>input_idx</var>.<var>in_channel</var>-<var>out_channel</var></code>
+form. <var>input_idx</var> is the 0-based index of the input stream. <var>in_channel</var>
+can be either the name of the input channel (e.g. FL for front left) or its
+index in the specified input stream. <var>out_channel</var> is the name of the output
+channel.
+</p></dd>
+</dl>
+
+<p>The filter will attempt to guess the mappings when those are not specified
+explicitly. It does so by first trying to find an unused matching input channel
+and if that fails it picks the first unused input channel.
+</p>
+<p>E.g. to join 3 inputs (with properly set channel layouts)
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
+</pre></td></tr></table>
+
+<p>To build a 5.1 output from 6 single-channel streams:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
+'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
+out
+</pre></td></tr></table>
+
+<a name="ladspa"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ladspa">34.33 ladspa</a></h2>
+
+<p>Load a LADSPA (Linux Audio Developer’s Simple Plugin API) plugin.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-ladspa</code>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file, f</samp>’</dt>
+<dd><p>Specifies the name of LADSPA plugin library to load. If the environment
+variable <code>LADSPA_PATH</code> is defined, the LADSPA plugin is searched in
+each one of the directories specified by the colon separated list in
+<code>LADSPA_PATH</code>, otherwise in the standard LADSPA paths, which are in
+this order: ‘<tt>HOME/.ladspa/lib/</tt>’, ‘<tt>/usr/local/lib/ladspa/</tt>’,
+‘<tt>/usr/lib/ladspa/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>plugin, p</samp>’</dt>
+<dd><p>Specifies the plugin within the library. Some libraries contain only
+one plugin, but others contain many of them. If this is not set filter
+will list all available plugins within the specified library.
+</p>
+</dd>
+<dt> ‘<samp>controls, c</samp>’</dt>
+<dd><p>Set the ’|’ separated list of controls which are zero or more floating point
+values that determine the behavior of the loaded plugin (for example delay,
+threshold or gain).
+Controls need to be defined using the following syntax:
+c0=<var>value0</var>|c1=<var>value1</var>|c2=<var>value2</var>|..., where
+<var>valuei</var> is the value set on the <var>i</var>-th control.
+If ‘<samp>controls</samp>’ is set to <code>help</code>, all available controls and
+their valid ranges are printed.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100. Only used if plugin have
+zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame, default
+is 1024. Only used if plugin have zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> for the accepted format, also check the "Time duration"
+section in the ffmpeg-utils manual.
+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.
+Only used if plugin have zero inputs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-90"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-90">34.33.1 Examples</a></h3>
+
+<ul>
+<li>
+List all available plugins within amp (LADSPA example plugin) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=amp
+</pre></td></tr></table>
+
+</li><li>
+List all available controls and their valid ranges for <code>vcf_notch</code>
+plugin from <code>VCF</code> library:
+<table><tr><td> </td><td><pre class="example">ladspa=f=vcf:p=vcf_notch:c=help
+</pre></td></tr></table>
+
+</li><li>
+Simulate low quality audio equipment using <code>Computer Music Toolkit</code> (CMT)
+plugin library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
+</pre></td></tr></table>
+
+</li><li>
+Add reverberation to the audio using TAP-plugins
+(Tom’s Audio Processing plugins):
+<table><tr><td> </td><td><pre class="example">ladspa=file=tap_reverb:tap_reverb
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise, with 0.2 amplitude:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:noise_source_white:c=c0=.2
+</pre></td></tr></table>
+
+</li><li>
+Generate 20 bpm clicks using plugin <code>C* Click - Metronome</code> from the
+<code>C* Audio Plugin Suite</code> (CAPS) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=caps:Click:c=c1=20'
+</pre></td></tr></table>
+
+</li><li>
+Apply <code>C* Eq10X2 - Stereo 10-band equaliser</code> effect:
+<table><tr><td> </td><td><pre class="example">ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands-3"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands-3">34.33.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>cN</samp>’</dt>
+<dd><p>Modify the <var>N</var>-th control value.
+</p>
+<p>If the specified value is not valid, it is ignored and prior one is kept.
+</p></dd>
+</dl>
+
+<a name="lowpass"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-lowpass">34.34 lowpass</a></h2>
+
+<p>Apply a low-pass filter with 3dB point frequency.
+The filter can be either single-pole or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 500.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="pan"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pan">34.35 pan</a></h2>
+
+<p>Mix channels with specific gain levels. The filter accepts the output
+channel layout followed by a set of channels definitions.
+</p>
+<p>This filter is also designed to remap efficiently the channels of an audio
+stream.
+</p>
+<p>The filter accepts parameters of the form:
+"<var>l</var>:<var>outdef</var>:<var>outdef</var>:..."
+</p>
+<dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>output channel layout or number of channels
+</p>
+</dd>
+<dt> ‘<samp>outdef</samp>’</dt>
+<dd><p>output channel specification, of the form:
+"<var>out_name</var>=[<var>gain</var>*]<var>in_name</var>[+[<var>gain</var>*]<var>in_name</var>...]"
+</p>
+</dd>
+<dt> ‘<samp>out_name</samp>’</dt>
+<dd><p>output channel to define, either a channel name (FL, FR, etc.) or a channel
+number (c0, c1, etc.)
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>multiplicative coefficient for the channel, 1 leaving the volume unchanged
+</p>
+</dd>
+<dt> ‘<samp>in_name</samp>’</dt>
+<dd><p>input channel to use, see out_name for details; it is not possible to mix
+named and numbered input channels
+</p></dd>
+</dl>
+
+<p>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.
+</p>
+<a name="Mixing-examples"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Mixing-examples">34.35.1 Mixing examples</a></h3>
+
+<p>For example, if you want to down-mix from stereo to mono, but with a bigger
+factor for the left channel:
+</p><table><tr><td> </td><td><pre class="example">pan=1:c0=0.9*c0+0.1*c1
+</pre></td></tr></table>
+
+<p>A customized down-mix to stereo that works automatically for 3-, 4-, 5- and
+7-channels surround:
+</p><table><tr><td> </td><td><pre class="example">pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
+</pre></td></tr></table>
+
+<p>Note that <code>ffmpeg</code> integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+</p>
+<a name="Remapping-examples"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Remapping-examples">34.35.2 Remapping examples</a></h3>
+
+<p>The channel remapping will be effective if, and only if:
+</p>
+<ul>
+<li> gain coefficients are zeroes or ones,
+</li><li> only one input per channel output,
+</li></ul>
+
+<p>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.
+</p>
+<p>For example, if you have a 5.1 source and want a stereo audio stream by
+dropping the extra channels:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FL : c1=FR"
+</pre></td></tr></table>
+
+<p>Given the same source, you can also switch front left and front right channels
+and keep the input channel layout:
+</p><table><tr><td> </td><td><pre class="example">pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
+</pre></td></tr></table>
+
+<p>If the input is a stereo audio stream, you can mute the front left channel (and
+still keep the stereo channel layout) with:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo:c1=c1"
+</pre></td></tr></table>
+
+<p>Still with a stereo audio stream input, you can copy the right channel in both
+front left and right:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FR : c1=FR"
+</pre></td></tr></table>
+
+<a name="replaygain"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-replaygain">34.36 replaygain</a></h2>
+
+<p>ReplayGain scanner filter. This filter takes an audio stream as an input and
+outputs it unchanged.
+At end of filtering it displays <code>track_gain</code> and <code>track_peak</code>.
+</p>
+<a name="resample"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-resample">34.37 resample</a></h2>
+
+<p>Convert the audio sample format, sample rate and channel layout. This filter is
+not meant to be used directly.
+</p>
+<a name="silencedetect"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-silencedetect">34.38 silencedetect</a></h2>
+
+<p>Detect silence in an audio stream.
+</p>
+<p>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.
+</p>
+<p>The printed times and duration are expressed in seconds.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set silence duration until notification (default is 2 seconds).
+</p>
+</dd>
+<dt> ‘<samp>noise, n</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<a name="Examples-62"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-62">34.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Detect 5 seconds of silence with -50dB noise tolerance:
+<table><tr><td> </td><td><pre class="example">silencedetect=n=-50dB:d=5
+</pre></td></tr></table>
+
+</li><li>
+Complete example with <code>ffmpeg</code> to detect silence with 0.0001 noise
+tolerance in ‘<tt>silence.mp3</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="treble"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-treble">34.39 treble</a></h2>
+
+<p>Boost or cut treble (upper) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at whichever is the lower of ~22 kHz and the
+Nyquist frequency. Its useful range is about -20 (for a large cut)
+to +20 (for a large boost). Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>3000</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="volume"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-volume">34.40 volume</a></h2>
+
+<p>Adjust the input audio volume.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set audio volume expression.
+</p>
+<p>Output values are clipped to the maximum value.
+</p>
+<p>The output audio volume is given by the relation:
+</p><table><tr><td> </td><td><pre class="example"><var>output_volume</var> = <var>volume</var> * <var>input_volume</var>
+</pre></td></tr></table>
+
+<p>Default value for <var>volume</var> is "1.0".
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>Set the mathematical precision.
+</p>
+<p>This determines which input sample formats will be allowed, which affects the
+precision of the volume scaling.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fixed</samp>’</dt>
+<dd><p>8-bit fixed-point; limits input sample format to U8, S16, and S32.
+</p></dd>
+<dt> ‘<samp>float</samp>’</dt>
+<dd><p>32-bit floating-point; limits input sample format to FLT. (default)
+</p></dd>
+<dt> ‘<samp>double</samp>’</dt>
+<dd><p>64-bit floating-point; limits input sample format to DBL.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the volume expression is evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>once</samp>’</dt>
+<dd><p>only evaluate expression once during the filter initialization, or
+when the ‘<samp>volume</samp>’ command is sent
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expression for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>once</samp>’.
+</p></dd>
+</dl>
+
+<p>The volume expression can contain the following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame number (starting at zero)
+</p></dd>
+<dt> ‘<samp>nb_channels</samp>’</dt>
+<dd><p>number of channels
+</p></dd>
+<dt> ‘<samp>nb_consumed_samples</samp>’</dt>
+<dd><p>number of samples consumed by the filter
+</p></dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples in the current frame
+</p></dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>original frame position in the file
+</p></dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>frame PTS
+</p></dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>sample rate
+</p></dd>
+<dt> ‘<samp>startpts</samp>’</dt>
+<dd><p>PTS at start of stream
+</p></dd>
+<dt> ‘<samp>startt</samp>’</dt>
+<dd><p>time at start of stream
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>frame time
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>timestamp timebase
+</p></dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>last set volume value
+</p></dd>
+</dl>
+
+<p>Note that when ‘<samp>eval</samp>’ is set to ‘<samp>once</samp>’ only the
+<var>sample_rate</var> and <var>tb</var> variables are available, all other
+variables will evaluate to NAN.
+</p>
+<a name="Commands-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands-1">34.40.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Modify the volume expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-63"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-63">34.40.2 Examples</a></h3>
+
+<ul>
+<li>
+Halve the input audio volume:
+<table><tr><td> </td><td><pre class="example">volume=volume=0.5
+volume=volume=1/2
+volume=volume=-6.0206dB
+</pre></td></tr></table>
+
+<p>In all the above example the named key for ‘<samp>volume</samp>’ can be
+omitted, for example like in:
+</p><table><tr><td> </td><td><pre class="example">volume=0.5
+</pre></td></tr></table>
+
+</li><li>
+Increase input audio power by 6 decibels using fixed-point precision:
+<table><tr><td> </td><td><pre class="example">volume=volume=6dB:precision=fixed
+</pre></td></tr></table>
+
+</li><li>
+Fade volume after time 10 with an annihilation period of 5 seconds:
+<table><tr><td> </td><td><pre class="example">volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
+</pre></td></tr></table>
+</li></ul>
+
+<a name="volumedetect"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-volumedetect">34.41 volumedetect</a></h2>
+
+<p>Detect the volume of the input video.
+</p>
+<p>The filter has no parameters. The input is not modified. Statistics about
+the volume will be printed in the log when the input stream end is reached.
+</p>
+<p>In particular it will show the mean volume (root mean square), maximum
+volume (on a per-sample basis), and the beginning of a histogram of the
+registered volume values (from the maximum value to a cumulated 1/1000 of
+the samples).
+</p>
+<p>All volumes are in decibels relative to the maximum PCM value.
+</p>
+<a name="Examples-81"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-81">34.41.1 Examples</a></h3>
+
+<p>Here is an excerpt of the output:
+</p><table><tr><td> </td><td><pre class="example">[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB
+[Parsed_volumedetect_0 0xa23120] max_volume: -4 dB
+[Parsed_volumedetect_0 0xa23120] histogram_4db: 6
+[Parsed_volumedetect_0 0xa23120] histogram_5db: 62
+[Parsed_volumedetect_0 0xa23120] histogram_6db: 286
+[Parsed_volumedetect_0 0xa23120] histogram_7db: 1042
+[Parsed_volumedetect_0 0xa23120] histogram_8db: 2551
+[Parsed_volumedetect_0 0xa23120] histogram_9db: 4609
+[Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
+</pre></td></tr></table>
+
+<p>It means that:
+</p><ul>
+<li>
+The mean square energy is approximately -27 dB, or 10^-2.7.
+</li><li>
+The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB.
+</li><li>
+There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc.
+</li></ul>
+
+<p>In other words, raising the volume by +4 dB does not cause any clipping,
+raising it by +5 dB causes clipping for 6 samples, etc.
+</p>
+
+<a name="Audio-Sources"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Audio-Sources">35. Audio Sources</a></h1>
+
+<p>Below is a description of the currently available audio sources.
+</p>
+<a name="abuffer"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-abuffer">35.1 abuffer</a></h2>
+
+<p>Buffer audio frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/asrc_abuffer.h</tt>’.
+</p>
+<p>It accepts the following named parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Timebase which will be used for timestamps of submitted frames. It must be
+either a floating-point number or in <var>numerator</var>/<var>denominator</var> form.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>The sample rate of the incoming audio buffers.
+</p>
+</dd>
+<dt> ‘<samp>sample_fmt</samp>’</dt>
+<dd><p>The sample format of the incoming audio buffers.
+Either a sample format name or its corresponging integer representation from
+the enum AVSampleFormat in ‘<tt>libavutil/samplefmt.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>The channel layout of the incoming audio buffers.
+Either a channel layout name from channel_layout_map in
+‘<tt>libavutil/channel_layout.c</tt>’ or its corresponding integer representation
+from the AV_CH_LAYOUT_* macros in ‘<tt>libavutil/channel_layout.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>The number of channels of the incoming audio buffers.
+If both <var>channels</var> and <var>channel_layout</var> are specified, then they
+must be consistent.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-24"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-24">35.1.1 Examples</a></h3>
+
+<table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
+</pre></td></tr></table>
+
+<p>will instruct the source to accept planar 16bit signed stereo at 44100Hz.
+Since the sample format with name "s16p" corresponds to the number
+6 and the "stereo" channel layout corresponds to the value 0x3, this is
+equivalent to:
+</p><table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
+</pre></td></tr></table>
+
+<a name="aevalsrc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-aevalsrc">35.2 aevalsrc</a></h2>
+
+<p>Generate an audio signal specified by an expression.
+</p>
+<p>This source accepts in input one or more expressions (one for each
+channel), which are evaluated and used to generate a corresponding
+audio signal.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. In case the
+‘<samp>channel_layout</samp>’ option is not specified, the selected channel layout
+depends on the number of provided expressions. Otherwise the last
+specified expression is applied to the remaining output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set the channel layout. The number of channels in the specified layout
+must be equal to the number of specified expressions.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> 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.
+</p>
+<p>If not specified, or the expressed duration is negative, the audio is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame,
+default to 1024.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+</dl>
+
+<a name="Examples-89"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-89">35.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate silence:
+<table><tr><td> </td><td><pre class="example">aevalsrc=0
+</pre></td></tr></table>
+
+</li><li>
+Generate a sin signal with frequency of 440 Hz, set sample rate to
+8000 Hz:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(440*2*PI*t):s=8000"
+</pre></td></tr></table>
+
+</li><li>
+Generate a two channels signal, specify the channel layout (Front
+Center + Back Center) explicitly:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise:
+<table><tr><td> </td><td><pre class="example">aevalsrc="-2+random(0)"
+</pre></td></tr></table>
+
+</li><li>
+Generate an amplitude modulated signal:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
+</pre></td></tr></table>
+
+</li><li>
+Generate 2.5 Hz binaural beats on a 360 Hz carrier:
+<table><tr><td> </td><td><pre class="example">aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="anullsrc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-anullsrc">35.3 anullsrc</a></h2>
+
+<p>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).
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>channel_layout, cl</samp>’</dt>
+<dd>
+<p>Specify the channel layout, and can be either an integer or a string
+representing a channel layout. The default value of <var>channel_layout</var>
+is "stereo".
+</p>
+<p>Check the channel_layout_map definition in
+‘<tt>libavutil/channel_layout.c</tt>’ for the mapping between strings and
+channel layout values.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, and defaults to 44100.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per requested frames.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-70"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-70">35.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=4
+</pre></td></tr></table>
+
+</li><li>
+Do the same operation with a more obvious syntax:
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=mono
+</pre></td></tr></table>
+</li></ul>
+
+<p>All the parameters need to be explicitly defined.
+</p>
+<a name="flite"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-flite">35.4 flite</a></h2>
+
+<p>Synthesize a voice utterance using the libflite library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libflite</code>.
+</p>
+<p>Note that the flite library is not thread-safe.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>list_voices</samp>’</dt>
+<dd><p>If set to 1, list the names of the available voices and exit
+immediately. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the maximum number of samples per frame. Default value is 512.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>Set the filename containing the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>Set the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>voice, v</samp>’</dt>
+<dd><p>Set the voice to use for the speech synthesis. Default value is
+<code>kal</code>. See also the <var>list_voices</var> option.
+</p></dd>
+</dl>
+
+<a name="Examples-35"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-35">35.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Read from file ‘<tt>speech.txt</tt>’, and synthetize the text using the
+standard flite voice:
+<table><tr><td> </td><td><pre class="example">flite=textfile=speech.txt
+</pre></td></tr></table>
+
+</li><li>
+Read the specified text selecting the <code>slt</code> voice:
+<table><tr><td> </td><td><pre class="example">flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Input text to ffmpeg:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Make ‘<tt>ffplay</tt>’ speak the specified text, using <code>flite</code> and
+the <code>lavfi</code> device:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about libflite, check:
+<a href="http://www.speech.cs.cmu.edu/flite/">http://www.speech.cs.cmu.edu/flite/</a>
+</p>
+<a name="sine"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sine">35.5 sine</a></h2>
+
+<p>Generate an audio signal made of a sine wave with amplitude 1/8.
+</p>
+<p>The audio signal is bit-exact.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the carrier frequency. Default is 440 Hz.
+</p>
+</dd>
+<dt> ‘<samp>beep_factor, b</samp>’</dt>
+<dd><p>Enable a periodic beep every second with frequency <var>beep_factor</var> times
+the carrier frequency. Default is 0, meaning the beep is disabled.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration of the generated audio stream.
+</p>
+</dd>
+<dt> ‘<samp>samples_per_frame</samp>’</dt>
+<dd><p>Set the number of samples per output frame, default is 1024.
+</p></dd>
+</dl>
+
+<a name="Examples-18"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-18">35.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate a simple 440 Hz sine wave:
+<table><tr><td> </td><td><pre class="example">sine
+</pre></td></tr></table>
+
+</li><li>
+Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds:
+<table><tr><td> </td><td><pre class="example">sine=220:4:d=5
+sine=f=220:b=4:d=5
+sine=frequency=220:beep_factor=4:duration=5
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="Audio-Sinks"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Audio-Sinks">36. Audio Sinks</a></h1>
+
+<p>Below is a description of the currently available audio sinks.
+</p>
+<a name="abuffersink"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-abuffersink">36.1 abuffersink</a></h2>
+
+<p>Buffer audio frames, and make them available to the end of filter chain.
+</p>
+<p>This sink is mainly intended for programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="anullsink"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-anullsink">36.2 anullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Video-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Video-Filters">37. Video Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the video filters included in your
+build.
+</p>
+<p>Below is a description of the currently available video filters.
+</p>
+<a name="alphaextract"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-alphaextract">37.1 alphaextract</a></h2>
+
+<p>Extract the alpha component from the input as a grayscale video. This
+is especially useful with the <var>alphamerge</var> filter.
+</p>
+<a name="alphamerge"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-alphamerge">37.2 alphamerge</a></h2>
+
+<p>Add or replace the alpha component of the primary input with the
+grayscale value of a second input. This is intended for use with
+<var>alphaextract</var> to allow the transmission or storage of frame
+sequences that have alpha in a format that doesn’t support an alpha
+channel.
+</p>
+<p>For example, to reconstruct full frames from a normal YUV-encoded video
+and a separate video created with <var>alphaextract</var>, you might use:
+</p><table><tr><td> </td><td><pre class="example">movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
+</pre></td></tr></table>
+
+<p>Since this filter is designed for reconstruction, it operates on frame
+sequences without considering timestamps, and terminates when either
+input reaches end of stream. This will cause problems if your encoding
+pipeline drops frames. If you’re trying to apply an image as an
+overlay to a video stream, consider the <var>overlay</var> filter instead.
+</p>
+<a name="ass"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ass">37.3 ass</a></h2>
+
+<p>Same as the <a href="#subtitles">subtitles</a> filter, except that it doesn’t require libavcodec
+and libavformat to work. On the other hand, it is limited to ASS (Advanced
+Substation Alpha) subtitles files.
+</p>
+<a name="bbox"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-bbox">37.4 bbox</a></h2>
+
+<p>Compute the bounding box for the non-black pixels in the input frame
+luminance plane.
+</p>
+<p>This filter computes the bounding box containing all the pixels with a
+luminance value greater than the minimum allowed value.
+The parameters describing the bounding box are printed on the filter
+log.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>min_val</samp>’</dt>
+<dd><p>Set the minimal luminance value. Default is <code>16</code>.
+</p></dd>
+</dl>
+
+<a name="blackdetect"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-blackdetect">37.5 blackdetect</a></h2>
+
+<p>Detect video intervals that are (almost) completely black. Can be
+useful to detect chapter transitions, commercials, or invalid
+recordings. Output lines contains the time for the start, end and
+duration of the detected black interval expressed in seconds.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>black_min_duration, d</samp>’</dt>
+<dd><p>Set the minimum detected black duration expressed in seconds. It must
+be a non-negative floating point number.
+</p>
+<p>Default value is 2.0.
+</p>
+</dd>
+<dt> ‘<samp>picture_black_ratio_th, pic_th</samp>’</dt>
+<dd><p>Set the threshold for considering a picture "black".
+Express the minimum value for the ratio:
+</p><table><tr><td> </td><td><pre class="example"><var>nb_black_pixels</var> / <var>nb_pixels</var>
+</pre></td></tr></table>
+
+<p>for which a picture is considered black.
+Default value is 0.98.
+</p>
+</dd>
+<dt> ‘<samp>pixel_black_th, pix_th</samp>’</dt>
+<dd><p>Set the threshold for considering a pixel "black".
+</p>
+<p>The threshold expresses the maximum pixel luminance value for which a
+pixel is considered "black". The provided value is scaled according to
+the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>absolute_threshold</var> = <var>luminance_minimum_value</var> + <var>pixel_black_th</var> * <var>luminance_range_size</var>
+</pre></td></tr></table>
+
+<p><var>luminance_range_size</var> and <var>luminance_minimum_value</var> depend on
+the input video format, the range is [0-255] for YUV full-range
+formats and [16-235] for YUV non full-range formats.
+</p>
+<p>Default value is 0.10.
+</p></dd>
+</dl>
+
+<p>The following example sets the maximum pixel threshold to the minimum
+value, and detects only black intervals of 2 or more seconds:
+</p><table><tr><td> </td><td><pre class="example">blackdetect=d=2:pix_th=0.00
+</pre></td></tr></table>
+
+<a name="blackframe"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-blackframe">37.6 blackframe</a></h2>
+
+<p>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.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>amount</samp>’</dt>
+<dd><p>Set the percentage of the pixels that have to be below the threshold, defaults
+to <code>98</code>.
+</p>
+</dd>
+<dt> ‘<samp>threshold, thresh</samp>’</dt>
+<dd><p>Set the threshold below which a pixel value is considered black, defaults to
+<code>32</code>.
+</p>
+</dd>
+</dl>
+
+<a name="blend"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-blend">37.7 blend</a></h2>
+
+<p>Blend two video frames into each other.
+</p>
+<p>It takes two input streams and outputs one stream, the first input is the
+"top" layer and second input is "bottom" layer.
+Output terminates when shortest input terminates.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c0_mode</samp>’</dt>
+<dt> ‘<samp>c1_mode</samp>’</dt>
+<dt> ‘<samp>c2_mode</samp>’</dt>
+<dt> ‘<samp>c3_mode</samp>’</dt>
+<dt> ‘<samp>all_mode</samp>’</dt>
+<dd><p>Set blend mode for specific pixel component or all pixel components in case
+of <var>all_mode</var>. Default value is <code>normal</code>.
+</p>
+<p>Available values for component modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>addition</samp>’</dt>
+<dt> ‘<samp>and</samp>’</dt>
+<dt> ‘<samp>average</samp>’</dt>
+<dt> ‘<samp>burn</samp>’</dt>
+<dt> ‘<samp>darken</samp>’</dt>
+<dt> ‘<samp>difference</samp>’</dt>
+<dt> ‘<samp>divide</samp>’</dt>
+<dt> ‘<samp>dodge</samp>’</dt>
+<dt> ‘<samp>exclusion</samp>’</dt>
+<dt> ‘<samp>hardlight</samp>’</dt>
+<dt> ‘<samp>lighten</samp>’</dt>
+<dt> ‘<samp>multiply</samp>’</dt>
+<dt> ‘<samp>negation</samp>’</dt>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>or</samp>’</dt>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dt> ‘<samp>phoenix</samp>’</dt>
+<dt> ‘<samp>pinlight</samp>’</dt>
+<dt> ‘<samp>reflect</samp>’</dt>
+<dt> ‘<samp>screen</samp>’</dt>
+<dt> ‘<samp>softlight</samp>’</dt>
+<dt> ‘<samp>subtract</samp>’</dt>
+<dt> ‘<samp>vividlight</samp>’</dt>
+<dt> ‘<samp>xor</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>c0_opacity</samp>’</dt>
+<dt> ‘<samp>c1_opacity</samp>’</dt>
+<dt> ‘<samp>c2_opacity</samp>’</dt>
+<dt> ‘<samp>c3_opacity</samp>’</dt>
+<dt> ‘<samp>all_opacity</samp>’</dt>
+<dd><p>Set blend opacity for specific pixel component or all pixel components in case
+of <var>all_opacity</var>. Only used in combination with pixel component blend modes.
+</p>
+</dd>
+<dt> ‘<samp>c0_expr</samp>’</dt>
+<dt> ‘<samp>c1_expr</samp>’</dt>
+<dt> ‘<samp>c2_expr</samp>’</dt>
+<dt> ‘<samp>c3_expr</samp>’</dt>
+<dt> ‘<samp>all_expr</samp>’</dt>
+<dd><p>Set blend expression for specific pixel component or all pixel components in case
+of <var>all_expr</var>. Note that related mode options will be ignored if those are set.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>the coordinates of the current sample
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of currently filtered plane
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>TOP, A</samp>’</dt>
+<dd><p>Value of pixel component at current location for first video frame (top layer).
+</p>
+</dd>
+<dt> ‘<samp>BOTTOM, B</samp>’</dt>
+<dd><p>Value of pixel component at current location for second video frame (bottom layer).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last bottom frame after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the bottom layer is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-39"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-39">37.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply transition from bottom layer to top layer in first 10 seconds:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
+</pre></td></tr></table>
+
+</li><li>
+Apply 1x1 checkerboard effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(N*SW+X,W),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover down effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(Y-N*SH,0),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover up-left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="boxblur"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-boxblur">37.8 boxblur</a></h2>
+
+<p>Apply boxblur algorithm to the input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+</dl>
+
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dd><p>Set an expression for the box radius in pixels used for blurring the
+corresponding input plane.
+</p>
+<p>The radius value must be a non-negative number, and must not be
+greater than the value of the expression <code>min(w,h)/2</code> for the
+luma and alpha planes, and of <code>min(cw,ch)/2</code> for the chroma
+planes.
+</p>
+<p>Default value for ‘<samp>luma_radius</samp>’ is "2". If not specified,
+‘<samp>chroma_radius</samp>’ and ‘<samp>alpha_radius</samp>’ default to the
+corresponding value set for ‘<samp>luma_radius</samp>’.
+</p>
+<p>The expressions can contain the following constants:
+</p><dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>cw</samp>’</dt>
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>the input chroma image width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+<dd><p>Specify how many times the boxblur filter is applied to the
+corresponding plane.
+</p>
+<p>Default value for ‘<samp>luma_power</samp>’ is 2. If not specified,
+‘<samp>chroma_power</samp>’ and ‘<samp>alpha_power</samp>’ default to the
+corresponding value set for ‘<samp>luma_power</samp>’.
+</p>
+<p>A value of 0 will disable the effect.
+</p></dd>
+</dl>
+
+<a name="Examples-96"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-96">37.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply a boxblur filter with luma, chroma, and alpha radius
+set to 2:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=2:luma_power=1
+boxblur=2:1
+</pre></td></tr></table>
+
+</li><li>
+Set luma radius to 2, alpha and chroma radius to 0:
+<table><tr><td> </td><td><pre class="example">boxblur=2:1:cr=0:ar=0
+</pre></td></tr></table>
+
+</li><li>
+Set luma and chroma radius to a fraction of the video dimension:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorbalance"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-colorbalance">37.9 colorbalance</a></h2>
+<p>Modify intensity of primary colors (red, green and blue) of input frames.
+</p>
+<p>The filter allows an input frame to be adjusted in the shadows, midtones or highlights
+regions for the red-cyan, green-magenta or blue-yellow balance.
+</p>
+<p>A positive adjustment value shifts the balance towards the primary color, a negative
+value towards the complementary color.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rs</samp>’</dt>
+<dt> ‘<samp>gs</samp>’</dt>
+<dt> ‘<samp>bs</samp>’</dt>
+<dd><p>Adjust red, green and blue shadows (darkest pixels).
+</p>
+</dd>
+<dt> ‘<samp>rm</samp>’</dt>
+<dt> ‘<samp>gm</samp>’</dt>
+<dt> ‘<samp>bm</samp>’</dt>
+<dd><p>Adjust red, green and blue midtones (medium pixels).
+</p>
+</dd>
+<dt> ‘<samp>rh</samp>’</dt>
+<dt> ‘<samp>gh</samp>’</dt>
+<dt> ‘<samp>bh</samp>’</dt>
+<dd><p>Adjust red, green and blue highlights (brightest pixels).
+</p>
+<p>Allowed ranges for options are <code>[-1.0, 1.0]</code>. Defaults are <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-88"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-88">37.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Add red color cast to shadows:
+<table><tr><td> </td><td><pre class="example">colorbalance=rs=.3
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorchannelmixer"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-colorchannelmixer">37.10 colorchannelmixer</a></h2>
+
+<p>Adjust video input frames by re-mixing color channels.
+</p>
+<p>This filter modifies a color channel by adding the values associated to
+the other channels of the same pixels. For example if the value to
+modify is red, the output value will be:
+</p><table><tr><td> </td><td><pre class="example"><var>red</var>=<var>red</var>*<var>rr</var> + <var>blue</var>*<var>rb</var> + <var>green</var>*<var>rg</var> + <var>alpha</var>*<var>ra</var>
+</pre></td></tr></table>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rr</samp>’</dt>
+<dt> ‘<samp>rg</samp>’</dt>
+<dt> ‘<samp>rb</samp>’</dt>
+<dt> ‘<samp>ra</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output red channel.
+Default is <code>1</code> for <var>rr</var>, and <code>0</code> for <var>rg</var>, <var>rb</var> and <var>ra</var>.
+</p>
+</dd>
+<dt> ‘<samp>gr</samp>’</dt>
+<dt> ‘<samp>gg</samp>’</dt>
+<dt> ‘<samp>gb</samp>’</dt>
+<dt> ‘<samp>ga</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output green channel.
+Default is <code>1</code> for <var>gg</var>, and <code>0</code> for <var>gr</var>, <var>gb</var> and <var>ga</var>.
+</p>
+</dd>
+<dt> ‘<samp>br</samp>’</dt>
+<dt> ‘<samp>bg</samp>’</dt>
+<dt> ‘<samp>bb</samp>’</dt>
+<dt> ‘<samp>ba</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output blue channel.
+Default is <code>1</code> for <var>bb</var>, and <code>0</code> for <var>br</var>, <var>bg</var> and <var>ba</var>.
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dt> ‘<samp>ag</samp>’</dt>
+<dt> ‘<samp>ab</samp>’</dt>
+<dt> ‘<samp>aa</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output alpha channel.
+Default is <code>1</code> for <var>aa</var>, and <code>0</code> for <var>ar</var>, <var>ag</var> and <var>ab</var>.
+</p>
+<p>Allowed ranges for options are <code>[-2.0, 2.0]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-28"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-28">37.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert source to grayscale:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
+</pre></td></tr></table>
+</li><li>
+Simulate sepia tones:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colormatrix"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-colormatrix">37.11 colormatrix</a></h2>
+
+<p>Convert color matrix.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>src</samp>’</dt>
+<dt> ‘<samp>dst</samp>’</dt>
+<dd><p>Specify the source and destination color matrix. Both values must be
+specified.
+</p>
+<p>The accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>BT.709
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>BT.601
+</p>
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>SMPTE-240M
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>FCC
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>For example to convert from BT.601 to SMPTE-240M, use the command:
+</p><table><tr><td> </td><td><pre class="example">colormatrix=bt601:smpte240m
+</pre></td></tr></table>
+
+<a name="copy"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-copy">37.12 copy</a></h2>
+
+<p>Copy the input source unchanged to the output. Mainly useful for
+testing purposes.
+</p>
+<a name="crop"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-crop">37.13 crop</a></h2>
+
+<p>Crop the input video to given dimensions.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w, out_w</samp>’</dt>
+<dd><p>Width of the output video. It defaults to <code>iw</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>h, out_h</samp>’</dt>
+<dd><p>Height of the output video. It defaults to <code>ih</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dd><p>Horizontal position, in the input video, of the left edge of the output video.
+It defaults to <code>(in_w-out_w)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Vertical position, in the input video, of the top edge of the output video.
+It defaults to <code>(in_h-out_h)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>keep_aspect</samp>’</dt>
+<dd><p>If set to 1 will force the output display aspect ratio
+to be the same of the input, by changing the output sample aspect
+ratio. It defaults to 0.
+</p></dd>
+</dl>
+
+<p>The <var>out_w</var>, <var>out_h</var>, <var>x</var>, <var>y</var> parameters are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output (cropped) width and height
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>The expression for <var>out_w</var> may depend on the value of <var>out_h</var>,
+and the expression for <var>out_h</var> may depend on <var>out_w</var>, but they
+cannot depend on <var>x</var> and <var>y</var>, as <var>x</var> and <var>y</var> are
+evaluated after <var>out_w</var> and <var>out_h</var>.
+</p>
+<p>The <var>x</var> and <var>y</var> 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.
+</p>
+<p>The expression for <var>x</var> may depend on <var>y</var>, and the expression
+for <var>y</var> may depend on <var>x</var>.
+</p>
+<a name="Examples-51"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-51">37.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Crop area with size 100x100 at position (12,34).
+<table><tr><td> </td><td><pre class="example">crop=100:100:12:34
+</pre></td></tr></table>
+
+<p>Using named options, the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">crop=w=100:h=100:x=12:y=34
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 100x100:
+<table><tr><td> </td><td><pre class="example">crop=100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 2/3 of the input video:
+<table><tr><td> </td><td><pre class="example">crop=2/3*in_w:2/3*in_h
+</pre></td></tr></table>
+
+</li><li>
+Crop the input video central square:
+<table><tr><td> </td><td><pre class="example">crop=out_w=in_h
+crop=in_h
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">crop=in_w-100:in_h-100:100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop 10 pixels from the left and right borders, and 20 pixels from
+the top and bottom borders
+<table><tr><td> </td><td><pre class="example">crop=in_w-2*10:in_h-2*20
+</pre></td></tr></table>
+
+</li><li>
+Keep only the bottom right quarter of the input image:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:in_w/2:in_h/2
+</pre></td></tr></table>
+
+</li><li>
+Crop height for getting Greek harmony:
+<table><tr><td> </td><td><pre class="example">crop=in_w:1/PHI*in_w
+</pre></td></tr></table>
+
+</li><li>
+Appply trembling effect:
+<table><tr><td> </td><td><pre class="example">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)
+</pre></td></tr></table>
+
+</li><li>
+Apply erratic camera effect depending on timestamp:
+<table><tr><td> </td><td><pre class="example">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)"
+</pre></td></tr></table>
+
+</li><li>
+Set x depending on the value of y:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:y:10+10*sin(n/10)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="cropdetect"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-cropdetect">37.14 cropdetect</a></h2>
+
+<p>Auto-detect crop size.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>limit</samp>’</dt>
+<dd><p>Set higher black value threshold, which can be optionally specified
+from nothing (0) to everything (255). An intensity value greater
+to the set value is considered non-black. Default value is 24.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Set the value for which the width/height should be divisible by. 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. Default value is 16.
+</p>
+</dd>
+<dt> ‘<samp>reset_count, reset</samp>’</dt>
+<dd><p>Set the 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. Default value is 0.
+</p>
+<p>This can be useful when channel logos distort the video area. 0
+indicates never reset and return the largest area encountered during
+playback.
+</p></dd>
+</dl>
+
+<p><a name="curves"></a>
+</p><a name="curves-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-curves-1">37.15 curves</a></h2>
+
+<p>Apply color adjustments using curves.
+</p>
+<p>This filter is similar to the Adobe Photoshop and GIMP curves tools. Each
+component (red, green and blue) has its values defined by <var>N</var> key points
+tied from each other using a smooth curve. The x-axis represents the pixel
+values from the input frame, and the y-axis the new pixel values to be set for
+the output frame.
+</p>
+<p>By default, a component curve is defined by the two points <var>(0;0)</var> and
+<var>(1;1)</var>. This creates a straight line where each original pixel value is
+"adjusted" to its own value, which means no change to the image.
+</p>
+<p>The filter allows you to redefine these two points and add some more. A new
+curve (using a natural cubic spline interpolation) will be define to pass
+smoothly through all these new coordinates. The new defined points needs to be
+strictly increasing over the x-axis, and their <var>x</var> and <var>y</var> values must
+be in the <var>[0;1]</var> interval. If the computed curves happened to go outside
+the vector spaces, the values will be clipped accordingly.
+</p>
+<p>If there is no key point defined in <code>x=0</code>, the filter will automatically
+insert a <var>(0;0)</var> point. In the same way, if there is no key point defined
+in <code>x=1</code>, the filter will automatically insert a <var>(1;1)</var> point.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>preset</samp>’</dt>
+<dd><p>Select one of the available color presets. This option can be used in addition
+to the ‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ parameters; in this case, the later
+options takes priority on the preset values.
+Available presets are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dt> ‘<samp>color_negative</samp>’</dt>
+<dt> ‘<samp>cross_process</samp>’</dt>
+<dt> ‘<samp>darker</samp>’</dt>
+<dt> ‘<samp>increase_contrast</samp>’</dt>
+<dt> ‘<samp>lighter</samp>’</dt>
+<dt> ‘<samp>linear_contrast</samp>’</dt>
+<dt> ‘<samp>medium_contrast</samp>’</dt>
+<dt> ‘<samp>negative</samp>’</dt>
+<dt> ‘<samp>strong_contrast</samp>’</dt>
+<dt> ‘<samp>vintage</samp>’</dt>
+</dl>
+<p>Default is <code>none</code>.
+</p></dd>
+<dt> ‘<samp>master, m</samp>’</dt>
+<dd><p>Set the master key points. These points will define a second pass mapping. It
+is sometimes called a "luminance" or "value" mapping. It can be used with
+‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ or ‘<samp>all</samp>’ since it acts like a
+post-processing LUT.
+</p></dd>
+<dt> ‘<samp>red, r</samp>’</dt>
+<dd><p>Set the key points for the red component.
+</p></dd>
+<dt> ‘<samp>green, g</samp>’</dt>
+<dd><p>Set the key points for the green component.
+</p></dd>
+<dt> ‘<samp>blue, b</samp>’</dt>
+<dd><p>Set the key points for the blue component.
+</p></dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Set the key points for all components (not including master).
+Can be used in addition to the other key points component
+options. In this case, the unset component(s) will fallback on this
+‘<samp>all</samp>’ setting.
+</p></dd>
+<dt> ‘<samp>psfile</samp>’</dt>
+<dd><p>Specify a Photoshop curves file (<code>.asv</code>) to import the settings from.
+</p></dd>
+</dl>
+
+<p>To avoid some filtergraph syntax conflicts, each key points list need to be
+defined using the following syntax: <code>x0/y0 x1/y1 x2/y2 ...</code>.
+</p>
+<a name="Examples-94"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-94">37.15.1 Examples</a></h3>
+
+<ul>
+<li>
+Increase slightly the middle level of blue:
+<table><tr><td> </td><td><pre class="example">curves=blue='0.5/0.58'
+</pre></td></tr></table>
+
+</li><li>
+Vintage effect:
+<table><tr><td> </td><td><pre class="example">curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
+</pre></td></tr></table>
+<p>Here we obtain the following coordinates for each components:
+</p><dl compact="compact">
+<dt> <var>red</var></dt>
+<dd><p><code>(0;0.11) (0.42;0.51) (1;0.95)</code>
+</p></dd>
+<dt> <var>green</var></dt>
+<dd><p><code>(0;0) (0.50;0.48) (1;1)</code>
+</p></dd>
+<dt> <var>blue</var></dt>
+<dd><p><code>(0;0.22) (0.49;0.44) (1;0.80)</code>
+</p></dd>
+</dl>
+
+</li><li>
+The previous example can also be achieved with the associated built-in preset:
+<table><tr><td> </td><td><pre class="example">curves=preset=vintage
+</pre></td></tr></table>
+
+</li><li>
+Or simply:
+<table><tr><td> </td><td><pre class="example">curves=vintage
+</pre></td></tr></table>
+
+</li><li>
+Use a Photoshop preset and redefine the points of the green component:
+<table><tr><td> </td><td><pre class="example">curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="dctdnoiz"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-dctdnoiz">37.16 dctdnoiz</a></h2>
+
+<p>Denoise frames using 2D DCT (frequency domain filtering).
+</p>
+<p>This filter is not designed for real time and can be extremely slow.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sigma, s</samp>’</dt>
+<dd><p>Set the noise sigma constant.
+</p>
+<p>This <var>sigma</var> defines a hard threshold of <code>3 * sigma</code>; every DCT
+coefficient (absolute value) below this threshold with be dropped.
+</p>
+<p>If you need a more advanced filtering, see ‘<samp>expr</samp>’.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>overlap</samp>’</dt>
+<dd><p>Set number overlapping pixels for each block. Each block is of size
+<code>16x16</code>. Since the filter can be slow, you may want to reduce this value,
+at the cost of a less effective filter and the risk of various artefacts.
+</p>
+<p>If the overlapping value doesn’t allow to process the whole input width or
+height, a warning will be displayed and according borders won’t be denoised.
+</p>
+<p>Default value is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the coefficient factor expression.
+</p>
+<p>For each coefficient of a DCT block, this expression will be evaluated as a
+multiplier value for the coefficient.
+</p>
+<p>If this is option is set, the ‘<samp>sigma</samp>’ option will be ignored.
+</p>
+<p>The absolute value of the coefficient can be accessed through the <var>c</var>
+variable.
+</p></dd>
+</dl>
+
+<a name="Examples-12"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-12">37.16.1 Examples</a></h3>
+
+<p>Apply a denoise with a ‘<samp>sigma</samp>’ of <code>4.5</code>:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=4.5
+</pre></td></tr></table>
+
+<p>The same operation can be achieved using the expression system:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=e='gte(c, 4.5*3)'
+</pre></td></tr></table>
+
+<p><a name="decimate"></a>
+</p><a name="decimate-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-decimate-1">37.17 decimate</a></h2>
+
+<p>Drop duplicated frames at regular intervals.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Set the number of frames from which one will be dropped. Setting this to
+<var>N</var> means one frame in every batch of <var>N</var> frames will be dropped.
+Default is <code>5</code>.
+</p>
+</dd>
+<dt> ‘<samp>dupthresh</samp>’</dt>
+<dd><p>Set the threshold for duplicate detection. If the difference metric for a frame
+is less than or equal to this value, then it is declared as duplicate. Default
+is <code>1.1</code>
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set scene change threshold. Default is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Set the size of the x and y-axis blocks used during metric calculations.
+Larger blocks give better noise suppression, but also give worse detection of
+small movements. Must be a power of two. Default is <code>32</code>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark main input as a pre-processed input and activate clean source input
+stream. This allows the input to be pre-processed with various filters to help
+the metrics calculation while keeping the frame selection lossless. When set to
+<code>1</code>, the first stream is for the pre-processed input, and the second
+stream is the clean source from where the kept frames are chosen. Default is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Set whether or not chroma is considered in the metric calculations. Default is
+<code>1</code>.
+</p></dd>
+</dl>
+
+<a name="dejudder"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-dejudder">37.18 dejudder</a></h2>
+
+<p>Remove judder produced by partially interlaced telecined content.
+</p>
+<p>Judder can be introduced, for instance, by <a href="#pullup">pullup</a> filter. If the original
+source was partially telecined content then the output of <code>pullup,dejudder</code>
+will have a variable frame rate. May change the recorded frame rate of the
+container. Aside from that change, this filter will not affect constant frame
+rate video.
+</p>
+<p>The option available in this filter is:
+</p><dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Specify the length of the window over which the judder repeats.
+</p>
+<p>Accepts any interger greater than 1. Useful values are:
+</p><dl compact="compact">
+<dt> ‘<samp>4</samp>’</dt>
+<dd><p>If the original was telecined from 24 to 30 fps (Film to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>5</samp>’</dt>
+<dd><p>If the original was telecined from 25 to 30 fps (PAL to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>20</samp>’</dt>
+<dd><p>If a mixture of the two.
+</p></dd>
+</dl>
+
+<p>The default is ‘<samp>4</samp>’.
+</p></dd>
+</dl>
+
+<a name="delogo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-delogo">37.19 delogo</a></h2>
+
+<p>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).
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify the top left corner coordinates of the logo. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the width and height of the logo to clear. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>band, t</samp>’</dt>
+<dd><p>Specify the thickness of the fuzzy edge of the rectangle (added to
+<var>w</var> and <var>h</var>). The default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>When set to 1, a green rectangle is drawn on the screen to simplify
+finding the right <var>x</var>, <var>y</var>, <var>w</var>, and <var>h</var> parameters.
+The default value is 0.
+</p>
+<p>The rectangle is drawn on the outermost pixels which will be (partly)
+replaced with interpolated values. The values of the next pixels
+immediately outside this rectangle in each direction will be used to
+compute the interpolated pixel values inside the rectangle.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-22"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-22">37.19.1 Examples</a></h3>
+
+<ul>
+<li>
+Set a rectangle covering the area with top left corner coordinates 0,0
+and size 100x77, setting a band of size 10:
+<table><tr><td> </td><td><pre class="example">delogo=x=0:y=0:w=100:h=77:band=10
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="deshake"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-deshake">37.20 deshake</a></h2>
+
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This is useful when simultaneous movement of subjects within the frame
+might be confused for camera motion by the motion vector search.
+</p>
+<p>If any or all of <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> 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.
+</p>
+<p>Default - search the whole frame.
+</p>
+</dd>
+<dt> ‘<samp>rx</samp>’</dt>
+<dt> ‘<samp>ry</samp>’</dt>
+<dd><p>Specify the maximum extent of movement in x and y directions in the
+range 0-64 pixels. Default 16.
+</p>
+</dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>Specify how to generate pixels to fill blanks at the edge of the
+frame. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>blank, 0</samp>’</dt>
+<dd><p>Fill zeroes at blank locations
+</p></dd>
+<dt> ‘<samp>original, 1</samp>’</dt>
+<dd><p>Original image at blank locations
+</p></dd>
+<dt> ‘<samp>clamp, 2</samp>’</dt>
+<dd><p>Extruded edge value at blank locations
+</p></dd>
+<dt> ‘<samp>mirror, 3</samp>’</dt>
+<dd><p>Mirrored edge at blank locations
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>mirror</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Specify the blocksize to use for motion search. Range 4-128 pixels,
+default 8.
+</p>
+</dd>
+<dt> ‘<samp>contrast</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>search</samp>’</dt>
+<dd><p>Specify the search strategy. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>exhaustive, 0</samp>’</dt>
+<dd><p>Set exhaustive search
+</p></dd>
+<dt> ‘<samp>less, 1</samp>’</dt>
+<dd><p>Set less exhaustive search.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>exhaustive</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>If set then a detailed log of the motion search is written to the
+specified file.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<a name="drawbox"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-drawbox">37.21 drawbox</a></h2>
+
+<p>Draw a colored box on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the top left corner coordinates of the box. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the box, if 0 they are interpreted as
+the input width and height. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the box to write. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the box edge color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the box edge. Default value is <code>3</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y offset coordinates where the box is drawn.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn box.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn box.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-48"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-48">37.21.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a black box around the edge of the input image:
+<table><tr><td> </td><td><pre class="example">drawbox
+</pre></td></tr></table>
+
+</li><li>
+Draw a box with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawbox=10:20:200:60:red@0.5
+</pre></td></tr></table>
+
+<p>The previous example can be specified as:
+</p><table><tr><td> </td><td><pre class="example">drawbox=x=10:y=20:w=200:h=60:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Fill the box with pink color:
+<table><tr><td> </td><td><pre class="example">drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
+</pre></td></tr></table>
+
+</li><li>
+Draw a 2-pixel red 2.40:1 mask:
+<table><tr><td> </td><td><pre class="example">drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
+</pre></td></tr></table>
+</li></ul>
+
+<a name="drawgrid"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-drawgrid">37.22 drawgrid</a></h2>
+
+<p>Draw a grid on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the grid cell, if 0 they are interpreted as the
+input width and height, respectively, minus <code>thickness</code>, so image gets
+framed. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the grid. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the grid color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the grid line. Default value is <code>1</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input grid cell width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y coordinates of some point of grid intersection (meant to configure offset).
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn cell.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn cell.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-60"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-60">37.22.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=width=100:height=100:thickness=2:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Draw a white 3x3 grid with an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="drawtext"></a>
+</p><a name="drawtext-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-drawtext-1">37.23 drawtext</a></h2>
+
+<p>Draw text string or text from specified file on top of video using the
+libfreetype library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libfreetype</code>.
+</p>
+<a name="Syntax-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Syntax-1">37.23.1 Syntax</a></h3>
+
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>box</samp>’</dt>
+<dd><p>Used to draw a box around text using background color.
+Value should be either 1 (enable) or 0 (disable).
+The default value of <var>box</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>boxcolor</samp>’</dt>
+<dd><p>The color to be used for drawing box around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>boxcolor</var> is "white".
+</p>
+</dd>
+<dt> ‘<samp>borderw</samp>’</dt>
+<dd><p>Set the width of the border to be drawn around the text using <var>bordercolor</var>.
+The default value of <var>borderw</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>bordercolor</samp>’</dt>
+<dd><p>Set the color to be used for drawing border around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>bordercolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>expansion</samp>’</dt>
+<dd><p>Select how the <var>text</var> is expanded. Can be either <code>none</code>,
+<code>strftime</code> (deprecated) or
+<code>normal</code> (default). See the <a href="#drawtext_005fexpansion">Text expansion</a> section
+below for details.
+</p>
+</dd>
+<dt> ‘<samp>fix_bounds</samp>’</dt>
+<dd><p>If true, check and fix text coords to avoid clipping.
+</p>
+</dd>
+<dt> ‘<samp>fontcolor</samp>’</dt>
+<dd><p>The color to be used for drawing fonts. For the syntax of this option, check
+the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>fontcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>fontfile</samp>’</dt>
+<dd><p>The font file to be used for drawing text. Path must be included.
+This parameter is mandatory.
+</p>
+</dd>
+<dt> ‘<samp>fontsize</samp>’</dt>
+<dd><p>The font size to be used for drawing text.
+The default value of <var>fontsize</var> is 16.
+</p>
+</dd>
+<dt> ‘<samp>ft_load_flags</samp>’</dt>
+<dd><p>Flags to be used for loading the fonts.
+</p>
+<p>The flags map the corresponding flags supported by libfreetype, and are
+a combination of the following values:
+</p><dl compact="compact">
+<dt> <var>default</var></dt>
+<dt> <var>no_scale</var></dt>
+<dt> <var>no_hinting</var></dt>
+<dt> <var>render</var></dt>
+<dt> <var>no_bitmap</var></dt>
+<dt> <var>vertical_layout</var></dt>
+<dt> <var>force_autohint</var></dt>
+<dt> <var>crop_bitmap</var></dt>
+<dt> <var>pedantic</var></dt>
+<dt> <var>ignore_global_advance_width</var></dt>
+<dt> <var>no_recurse</var></dt>
+<dt> <var>ignore_transform</var></dt>
+<dt> <var>monochrome</var></dt>
+<dt> <var>linear_design</var></dt>
+<dt> <var>no_autohint</var></dt>
+</dl>
+
+<p>Default value is "default".
+</p>
+<p>For more information consult the documentation for the FT_LOAD_*
+libfreetype flags.
+</p>
+</dd>
+<dt> ‘<samp>shadowcolor</samp>’</dt>
+<dd><p>The color to be used for drawing a shadow behind the drawn text. For the
+syntax of this option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>shadowcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>shadowx</samp>’</dt>
+<dt> ‘<samp>shadowy</samp>’</dt>
+<dd><p>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".
+</p>
+</dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>The starting frame number for the n/frame_num variable. The default value
+is "0".
+</p>
+</dd>
+<dt> ‘<samp>tabsize</samp>’</dt>
+<dd><p>The size in number of spaces to use for rendering the tab.
+Default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>timecode</samp>’</dt>
+<dd><p>Set the initial timecode representation in "hh:mm:ss[:;.]ff"
+format. It can be used with or without text parameter. <var>timecode_rate</var>
+option must be specified.
+</p>
+</dd>
+<dt> ‘<samp>timecode_rate, rate, r</samp>’</dt>
+<dd><p>Set the timecode frame rate (timecode only).
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>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
+<var>textfile</var>.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>A text file containing text to be drawn. The text must be a sequence
+of UTF-8 encoded characters.
+</p>
+<p>This parameter is mandatory if no text string is specified with the
+parameter <var>text</var>.
+</p>
+<p>If both <var>text</var> and <var>textfile</var> are specified, an error is thrown.
+</p>
+</dd>
+<dt> ‘<samp>reload</samp>’</dt>
+<dd><p>If set to 1, the <var>textfile</var> will be reloaded before each frame.
+Be sure to update it atomically, or it may be read partially, or even fail.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>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.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is "0".
+</p>
+<p>See below for the list of accepted constants and functions.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var> and <var>y</var> are expressions containing the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>line_h, lh</samp>’</dt>
+<dd><p>the height of each text line
+</p>
+</dd>
+<dt> ‘<samp>main_h, h, H</samp>’</dt>
+<dd><p>the input height
+</p>
+</dd>
+<dt> ‘<samp>main_w, w, W</samp>’</dt>
+<dd><p>the input width
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_a, ascent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_d, descent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_h</samp>’</dt>
+<dd><p>maximum glyph height, that is the maximum height for all the glyphs
+contained in the rendered text, it is equivalent to <var>ascent</var> -
+<var>descent</var>.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_w</samp>’</dt>
+<dd><p>maximum glyph width, that is the maximum width for all the glyphs
+contained in the rendered text
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>rand(min, max)</samp>’</dt>
+<dd><p>return a random number included between <var>min</var> and <var>max</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>text_h, th</samp>’</dt>
+<dd><p>the height of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>text_w, tw</samp>’</dt>
+<dd><p>the width of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the x and y offset coordinates where the text is drawn.
+</p>
+<p>These parameters allow the <var>x</var> and <var>y</var> expressions to refer
+each other, so you can for example specify <code>y=x/dar</code>.
+</p></dd>
+</dl>
+
+<p>If libavfilter was built with <code>--enable-fontconfig</code>, then
+‘<samp>fontfile</samp>’ can be a fontconfig pattern or omitted.
+</p>
+<p><a name="drawtext_005fexpansion"></a>
+</p><a name="Text-expansion"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Text-expansion">37.23.2 Text expansion</a></h3>
+
+<p>If ‘<samp>expansion</samp>’ is set to <code>strftime</code>,
+the filter recognizes strftime() sequences in the provided text and
+expands them accordingly. Check the documentation of strftime(). This
+feature is deprecated.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>none</code>, the text is printed verbatim.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>normal</code> (which is the default),
+the following expansion mechanism is used.
+</p>
+<p>The backslash character ’\’, followed by any character, always expands to
+the second character.
+</p>
+<p>Sequence of the form <code>%{...}</code> are expanded. The text between the
+braces is a function name, possibly followed by arguments separated by ’:’.
+If the arguments contain special characters or delimiters (’:’ or ’}’),
+they should be escaped.
+</p>
+<p>Note that they probably must also be escaped as the value for the
+‘<samp>text</samp>’ option in the filter argument string and as the filter
+argument in the filtergraph description, and possibly also for the shell,
+that makes up to four levels of escaping; using a text file avoids these
+problems.
+</p>
+<p>The following functions are available:
+</p>
+<dl compact="compact">
+<dt> <code>expr, e</code></dt>
+<dd><p>The expression evaluation result.
+</p>
+<p>It must take one argument specifying the expression to be evaluated,
+which accepts the same constants and functions as the <var>x</var> and
+<var>y</var> values. Note that not all constants should be used, for
+example the text size is not known when evaluating the expression, so
+the constants <var>text_w</var> and <var>text_h</var> will have an undefined
+value.
+</p>
+</dd>
+<dt> <code>gmtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in UTC.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>localtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in the local time zone.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>metadata</code></dt>
+<dd><p>Frame metadata. It must take one argument specifying metadata key.
+</p>
+</dd>
+<dt> <code>n, frame_num</code></dt>
+<dd><p>The frame number, starting from 0.
+</p>
+</dd>
+<dt> <code>pict_type</code></dt>
+<dd><p>A 1 character description of the current picture type.
+</p>
+</dd>
+<dt> <code>pts</code></dt>
+<dd><p>The timestamp of the current frame, in seconds, with microsecond accuracy.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-86"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-86">37.23.3 Examples</a></h3>
+
+<ul>
+<li>
+Draw "Test Text" with font FreeSerif, using the default values for the
+optional parameters.
+
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
+</pre></td></tr></table>
+
+</li><li>
+Draw ’Test Text’ with font FreeSerif of size 24 at position x=100
+and y=50 (counting from the top-left corner of the screen), text is
+yellow with a red box around it. Both the text and the box have an
+opacity of 20%.
+
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>Note that the double quotes are not necessary if spaces are not used
+within the parameter list.
+</p>
+</li><li>
+Show the text at the center of the video frame:
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
+</pre></td></tr></table>
+
+</li><li>
+Show a text line sliding from right to left in the last row of the video
+frame. The file ‘<tt>LONG_LINE</tt>’ is assumed to contain a single line
+with no newlines.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
+</pre></td></tr></table>
+
+</li><li>
+Show the content of file ‘<tt>CREDITS</tt>’ off the bottom of the frame and scroll up.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
+</pre></td></tr></table>
+
+</li><li>
+Draw a single green letter "g", at the center of the input video.
+The glyph baseline is placed at half screen height.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
+</pre></td></tr></table>
+
+</li><li>
+Show text for 1 second every 3 seconds:
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
+</pre></td></tr></table>
+
+</li><li>
+Use fontconfig to set the font. Note that the colons need to be escaped.
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
+</pre></td></tr></table>
+
+</li><li>
+Print the date of a real-time encoding (see strftime(3)):
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
+</pre></td></tr></table>
+
+</li></ul>
+
+<p>For more information about libfreetype, check:
+<a href="http://www.freetype.org/">http://www.freetype.org/</a>.
+</p>
+<p>For more information about fontconfig, check:
+<a href="http://freedesktop.org/software/fontconfig/fontconfig-user.html">http://freedesktop.org/software/fontconfig/fontconfig-user.html</a>.
+</p>
+<a name="edgedetect"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-edgedetect">37.24 edgedetect</a></h2>
+
+<p>Detect and draw edges. The filter uses the Canny Edge Detection algorithm.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low</samp>’</dt>
+<dt> ‘<samp>high</samp>’</dt>
+<dd><p>Set low and high threshold values used by the Canny thresholding
+algorithm.
+</p>
+<p>The high threshold selects the "strong" edge pixels, which are then
+connected through 8-connectivity with the "weak" edge pixels selected
+by the low threshold.
+</p>
+<p><var>low</var> and <var>high</var> threshold values must be chosen in the range
+[0,1], and <var>low</var> should be lesser or equal to <var>high</var>.
+</p>
+<p>Default value for <var>low</var> is <code>20/255</code>, and default value for <var>high</var>
+is <code>50/255</code>.
+</p></dd>
+</dl>
+
+<p>Example:
+</p><table><tr><td> </td><td><pre class="example">edgedetect=low=0.1:high=0.4
+</pre></td></tr></table>
+
+<a name="extractplanes"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-extractplanes">37.25 extractplanes</a></h2>
+
+<p>Extract color channel components from input video stream into
+separate grayscale video streams.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>planes</samp>’</dt>
+<dd><p>Set plane(s) to extract.
+</p>
+<p>Available values for planes are:
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>u</samp>’</dt>
+<dt> ‘<samp>v</samp>’</dt>
+<dt> ‘<samp>a</samp>’</dt>
+<dt> ‘<samp>r</samp>’</dt>
+<dt> ‘<samp>g</samp>’</dt>
+<dt> ‘<samp>b</samp>’</dt>
+</dl>
+
+<p>Choosing planes not available in the input will result in an error.
+That means you cannot select <code>r</code>, <code>g</code>, <code>b</code> planes
+with <code>y</code>, <code>u</code>, <code>v</code> planes at same time.
+</p></dd>
+</dl>
+
+<a name="Examples-27"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-27">37.25.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract luma, u and v color channel component from input video frame
+into 3 grayscale outputs:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
+</pre></td></tr></table>
+</li></ul>
+
+<a name="elbg"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-elbg">37.26 elbg</a></h2>
+
+<p>Apply a posterize effect using the ELBG (Enhanced LBG) algorithm.
+</p>
+<p>For each input image, the filter will compute the optimal mapping from
+the input to the output given the codebook length, that is the number
+of distinct output colors.
+</p>
+<p>This filter accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>codebook_length, l</samp>’</dt>
+<dd><p>Set codebook length. The value must be a positive integer, and
+represents the number of distinct output colors. Default value is 256.
+</p>
+</dd>
+<dt> ‘<samp>nb_steps, n</samp>’</dt>
+<dd><p>Set the maximum number of iterations to apply for computing the optimal
+mapping. The higher the value the better the result and the higher the
+computation time. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>seed, s</samp>’</dt>
+<dd><p>Set a random seed, 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.
+</p></dd>
+</dl>
+
+<a name="fade"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fade">37.27 fade</a></h2>
+
+<p>Apply fade-in/out effect to input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>The effect type – can be either "in" for fade-in, or "out" for a fade-out
+effect.
+Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_frame, s</samp>’</dt>
+<dd><p>Specify the number of the start frame for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames, n</samp>’</dt>
+<dd><p>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 filled with the
+selected ‘<samp>color</samp>’.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>alpha</samp>’</dt>
+<dd><p>If set to 1, fade only alpha channel, if one exists on the input.
+Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify the timestamp (in seconds) of the frame to start to apply the fade
+effect. If both start_frame and start_time are specified, the fade will start at
+whichever comes last. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>The number of seconds 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 filled with the
+selected ‘<samp>color</samp>’.
+If both duration and nb_frames are specified, duration is used. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the fade. Default is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-1">37.27.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 30 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:30
+</pre></td></tr></table>
+
+<p>The command above is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">fade=t=in:s=0:n=30
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 45 frames of a 200-frame video:
+<table><tr><td> </td><td><pre class="example">fade=out:155:45
+fade=type=out:start_frame=155:nb_frames=45
+</pre></td></tr></table>
+
+</li><li>
+Fade in first 25 frames and fade out last 25 frames of a 1000-frame video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25, fade=out:975:25
+</pre></td></tr></table>
+
+</li><li>
+Make first 5 frames yellow, then fade in from frame 5-24:
+<table><tr><td> </td><td><pre class="example">fade=in:5:20:color=yellow
+</pre></td></tr></table>
+
+</li><li>
+Fade in alpha over first 25 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25:alpha=1
+</pre></td></tr></table>
+
+</li><li>
+Make first 5.5 seconds black, then fade in for 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">fade=t=in:st=5.5:d=0.5
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="field"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-field">37.28 field</a></h2>
+
+<p>Extract a single field from an interlaced image using stride
+arithmetic to avoid wasting CPU time. The output frames are marked as
+non-interlaced.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Specify whether to extract the top (if the value is <code>0</code> or
+<code>top</code>) or the bottom field (if the value is <code>1</code> or
+<code>bottom</code>).
+</p></dd>
+</dl>
+
+<a name="fieldmatch"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fieldmatch">37.29 fieldmatch</a></h2>
+
+<p>Field matching filter for inverse telecine. It is meant to reconstruct the
+progressive frames from a telecined stream. The filter does not drop duplicated
+frames, so to achieve a complete inverse telecine <code>fieldmatch</code> needs to be
+followed by a decimation filter such as <a href="#decimate">decimate</a> in the filtergraph.
+</p>
+<p>The separation of the field matching and the decimation is notably motivated by
+the possibility of inserting a de-interlacing filter fallback between the two.
+If the source has mixed telecined and real interlaced content,
+<code>fieldmatch</code> will not be able to match fields for the interlaced parts.
+But these remaining combed frames will be marked as interlaced, and thus can be
+de-interlaced by a later filter such as <a href="#yadif">yadif</a> before decimation.
+</p>
+<p>In addition to the various configuration options, <code>fieldmatch</code> can take an
+optional second stream, activated through the ‘<samp>ppsrc</samp>’ option. If
+enabled, the frames reconstruction will be based on the fields and frames from
+this second stream. This allows the first input to be pre-processed in order to
+help the various algorithms of the filter, while keeping the output lossless
+(assuming the fields are matched properly). Typically, a field-aware denoiser,
+or brightness/contrast adjustments can help.
+</p>
+<p>Note that this filter uses the same algorithms as TIVTC/TFM (AviSynth project)
+and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from
+which <code>fieldmatch</code> is based on. While the semantic and usage are very
+close, some behaviour and options names can differ.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Specify the assumed field order of the input stream. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Auto detect parity (use FFmpeg’s internal parity value).
+</p></dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Assume bottom field first.
+</p></dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Assume top field first.
+</p></dd>
+</dl>
+
+<p>Note that it is sometimes recommended not to trust the parity announced by the
+stream.
+</p>
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the matching mode or strategy to use. ‘<samp>pc</samp>’ mode is the safest in the
+sense that it won’t risk creating jerkiness due to duplicate frames when
+possible, but if there are bad edits or blended fields it will end up
+outputting combed frames when a good match might actually exist. On the other
+hand, ‘<samp>pcn_ub</samp>’ mode is the most risky in terms of creating jerkiness,
+but will almost always find a good frame if there is one. The other values are
+all somewhere in between ‘<samp>pc</samp>’ and ‘<samp>pcn_ub</samp>’ in terms of risking
+jerkiness and creating duplicate frames versus finding good matches in sections
+with bad edits, orphaned fields, blended fields, etc.
+</p>
+<p>More details about p/c/n/u/b are available in <a href="#p_002fc_002fn_002fu_002fb-meaning">p/c/n/u/b meaning</a> section.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>pc</samp>’</dt>
+<dd><p>2-way matching (p/c)
+</p></dd>
+<dt> ‘<samp>pc_n</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match if still combed (p/c + n)
+</p></dd>
+<dt> ‘<samp>pc_u</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match (same order) if still combed (p/c + u)
+</p></dd>
+<dt> ‘<samp>pc_n_ub</samp>’</dt>
+<dd><p>2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if
+still combed (p/c + n + u/b)
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>3-way matching (p/c/n)
+</p></dd>
+<dt> ‘<samp>pcn_ub</samp>’</dt>
+<dd><p>3-way matching, and trying 4th/5th matches if all 3 of the original matches are
+detected as combed (p/c/n + u/b)
+</p></dd>
+</dl>
+
+<p>The parenthesis at the end indicate the matches that would be used for that
+mode assuming ‘<samp>order</samp>’=<var>tff</var> (and ‘<samp>field</samp>’ on <var>auto</var> or
+<var>top</var>).
+</p>
+<p>In terms of speed ‘<samp>pc</samp>’ mode is by far the fastest and ‘<samp>pcn_ub</samp>’ is
+the slowest.
+</p>
+<p>Default value is <var>pc_n</var>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark the main input stream as a pre-processed input, and enable the secondary
+input stream as the clean source to pick the fields from. See the filter
+introduction for more details. It is similar to the ‘<samp>clip2</samp>’ feature from
+VFM/TFM.
+</p>
+<p>Default value is <code>0</code> (disabled).
+</p>
+</dd>
+<dt> ‘<samp>field</samp>’</dt>
+<dd><p>Set the field to match from. It is recommended to set this to the same value as
+‘<samp>order</samp>’ unless you experience matching failures with that setting. In
+certain circumstances changing the field that is used to match from can have a
+large impact on matching performance. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatic (same value as ‘<samp>order</samp>’).
+</p></dd>
+<dt> ‘<samp>bottom</samp>’</dt>
+<dd><p>Match from the bottom field.
+</p></dd>
+<dt> ‘<samp>top</samp>’</dt>
+<dd><p>Match from the top field.
+</p></dd>
+</dl>
+
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mchroma</samp>’</dt>
+<dd><p>Set whether or not chroma is included during the match comparisons. In most
+cases it is recommended to leave this enabled. You should set this to <code>0</code>
+only if your clip has bad chroma problems such as heavy rainbowing or other
+artifacts. Setting this to <code>0</code> could also be used to speed things up at
+the cost of some accuracy.
+</p>
+<p>Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dd><p>These define an exclusion band which excludes the lines between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ from being included in the field matching decision. An exclusion
+band can be used to ignore subtitles, a logo, or other things that may
+interfere with the matching. ‘<samp>y0</samp>’ sets the starting scan line and
+‘<samp>y1</samp>’ sets the ending line; all lines in between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ (including ‘<samp>y0</samp>’ and ‘<samp>y1</samp>’) will be ignored. Setting
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ to the same value will disable the feature.
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ defaults to <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set the scene change detection threshold as a percentage of maximum change on
+the luma plane. Good values are in the <code>[8.0, 14.0]</code> range. Scene change
+detection is only relevant in case ‘<samp>combmatch</samp>’=<var>sc</var>. The range for
+‘<samp>scthresh</samp>’ is <code>[0.0, 100.0]</code>.
+</p>
+<p>Default value is <code>12.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>combmatch</samp>’</dt>
+<dd><p>When ‘<samp>combatch</samp>’ is not <var>none</var>, <code>fieldmatch</code> will take into
+account the combed scores of matches when deciding what match to use as the
+final match. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No final matching based on combed scores.
+</p></dd>
+<dt> ‘<samp>sc</samp>’</dt>
+<dd><p>Combed scores are only used when a scene change is detected.
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Use combed scores all the time.
+</p></dd>
+</dl>
+
+<p>Default is <var>sc</var>.
+</p>
+</dd>
+<dt> ‘<samp>combdbg</samp>’</dt>
+<dd><p>Force <code>fieldmatch</code> to calculate the combed metrics for certain matches and
+print them. This setting is known as ‘<samp>micout</samp>’ in TFM/VFM vocabulary.
+Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No forced calculation.
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>Force p/c/n calculations.
+</p></dd>
+<dt> ‘<samp>pcnub</samp>’</dt>
+<dd><p>Force p/c/n/u/b calculations.
+</p></dd>
+</dl>
+
+<p>Default value is <var>none</var>.
+</p>
+</dd>
+<dt> ‘<samp>cthresh</samp>’</dt>
+<dd><p>This is the area combing threshold used for combed frame detection. This
+essentially controls how "strong" or "visible" combing must be to be detected.
+Larger values mean combing must be more visible and smaller values mean combing
+can be less visible or strong and still be detected. Valid settings are from
+<code>-1</code> (every pixel will be detected as combed) to <code>255</code> (no pixel will
+be detected as combed). This is basically a pixel difference value. A good
+range is <code>[8, 12]</code>.
+</p>
+<p>Default value is <code>9</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Sets whether or not chroma is considered in the combed frame decision. Only
+disable this if your source has chroma problems (rainbowing, etc.) that are
+causing problems for the combed frame detection with chroma enabled. Actually,
+using ‘<samp>chroma</samp>’=<var>0</var> is usually more reliable, except for the case
+where there is chroma only combing in the source.
+</p>
+<p>Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Respectively set the x-axis and y-axis size of the window used during combed
+frame detection. This has to do with the size of the area in which
+‘<samp>combpel</samp>’ pixels are required to be detected as combed for a frame to be
+declared combed. See the ‘<samp>combpel</samp>’ parameter description for more info.
+Possible values are any number that is a power of 2 starting at 4 and going up
+to 512.
+</p>
+<p>Default value is <code>16</code>.
+</p>
+</dd>
+<dt> ‘<samp>combpel</samp>’</dt>
+<dd><p>The number of combed pixels inside any of the ‘<samp>blocky</samp>’ by
+‘<samp>blockx</samp>’ size blocks on the frame for the frame to be detected as
+combed. While ‘<samp>cthresh</samp>’ controls how "visible" the combing must be, this
+setting controls "how much" combing there must be in any localized area (a
+window defined by the ‘<samp>blockx</samp>’ and ‘<samp>blocky</samp>’ settings) on the
+frame. Minimum value is <code>0</code> and maximum is <code>blocky x blockx</code> (at
+which point no frames will ever be detected as combed). This setting is known
+as ‘<samp>MI</samp>’ in TFM/VFM vocabulary.
+</p>
+<p>Default value is <code>80</code>.
+</p></dd>
+</dl>
+
+<p><a name="p_002fc_002fn_002fu_002fb-meaning"></a>
+</p><a name="p_002fc_002fn_002fu_002fb-meaning-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-p_002fc_002fn_002fu_002fb-meaning-1">37.29.1 p/c/n/u/b meaning</a></h3>
+
+<a name="p_002fc_002fn"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-p_002fc_002fn">37.29.1.1 p/c/n</a></h4>
+
+<p>We assume the following telecined stream:
+</p>
+<table><tr><td> </td><td><pre class="example">Top fields: 1 2 2 3 4
+Bottom fields: 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>The numbers correspond to the progressive frame the fields relate to. Here, the
+first two frames are progressive, the 3rd and 4th are combed, and so on.
+</p>
+<p>When <code>fieldmatch</code> is configured to run a matching from bottom
+(‘<samp>field</samp>’=<var>bottom</var>) this is how this input stream get transformed:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4
+ B 1 2 3 4 4 <-- matching reference
+
+Matches: c c n n c
+
+Output stream:
+ T 1 2 3 4 4
+ B 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>As a result of the field matching, we can see that some frames get duplicated.
+To perform a complete inverse telecine, you need to rely on a decimation filter
+after this operation. See for instance the <a href="#decimate">decimate</a> filter.
+</p>
+<p>The same operation now matching from top fields (‘<samp>field</samp>’=<var>top</var>)
+looks like this:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4 <-- matching reference
+ B 1 2 3 4 4
+
+Matches: c c p p c
+
+Output stream:
+ T 1 2 2 3 4
+ B 1 2 2 3 4
+</pre></td></tr></table>
+
+<p>In these examples, we can see what <var>p</var>, <var>c</var> and <var>n</var> mean;
+basically, they refer to the frame and field of the opposite parity:
+</p>
+<ul>
+<li> <var>p</var> matches the field of the opposite parity in the previous frame
+</li><li> <var>c</var> matches the field of the opposite parity in the current frame
+</li><li> <var>n</var> matches the field of the opposite parity in the next frame
+</li></ul>
+
+<a name="u_002fb"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-u_002fb">37.29.1.2 u/b</a></h4>
+
+<p>The <var>u</var> and <var>b</var> matching are a bit special in the sense that they match
+from the opposite parity flag. In the following examples, we assume that we are
+currently matching the 2nd frame (Top:2, bottom:2). According to the match, a
+’x’ is placed above and below each matched fields.
+</p>
+<p>With bottom matching (‘<samp>field</samp>’=<var>bottom</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 1 2 2 2
+ 2 2 2 1 3
+</pre></td></tr></table>
+
+<p>With top matching (‘<samp>field</samp>’=<var>top</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 2 2 1 2
+ 2 1 3 2 2
+</pre></td></tr></table>
+
+<a name="Examples-29"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-29">37.29.2 Examples</a></h3>
+
+<p>Simple IVTC of a top field first telecined stream:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=none, decimate
+</pre></td></tr></table>
+
+<p>Advanced IVTC, with fallback on <a href="#yadif">yadif</a> for still combed frames:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
+</pre></td></tr></table>
+
+<a name="fieldorder"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fieldorder">37.30 fieldorder</a></h2>
+
+<p>Transform the field order of the input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Output field order. Valid values are <var>tff</var> for top field first or <var>bff</var>
+for bottom field first.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>tff</samp>’.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter is very useful when converting to or from PAL DV material,
+which is bottom field first.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
+</pre></td></tr></table>
+
+<a name="fifo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fifo">37.31 fifo</a></h2>
+
+<p>Buffer input images and send them when they are requested.
+</p>
+<p>This filter is mainly useful when auto-inserted by the libavfilter
+framework.
+</p>
+<p>The filter does not take parameters.
+</p>
+<p><a name="format"></a>
+</p><a name="format-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-format-1">37.32 format</a></h2>
+
+<p>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.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-49"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-49">37.32.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert the input video to the format <var>yuv420p</var>
+<table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p
+</pre></td></tr></table>
+
+<p>Convert the input video to any of the formats in the list
+</p><table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="fps"></a>
+</p><a name="fps-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-fps-1">37.33 fps</a></h2>
+
+<p>Convert the video to specified constant frame rate by duplicating or dropping
+frames as necessary.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>fps</samp>’</dt>
+<dd><p>Desired output frame rate. The default is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Rounding method.
+</p>
+<p>Possible values are:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero round towards 0
+</p></dd>
+<dt> ‘<samp>inf</samp>’</dt>
+<dd><p>round away from 0
+</p></dd>
+<dt> ‘<samp>down</samp>’</dt>
+<dd><p>round towards -infinity
+</p></dd>
+<dt> ‘<samp>up</samp>’</dt>
+<dd><p>round towards +infinity
+</p></dd>
+<dt> ‘<samp>near</samp>’</dt>
+<dd><p>round to nearest
+</p></dd>
+</dl>
+<p>The default is <code>near</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Assume the first PTS should be the given value, in seconds. This allows for
+padding/trimming at the start of stream. By default, no assumption is made
+about the first frame’s expected PTS, so no padding or trimming is done.
+For example, this could be set to 0 to pad the beginning with duplicates of
+the first frame if a video stream starts after the audio stream or to trim any
+frames with a negative PTS.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>fps</var>[:<var>round</var>].
+</p>
+<p>See also the <a href="#setpts">setpts</a> filter.
+</p>
+<a name="Examples-91"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-91">37.33.1 Examples</a></h3>
+
+<ul>
+<li>
+A typical usage in order to set the fps to 25:
+<table><tr><td> </td><td><pre class="example">fps=fps=25
+</pre></td></tr></table>
+
+</li><li>
+Sets the fps to 24, using abbreviation and rounding method to round to nearest:
+<table><tr><td> </td><td><pre class="example">fps=fps=film:round=near
+</pre></td></tr></table>
+</li></ul>
+
+<a name="framepack"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-framepack">37.34 framepack</a></h2>
+
+<p>Pack two different video streams into a stereoscopic video, setting proper
+metadata on supported codecs. The two views should have the same size and
+framerate and processing will stop when the shorter video ends. Please note
+that you may conveniently adjust view properties with the <a href="#scale">scale</a> and
+<a href="#fps">fps</a> filters.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Desired packing format. Supported values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sbs</samp>’</dt>
+<dd><p>Views are next to each other (default).
+</p>
+</dd>
+<dt> ‘<samp>tab</samp>’</dt>
+<dd><p>Views are on top of each other.
+</p>
+</dd>
+<dt> ‘<samp>lines</samp>’</dt>
+<dd><p>Views are packed by line.
+</p>
+</dd>
+<dt> ‘<samp>columns</samp>’</dt>
+<dd><p>Views are eacked by column.
+</p>
+</dd>
+<dt> ‘<samp>frameseq</samp>’</dt>
+<dd><p>Views are temporally interleaved.
+</p>
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<p>Some examples follow:
+</p>
+<table><tr><td> </td><td><pre class="example"># Convert left and right views into a frame sequential video.
+ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT
+
+# Convert views into a side-by-side video with the same output resolution as the input.
+ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
+</pre></td></tr></table>
+
+<a name="framestep"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-framestep">37.35 framestep</a></h2>
+
+<p>Select one frame every N-th frame.
+</p>
+<p>This filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Select frame after every <code>step</code> frames.
+Allowed values are positive integers higher than 0. Default value is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><a name="frei0r"></a>
+</p><a name="frei0r-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-frei0r-1">37.36 frei0r</a></h2>
+
+<p>Apply a frei0r effect to the input video.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r effect to load. If the environment variable
+<code>FREI0R_PATH</code> is defined, the frei0r effect is searched in each one of the
+directories specified by the colon separated list in <code>FREIOR_PATH</code>,
+otherwise in the standard frei0r paths, which are in this order:
+‘<tt>HOME/.frei0r-1/lib/</tt>’, ‘<tt>/usr/local/lib/frei0r-1/</tt>’,
+‘<tt>/usr/lib/frei0r-1/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r effect.
+</p>
+</dd>
+</dl>
+
+<p>A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+<var>R</var>/<var>G</var>/<var>B</var>, (<var>R</var>, <var>G</var>, and <var>B</var> being float
+numbers from 0.0 to 1.0) or by a color description specified in the "Color"
+section in the ffmpeg-utils manual), a position (specified by the syntax <var>X</var>/<var>Y</var>,
+<var>X</var> and <var>Y</var> being float numbers) and a string.
+</p>
+<p>The number and kind of parameters depend on the loaded effect. If an
+effect parameter is not specified the default value is set.
+</p>
+<a name="Examples-46"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-46">37.36.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the distort0r effect, set the first two double parameters:
+<table><tr><td> </td><td><pre class="example">frei0r=filter_name=distort0r:filter_params=0.5|0.01
+</pre></td></tr></table>
+
+</li><li>
+Apply the colordistance effect, take a color as first parameter:
+<table><tr><td> </td><td><pre class="example">frei0r=colordistance:0.2/0.3/0.4
+frei0r=colordistance:violet
+frei0r=colordistance:0x112233
+</pre></td></tr></table>
+
+</li><li>
+Apply the perspective effect, specify the top left and top right image
+positions:
+<table><tr><td> </td><td><pre class="example">frei0r=perspective:0.2/0.2|0.8/0.2
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information see:
+<a href="http://frei0r.dyne.org">http://frei0r.dyne.org</a>
+</p>
+<a name="geq"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-geq">37.37 geq</a></h2>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>lum_expr, lum</samp>’</dt>
+<dd><p>Set the luminance expression.
+</p></dd>
+<dt> ‘<samp>cb_expr, cb</samp>’</dt>
+<dd><p>Set the chrominance blue expression.
+</p></dd>
+<dt> ‘<samp>cr_expr, cr</samp>’</dt>
+<dd><p>Set the chrominance red expression.
+</p></dd>
+<dt> ‘<samp>alpha_expr, a</samp>’</dt>
+<dd><p>Set the alpha expression.
+</p></dd>
+<dt> ‘<samp>red_expr, r</samp>’</dt>
+<dd><p>Set the red expression.
+</p></dd>
+<dt> ‘<samp>green_expr, g</samp>’</dt>
+<dd><p>Set the green expression.
+</p></dd>
+<dt> ‘<samp>blue_expr, b</samp>’</dt>
+<dd><p>Set the blue expression.
+</p></dd>
+</dl>
+
+<p>The colorspace is selected according to the specified options. If one
+of the ‘<samp>lum_expr</samp>’, ‘<samp>cb_expr</samp>’, or ‘<samp>cr_expr</samp>’
+options is specified, the filter will automatically select a YCbCr
+colorspace. If one of the ‘<samp>red_expr</samp>’, ‘<samp>green_expr</samp>’, or
+‘<samp>blue_expr</samp>’ options is specified, it will select an RGB
+colorspace.
+</p>
+<p>If one of the chrominance expression is not defined, it falls back on the other
+one. If no alpha expression is specified it will evaluate to opaque value.
+If none of chrominance expressions are specified, they will evaluate
+to the luminance expression.
+</p>
+<p>The expressions can use the following variables and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>The coordinates of the current sample.
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>The width and height of the image.
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>p(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the current
+plane.
+</p>
+</dd>
+<dt> ‘<samp>lum(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the luminance
+plane.
+</p>
+</dd>
+<dt> ‘<samp>cb(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+blue-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>cr(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>r(x, y)</samp>’</dt>
+<dt> ‘<samp>g(x, y)</samp>’</dt>
+<dt> ‘<samp>b(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red/green/blue component. Return 0 if there is no such component.
+</p>
+</dd>
+<dt> ‘<samp>alpha(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the alpha
+plane. Return 0 if there is no such plane.
+</p></dd>
+</dl>
+
+<p>For functions, if <var>x</var> and <var>y</var> are outside the area, the value will be
+automatically clipped to the closer edge.
+</p>
+<a name="Examples-79"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-79">37.37.1 Examples</a></h3>
+
+<ul>
+<li>
+Flip the image horizontally:
+<table><tr><td> </td><td><pre class="example">geq=p(W-X\,Y)
+</pre></td></tr></table>
+
+</li><li>
+Generate a bidimensional sine wave, with angle <code>PI/3</code> and a
+wavelength of 100 pixels:
+<table><tr><td> </td><td><pre class="example">geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a fancy enigmatic moving light:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a quick emboss effect:
+<table><tr><td> </td><td><pre class="example">format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
+</pre></td></tr></table>
+
+</li><li>
+Modify RGB components depending on pixel position:
+<table><tr><td> </td><td><pre class="example">geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="gradfun"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-gradfun">37.38 gradfun</a></h2>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>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
+64, default value is 1.2, out-of-range values will be clipped to the valid
+range.
+</p>
+</dd>
+<dt> ‘<samp>radius</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>strength</var>[:<var>radius</var>]
+</p>
+<a name="Examples-71"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-71">37.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the filter with a <code>3.5</code> strength and radius of <code>8</code>:
+<table><tr><td> </td><td><pre class="example">gradfun=3.5:8
+</pre></td></tr></table>
+
+</li><li>
+Specify radius, omitting the strength (which will fall-back to the default
+value):
+<table><tr><td> </td><td><pre class="example">gradfun=radius=8
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="haldclut"></a>
+</p><a name="haldclut-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-haldclut-1">37.39 haldclut</a></h2>
+
+<p>Apply a Hald CLUT to a video stream.
+</p>
+<p>First input is the video stream to process, and second one is the Hald CLUT.
+The Hald CLUT input can be a simple picture or a complete video stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last CLUT after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the CLUT is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><code>haldclut</code> also has the same interpolation options as <a href="#lut3d">lut3d</a> (both
+filters share the same internals).
+</p>
+<p>More information about the Hald CLUT can be found on Eskil Steenberg’s website
+(Hald CLUT author) at <a href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>.
+</p>
+<a name="Workflow-examples"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Workflow-examples">37.39.1 Workflow examples</a></h3>
+
+<a name="Hald-CLUT-video-stream"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Hald-CLUT-video-stream">37.39.1.1 Hald CLUT video stream</a></h4>
+
+<p>Generate an identity Hald CLUT stream altered with various effects:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
+</pre></td></tr></table>
+
+<p>Note: make sure you use a lossless codec.
+</p>
+<p>Then use it with <code>haldclut</code> to apply it on some random stream:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
+</pre></td></tr></table>
+
+<p>The Hald CLUT will be applied to the 10 first seconds (duration of
+‘<tt>clut.nut</tt>’), then the latest picture of that CLUT stream will be applied
+to the remaining frames of the <code>mandelbrot</code> stream.
+</p>
+<a name="Hald-CLUT-with-preview"></a>
+<h4 class="subsubsection"><a href="ffmpeg-all.html#toc-Hald-CLUT-with-preview">37.39.1.2 Hald CLUT with preview</a></h4>
+
+<p>A Hald CLUT is supposed to be a squared image of <code>Level*Level*Level</code> by
+<code>Level*Level*Level</code> pixels. For a given Hald CLUT, FFmpeg will select the
+biggest possible square starting at the top left of the picture. The remaining
+padding pixels (bottom or right) will be ignored. This area can be used to add
+a preview of the Hald CLUT.
+</p>
+<p>Typically, the following generated Hald CLUT will be supported by the
+<code>haldclut</code> filter:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "
+ pad=iw+320 [padded_clut];
+ smptebars=s=320x256, split [a][b];
+ [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
+ [main][b] overlay=W-320" -frames:v 1 clut.png
+</pre></td></tr></table>
+
+<p>It contains the original and a preview of the effect of the CLUT: SMPTE color
+bars are displayed on the right-top, and below the same color bars processed by
+the color changes.
+</p>
+<p>Then, the effect of this Hald CLUT can be visualized with:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
+</pre></td></tr></table>
+
+<a name="hflip"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-hflip">37.40 hflip</a></h2>
+
+<p>Flip the input video horizontally.
+</p>
+<p>For example to horizontally flip the input video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "hflip" out.avi
+</pre></td></tr></table>
+
+<a name="histeq"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-histeq">37.41 histeq</a></h2>
+<p>This filter applies a global color histogram equalization on a
+per-frame basis.
+</p>
+<p>It can be used to correct video that has a compressed range of pixel
+intensities. The filter redistributes the pixel intensities to
+equalize their distribution across the intensity range. It may be
+viewed as an "automatically adjusting contrast filter". This filter is
+useful only for correcting degraded or poorly captured source
+video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>Determine the amount of equalization to be applied. As the strength
+is reduced, the distribution of pixel intensities more-and-more
+approaches that of the input frame. The value must be a float number
+in the range [0,1] and defaults to 0.200.
+</p>
+</dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>Set the maximum intensity that can generated and scale the output
+values appropriately. The strength should be set as desired and then
+the intensity can be limited if needed to avoid washing-out. The value
+must be a float number in the range [0,1] and defaults to 0.210.
+</p>
+</dd>
+<dt> ‘<samp>antibanding</samp>’</dt>
+<dd><p>Set the antibanding level. If enabled the filter will randomly vary
+the luminance of output pixels by a small amount to avoid banding of
+the histogram. Possible values are <code>none</code>, <code>weak</code> or
+<code>strong</code>. It defaults to <code>none</code>.
+</p></dd>
+</dl>
+
+<a name="histogram"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-histogram">37.42 histogram</a></h2>
+
+<p>Compute and draw a color distribution histogram for the input video.
+</p>
+<p>The computed histogram is a representation of the color component
+distribution in an image.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set histogram mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>levels</samp>’</dt>
+<dd><p>Standard histogram that displays the color components distribution in an
+image. Displays color graph for each color component. Shows distribution of
+the Y, U, V, A or R, G, B components, depending on input format, in the
+current frame. Below each graph a color component scale meter is shown.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Displays chroma values (U/V color placement) in a two dimensional
+graph (which is called a vectorscope). The brighter a pixel in the
+vectorscope, the more pixels of the input frame correspond to that pixel
+(i.e., more pixels have this chroma value). The V component is displayed on
+the horizontal (X) axis, with the leftmost side being V = 0 and the rightmost
+side being V = 255. The U component is displayed on the vertical (Y) axis,
+with the top representing U = 0 and the bottom representing U = 255.
+</p>
+<p>The position of a white pixel in the graph corresponds to the chroma value of
+a pixel of the input clip. The graph can therefore be used to read the hue
+(color flavor) and the saturation (the dominance of the hue in the color). As
+the hue of a color changes, it moves around the square. At the center of the
+square the saturation is zero, which means that the corresponding pixel has no
+color. If the amount of a specific color is increased (while leaving the other
+colors unchanged) the saturation increases, and the indicator moves towards
+the edge of the square.
+</p>
+</dd>
+<dt> ‘<samp>color2</samp>’</dt>
+<dd><p>Chroma values in vectorscope, similar as <code>color</code> but actual chroma values
+are displayed.
+</p>
+</dd>
+<dt> ‘<samp>waveform</samp>’</dt>
+<dd><p>Per row/column color component graph. In row mode, the graph on the left side
+represents color component value 0 and the right side represents value = 255.
+In column mode, the top side represents color component value = 0 and bottom
+side represents value = 255.
+</p></dd>
+</dl>
+<p>Default value is <code>levels</code>.
+</p>
+</dd>
+<dt> ‘<samp>level_height</samp>’</dt>
+<dd><p>Set height of level in <code>levels</code>. Default value is <code>200</code>.
+Allowed range is [50, 2048].
+</p>
+</dd>
+<dt> ‘<samp>scale_height</samp>’</dt>
+<dd><p>Set height of color scale in <code>levels</code>. Default value is <code>12</code>.
+Allowed range is [0, 40].
+</p>
+</dd>
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Set step for <code>waveform</code> mode. Smaller values are useful to find out how
+many values of the same luminance are distributed across input rows/columns.
+Default value is <code>10</code>. Allowed range is [1, 255].
+</p>
+</dd>
+<dt> ‘<samp>waveform_mode</samp>’</dt>
+<dd><p>Set mode for <code>waveform</code>. Can be either <code>row</code>, or <code>column</code>.
+Default is <code>row</code>.
+</p>
+</dd>
+<dt> ‘<samp>waveform_mirror</samp>’</dt>
+<dd><p>Set mirroring mode for <code>waveform</code>. <code>0</code> means unmirrored, <code>1</code>
+means mirrored. In mirrored mode, higher values will be represented on the left
+side for <code>row</code> mode and at the top for <code>column</code> mode. Default is
+<code>0</code> (unmirrored).
+</p>
+</dd>
+<dt> ‘<samp>display_mode</samp>’</dt>
+<dd><p>Set display mode for <code>waveform</code> and <code>levels</code>.
+It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>parade</samp>’</dt>
+<dd><p>Display separate graph for the color components side by side in
+<code>row</code> waveform mode or one below the other in <code>column</code> waveform mode
+for <code>waveform</code> histogram mode. For <code>levels</code> histogram mode,
+per color component graphs are placed below each other.
+</p>
+<p>Using this display mode in <code>waveform</code> histogram mode makes it easy to
+spot color casts in the highlights and shadows of an image, by comparing the
+contours of the top and the bottom graphs of each waveform. Since whites,
+grays, and blacks are characterized by exactly equal amounts of red, green,
+and blue, neutral areas of the picture should display three waveforms of
+roughly equal width/height. If not, the correction is easy to perform by
+making level adjustments the three waveforms.
+</p>
+</dd>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dd><p>Presents information identical to that in the <code>parade</code>, except
+that the graphs representing color components are superimposed directly
+over one another.
+</p>
+<p>This display mode in <code>waveform</code> histogram mode makes it easier to spot
+relative differences or similarities in overlapping areas of the color
+components that are supposed to be identical, such as neutral whites, grays,
+or blacks.
+</p></dd>
+</dl>
+<p>Default is <code>parade</code>.
+</p>
+</dd>
+<dt> ‘<samp>levels_mode</samp>’</dt>
+<dd><p>Set mode for <code>levels</code>. Can be either <code>linear</code>, or <code>logarithmic</code>.
+Default is <code>linear</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-41"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-41">37.42.1 Examples</a></h3>
+
+<ul>
+<li>
+Calculate and draw histogram:
+<table><tr><td> </td><td><pre class="example">ffplay -i input -vf histogram
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="hqdn3d"></a>
+</p><a name="hqdn3d-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-hqdn3d-1">37.43 hqdn3d</a></h2>
+
+<p>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.
+</p>
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial luma strength,
+defaults to 4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial chroma strength,
+defaults to 3.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>luma_tmp</samp>’</dt>
+<dd><p>a float number which specifies luma temporal strength, defaults to
+6.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_tmp</samp>’</dt>
+<dd><p>a float number which specifies chroma temporal strength, defaults to
+<var>luma_tmp</var>*<var>chroma_spatial</var>/<var>luma_spatial</var>
+</p></dd>
+</dl>
+
+<a name="hue"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-hue">37.44 hue</a></h2>
+
+<p>Modify the hue and/or the saturation of the input.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the hue angle as a number of degrees. It accepts an expression,
+and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>Specify the saturation in the [-10,10] range. It accepts an expression and
+defaults to "1".
+</p>
+</dd>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Specify the hue angle as a number of radians. It accepts an
+expression, and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Specify the brightness in the [-10,10] range. It accepts an expression and
+defaults to "0".
+</p></dd>
+</dl>
+
+<p>‘<samp>h</samp>’ and ‘<samp>H</samp>’ are mutually exclusive, and can’t be
+specified at the same time.
+</p>
+<p>The ‘<samp>b</samp>’, ‘<samp>h</samp>’, ‘<samp>H</samp>’ and ‘<samp>s</samp>’ option values are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame count of the input frame starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>presentation timestamp of the input frame expressed in time base units
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+<a name="Examples-14"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-14">37.44.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the hue to 90 degrees and the saturation to 1.0:
+<table><tr><td> </td><td><pre class="example">hue=h=90:s=1
+</pre></td></tr></table>
+
+</li><li>
+Same command but expressing the hue in radians:
+<table><tr><td> </td><td><pre class="example">hue=H=PI/2:s=1
+</pre></td></tr></table>
+
+</li><li>
+Rotate hue and make the saturation swing between 0
+and 2 over a period of 1 second:
+<table><tr><td> </td><td><pre class="example">hue="H=2*PI*t: s=sin(2*PI*t)+1"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-in effect starting at 0:
+<table><tr><td> </td><td><pre class="example">hue="s=min(t/3\,1)"
+</pre></td></tr></table>
+
+<p>The general fade-in expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=min(0\, max((t-START)/DURATION\, 1))"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-out effect starting at 5 seconds:
+<table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (8-t)/3))"
+</pre></td></tr></table>
+
+<p>The general fade-out expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="Commands-2"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands-2">37.44.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dt> ‘<samp>s</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Modify the hue and/or the saturation and/or brightness of the input video.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="idet"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-idet">37.45 idet</a></h2>
+
+<p>Detect video interlacing type.
+</p>
+<p>This filter tries to detect if the input is interlaced or progressive,
+top or bottom field first.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>intl_thres</samp>’</dt>
+<dd><p>Set interlacing threshold.
+</p></dd>
+<dt> ‘<samp>prog_thres</samp>’</dt>
+<dd><p>Set progressive threshold.
+</p></dd>
+</dl>
+
+<a name="il"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-il">37.46 il</a></h2>
+
+<p>Deinterleave or interleave fields.
+</p>
+<p>This filter allows one to process interlaced images fields without
+deinterlacing them. Deinterleaving splits the input frame into 2
+fields (so called half pictures). Odd lines are moved to the top
+half of the output image, even lines to the bottom half.
+You can process (filter) them independently and then re-interleave them.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_mode, l</samp>’</dt>
+<dt> ‘<samp>chroma_mode, c</samp>’</dt>
+<dt> ‘<samp>alpha_mode, a</samp>’</dt>
+<dd><p>Available values for <var>luma_mode</var>, <var>chroma_mode</var> and
+<var>alpha_mode</var> are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing.
+</p>
+</dd>
+<dt> ‘<samp>deinterleave, d</samp>’</dt>
+<dd><p>Deinterleave fields, placing one above the other.
+</p>
+</dd>
+<dt> ‘<samp>interleave, i</samp>’</dt>
+<dd><p>Interleave fields. Reverse the effect of deinterleaving.
+</p></dd>
+</dl>
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_swap, ls</samp>’</dt>
+<dt> ‘<samp>chroma_swap, cs</samp>’</dt>
+<dt> ‘<samp>alpha_swap, as</samp>’</dt>
+<dd><p>Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="interlace"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-interlace">37.47 interlace</a></h2>
+
+<p>Simple interlacing filter from progressive contents. This interleaves upper (or
+lower) lines from odd frames with lower (or upper) lines from even frames,
+halving the frame rate and preserving image height. A vertical lowpass filter
+is always applied in order to avoid twitter effects and reduce moiré patterns.
+</p>
+<table><tr><td> </td><td><pre class="example"> Original Original New Frame
+ Frame 'j' Frame 'j+1' (tff)
+ ========== =========== ==================
+ Line 0 --------------------> Frame 'j' Line 0
+ Line 1 Line 1 ----> Frame 'j+1' Line 1
+ Line 2 ---------------------> Frame 'j' Line 2
+ Line 3 Line 3 ----> Frame 'j+1' Line 3
+ ... ... ...
+New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on
+</pre></td></tr></table>
+
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>scan</samp>’</dt>
+<dd><p>determines whether the interlaced frame is taken from the even (tff - default)
+or odd (bff) lines of the progressive frame.
+</p></dd>
+</dl>
+
+<a name="kerndeint"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-kerndeint">37.48 kerndeint</a></h2>
+
+<p>Deinterlace input video by applying Donald Graft’s adaptive kernel
+deinterling. Work on interlaced parts of a video to produce
+progressive frames.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>thresh</samp>’</dt>
+<dd><p>Set the threshold which affects the filter’s tolerance when
+determining if a pixel line must be processed. It must be an integer
+in the range [0,255] and defaults to 10. A value of 0 will result in
+applying the process on every pixels.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Paint pixels exceeding the threshold value to white if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Set the fields order. Swap fields if set to 1, leave fields alone if
+0. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>sharp</samp>’</dt>
+<dd><p>Enable additional sharpening if set to 1. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>twoway</samp>’</dt>
+<dd><p>Enable twoway sharpening if set to 1. Default is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-9"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-9">37.48.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply default values:
+<table><tr><td> </td><td><pre class="example">kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
+</pre></td></tr></table>
+
+</li><li>
+Enable additional sharpening:
+<table><tr><td> </td><td><pre class="example">kerndeint=sharp=1
+</pre></td></tr></table>
+
+</li><li>
+Paint processed pixels in white:
+<table><tr><td> </td><td><pre class="example">kerndeint=map=1
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="lut3d"></a>
+</p><a name="lut3d-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-lut3d-1">37.49 lut3d</a></h2>
+
+<p>Apply a 3D LUT to an input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>Set the 3D LUT file name.
+</p>
+<p>Currently supported formats:
+</p><dl compact="compact">
+<dt> ‘<samp>3dl</samp>’</dt>
+<dd><p>AfterEffects
+</p></dd>
+<dt> ‘<samp>cube</samp>’</dt>
+<dd><p>Iridas
+</p></dd>
+<dt> ‘<samp>dat</samp>’</dt>
+<dd><p>DaVinci
+</p></dd>
+<dt> ‘<samp>m3d</samp>’</dt>
+<dd><p>Pandora
+</p></dd>
+</dl>
+</dd>
+<dt> ‘<samp>interp</samp>’</dt>
+<dd><p>Select interpolation mode.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nearest</samp>’</dt>
+<dd><p>Use values from the nearest defined point.
+</p></dd>
+<dt> ‘<samp>trilinear</samp>’</dt>
+<dd><p>Interpolate values using the 8 points defining a cube.
+</p></dd>
+<dt> ‘<samp>tetrahedral</samp>’</dt>
+<dd><p>Interpolate values using a tetrahedron.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="lut_002c-lutrgb_002c-lutyuv"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-lut_002c-lutrgb_002c-lutyuv">37.50 lut, lutrgb, lutyuv</a></h2>
+
+<p>Compute a look-up table for binding each pixel component input value
+to an output value, and apply it to input video.
+</p>
+<p><var>lutyuv</var> applies a lookup table to a YUV input video, <var>lutrgb</var>
+to an RGB input video.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>c0</samp>’</dt>
+<dd><p>set first pixel component expression
+</p></dd>
+<dt> ‘<samp>c1</samp>’</dt>
+<dd><p>set second pixel component expression
+</p></dd>
+<dt> ‘<samp>c2</samp>’</dt>
+<dd><p>set third pixel component expression
+</p></dd>
+<dt> ‘<samp>c3</samp>’</dt>
+<dd><p>set fourth pixel component expression, corresponds to the alpha component
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>set red component expression
+</p></dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>set green component expression
+</p></dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>set blue component expression
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>alpha component expression
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>set Y/luminance component expression
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>set U/Cb component expression
+</p></dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>set V/Cr component expression
+</p></dd>
+</dl>
+
+<p>Each of them specifies the expression to use for computing the lookup table for
+the corresponding pixel component values.
+</p>
+<p>The exact component associated to each of the <var>c*</var> options depends on the
+format in input.
+</p>
+<p>The <var>lut</var> filter requires either YUV or RGB pixel formats in input,
+<var>lutrgb</var> requires RGB pixel formats in input, and <var>lutyuv</var> requires YUV.
+</p>
+<p>The expressions can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>val</samp>’</dt>
+<dd><p>input value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>clipval</samp>’</dt>
+<dd><p>the input value clipped in the <var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>maxval</samp>’</dt>
+<dd><p>maximum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>minval</samp>’</dt>
+<dd><p>minimum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>negval</samp>’</dt>
+<dd><p>the negated value for the pixel component value clipped in the
+<var>minval</var>-<var>maxval</var> range , it corresponds to the expression
+"maxval-clipval+minval"
+</p>
+</dd>
+<dt> ‘<samp>clip(val)</samp>’</dt>
+<dd><p>the computed value in <var>val</var> clipped in the
+<var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>gammaval(gamma)</samp>’</dt>
+<dd><p>the computed gamma correction value of the pixel component value
+clipped in the <var>minval</var>-<var>maxval</var> range, corresponds to the
+expression
+"pow((clipval-minval)/(maxval-minval)\,<var>gamma</var>)*(maxval-minval)+minval"
+</p>
+</dd>
+</dl>
+
+<p>All expressions default to "val".
+</p>
+<a name="Examples-77"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-77">37.50.1 Examples</a></h3>
+
+<ul>
+<li>
+Negate input video:
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>The above is the same as:
+</p><table><tr><td> </td><td><pre class="example">lutrgb="r=negval:g=negval:b=negval"
+lutyuv="y=negval:u=negval:v=negval"
+</pre></td></tr></table>
+
+</li><li>
+Negate luminance:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=negval
+</pre></td></tr></table>
+
+</li><li>
+Remove chroma components, turns the video into a graytone image:
+<table><tr><td> </td><td><pre class="example">lutyuv="u=128:v=128"
+</pre></td></tr></table>
+
+</li><li>
+Apply a luma burning effect:
+<table><tr><td> </td><td><pre class="example">lutyuv="y=2*val"
+</pre></td></tr></table>
+
+</li><li>
+Remove green and blue components:
+<table><tr><td> </td><td><pre class="example">lutrgb="g=0:b=0"
+</pre></td></tr></table>
+
+</li><li>
+Set a constant alpha channel value on input:
+<table><tr><td> </td><td><pre class="example">format=rgba,lutrgb=a="maxval-minval/2"
+</pre></td></tr></table>
+
+</li><li>
+Correct luminance gamma by a 0.5 factor:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=gammaval(0.5)
+</pre></td></tr></table>
+
+</li><li>
+Discard least significant bits of luma:
+<table><tr><td> </td><td><pre class="example">lutyuv=y='bitand(val, 128+64+32)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mergeplanes"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mergeplanes">37.51 mergeplanes</a></h2>
+
+<p>Merge color channel components from several video streams.
+</p>
+<p>The filter accepts up to 4 input streams, and merge selected input
+planes to the output video.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mapping</samp>’</dt>
+<dd><p>Set input to output plane mapping. Default is <code>0</code>.
+</p>
+<p>The mappings is specified as a bitmap. It should be specified as a
+hexadecimal number in the form 0xAa[Bb[Cc[Dd]]]. ’Aa’ describes the
+mapping for the first plane of the output stream. ’A’ sets the number of
+the input stream to use (from 0 to 3), and ’a’ the plane number of the
+corresponding input to use (from 0 to 3). The rest of the mappings is
+similar, ’Bb’ describes the mapping for the output stream second
+plane, ’Cc’ describes the mapping for the output stream third plane and
+’Dd’ describes the mapping for the output stream fourth plane.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set output pixel format. Default is <code>yuva444p</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-40"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-40">37.51.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge three gray video streams of same width and height into single video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1][a2]mergeplanes=0x001020:yuv444p
+</pre></td></tr></table>
+
+</li><li>
+Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1]mergeplanes=0x00010210:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap Y and A plane in yuva444p stream:
+<table><tr><td> </td><td><pre class="example">format=yuva444p,mergeplanes=0x03010200:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap U and V plane in yuv420p stream:
+<table><tr><td> </td><td><pre class="example">format=yuv420p,mergeplanes=0x000201:yuv420p
+</pre></td></tr></table>
+
+</li><li>
+Cast a rgb24 clip to yuv444p:
+<table><tr><td> </td><td><pre class="example">format=rgb24,mergeplanes=0x000102:yuv444p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mcdeint"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mcdeint">37.52 mcdeint</a></h2>
+
+<p>Apply motion-compensation deinterlacing.
+</p>
+<p>It needs one field per frame as input and must thus be used together
+with yadif=1/3 or equivalent.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the deinterlacing mode.
+</p>
+<p>It accepts one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dt> ‘<samp>medium</samp>’</dt>
+<dt> ‘<samp>slow</samp>’</dt>
+<dd><p>use iterative motion estimation
+</p></dd>
+<dt> ‘<samp>extra_slow</samp>’</dt>
+<dd><p>like ‘<samp>slow</samp>’, but use multiple reference frames.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>fast</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>Set the picture field parity assumed for the input video. It must be
+one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>bff</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Set per-block quantization parameter (QP) used by the internal
+encoder.
+</p>
+<p>Higher values should result in a smoother motion vector field but less
+optimal individual vectors. Default value is 1.
+</p></dd>
+</dl>
+
+<a name="mp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mp">37.53 mp</a></h2>
+
+<p>Apply an MPlayer filter to the input video.
+</p>
+<p>This filter provides a wrapper around some of the filters of
+MPlayer/MEncoder.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the parameters:
+<var>filter_name</var>[:=]<var>filter_params</var>
+</p>
+<p><var>filter_name</var> is the name of a supported MPlayer filter,
+<var>filter_params</var> is a string containing the parameters accepted by
+the named filter.
+</p>
+<p>The list of the currently supported filters follows:
+</p><dl compact="compact">
+<dt> <var>eq2</var></dt>
+<dt> <var>eq</var></dt>
+<dt> <var>fspp</var></dt>
+<dt> <var>ilpack</var></dt>
+<dt> <var>pp7</var></dt>
+<dt> <var>softpulldown</var></dt>
+<dt> <var>uspp</var></dt>
+</dl>
+
+<p>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.
+</p>
+<a name="Examples-34"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-34">37.53.1 Examples</a></h3>
+
+<ul>
+<li>
+Adjust gamma, brightness, contrast:
+<table><tr><td> </td><td><pre class="example">mp=eq2=1.0:2:0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p>See also mplayer(1), <a href="http://www.mplayerhq.hu/">http://www.mplayerhq.hu/</a>.
+</p>
+<a name="mpdecimate"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mpdecimate">37.54 mpdecimate</a></h2>
+
+<p>Drop frames that do not differ greatly from the previous frame in
+order to reduce frame rate.
+</p>
+<p>The main use of this filter is for very-low-bitrate encoding
+(e.g. streaming over dialup modem), but it could in theory be used for
+fixing movies that were inverse-telecined incorrectly.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum number of consecutive frames which can be dropped (if
+positive), or the minimum interval between dropped frames (if
+negative). If the value is 0, the frame is dropped unregarding the
+number of previous sequentially dropped frames.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dt> ‘<samp>lo</samp>’</dt>
+<dt> ‘<samp>frac</samp>’</dt>
+<dd><p>Set the dropping threshold values.
+</p>
+<p>Values for ‘<samp>hi</samp>’ and ‘<samp>lo</samp>’ are for 8x8 pixel blocks and
+represent actual pixel value differences, so a threshold of 64
+corresponds to 1 unit of difference for each pixel, or the same spread
+out differently over the block.
+</p>
+<p>A frame is a candidate for dropping if no 8x8 blocks differ by more
+than a threshold of ‘<samp>hi</samp>’, and if no more than ‘<samp>frac</samp>’ blocks (1
+meaning the whole image) differ by more than a threshold of ‘<samp>lo</samp>’.
+</p>
+<p>Default value for ‘<samp>hi</samp>’ is 64*12, default value for ‘<samp>lo</samp>’ is
+64*5, and default value for ‘<samp>frac</samp>’ is 0.33.
+</p></dd>
+</dl>
+
+
+<a name="negate"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-negate">37.55 negate</a></h2>
+
+<p>Negate input video.
+</p>
+<p>This filter accepts an integer in input, if non-zero it negates the
+alpha component (if available). The default value in input is 0.
+</p>
+<a name="noformat"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-noformat">37.56 noformat</a></h2>
+
+<p>Force libavfilter not to use any of the specified pixel formats for the
+input to the next filter.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-30"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-30">37.56.1 Examples</a></h3>
+
+<ul>
+<li>
+Force libavfilter to use a format different from <var>yuv420p</var> for the
+input to the vflip filter:
+<table><tr><td> </td><td><pre class="example">noformat=pix_fmts=yuv420p,vflip
+</pre></td></tr></table>
+
+</li><li>
+Convert the input video to any of the formats not contained in the list:
+<table><tr><td> </td><td><pre class="example">noformat=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="noise-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-noise-1">37.57 noise</a></h2>
+
+<p>Add noise on video input frame.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all_seed</samp>’</dt>
+<dt> ‘<samp>c0_seed</samp>’</dt>
+<dt> ‘<samp>c1_seed</samp>’</dt>
+<dt> ‘<samp>c2_seed</samp>’</dt>
+<dt> ‘<samp>c3_seed</samp>’</dt>
+<dd><p>Set noise seed for specific pixel component or all pixel components in case
+of <var>all_seed</var>. Default value is <code>123457</code>.
+</p>
+</dd>
+<dt> ‘<samp>all_strength, alls</samp>’</dt>
+<dt> ‘<samp>c0_strength, c0s</samp>’</dt>
+<dt> ‘<samp>c1_strength, c1s</samp>’</dt>
+<dt> ‘<samp>c2_strength, c2s</samp>’</dt>
+<dt> ‘<samp>c3_strength, c3s</samp>’</dt>
+<dd><p>Set noise strength for specific pixel component or all pixel components in case
+<var>all_strength</var>. Default value is <code>0</code>. Allowed range is [0, 100].
+</p>
+</dd>
+<dt> ‘<samp>all_flags, allf</samp>’</dt>
+<dt> ‘<samp>c0_flags, c0f</samp>’</dt>
+<dt> ‘<samp>c1_flags, c1f</samp>’</dt>
+<dt> ‘<samp>c2_flags, c2f</samp>’</dt>
+<dt> ‘<samp>c3_flags, c3f</samp>’</dt>
+<dd><p>Set pixel component flags or set flags for all components if <var>all_flags</var>.
+Available values for component flags are:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>averaged temporal noise (smoother)
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>mix random noise with a (semi)regular pattern
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>temporal noise (noise pattern changes between frames)
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>uniform noise (gaussian otherwise)
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-72"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-72">37.57.1 Examples</a></h3>
+
+<p>Add temporal and uniform noise to input video:
+</p><table><tr><td> </td><td><pre class="example">noise=alls=20:allf=t+u
+</pre></td></tr></table>
+
+<a name="null"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-null">37.58 null</a></h2>
+
+<p>Pass the video source unchanged to the output.
+</p>
+<a name="ocv"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ocv">37.59 ocv</a></h2>
+
+<p>Apply video transform using libopencv.
+</p>
+<p>To enable this filter install libopencv library and headers and
+configure FFmpeg with <code>--enable-libopencv</code>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name of the libopencv filter to apply.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>The parameters to pass to the libopencv filter. If not specified the default
+values are assumed.
+</p>
+</dd>
+</dl>
+
+<p>Refer to the official libopencv documentation for more precise
+information:
+<a href="http://opencv.willowgarage.com/documentation/c/image_filtering.html">http://opencv.willowgarage.com/documentation/c/image_filtering.html</a>
+</p>
+<p>Follows the list of supported libopencv filters.
+</p>
+<p><a name="dilate"></a>
+</p><a name="dilate-1"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-dilate-1">37.59.1 dilate</a></h3>
+
+<p>Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvDilate</code>.
+</p>
+<p>It accepts the parameters: <var>struct_el</var>|<var>nb_iterations</var>.
+</p>
+<p><var>struct_el</var> represents a structuring element, and has the syntax:
+<var>cols</var>x<var>rows</var>+<var>anchor_x</var>x<var>anchor_y</var>/<var>shape</var>
+</p>
+<p><var>cols</var> and <var>rows</var> represent the number of columns and rows of
+the structuring element, <var>anchor_x</var> and <var>anchor_y</var> the anchor
+point, and <var>shape</var> the shape for the structuring element, and
+can be one of the values "rect", "cross", "ellipse", "custom".
+</p>
+<p>If the value for <var>shape</var> is "custom", it must be followed by a
+string of the form "=<var>filename</var>". The file with name
+<var>filename</var> is assumed to represent a binary image, with each
+printable character corresponding to a bright pixel. When a custom
+<var>shape</var> is used, <var>cols</var> and <var>rows</var> are ignored, the number
+or columns and rows of the read file are assumed instead.
+</p>
+<p>The default value for <var>struct_el</var> is "3x3+0x0/rect".
+</p>
+<p><var>nb_iterations</var> specifies the number of times the transform is
+applied to the image, and defaults to 1.
+</p>
+<p>Follow some example:
+</p><table><tr><td> </td><td><pre class="example"># use the default values
+ocv=dilate
+
+# dilate using a structuring element with a 5x5 cross, iterate two times
+ocv=filter_name=dilate:filter_params=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=dilate:0x0+2x2/custom=diamond.shape|2
+</pre></td></tr></table>
+
+<a name="erode"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-erode">37.59.2 erode</a></h3>
+
+<p>Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvErode</code>.
+</p>
+<p>The filter accepts the parameters: <var>struct_el</var>:<var>nb_iterations</var>,
+with the same syntax and semantics as the <a href="#dilate">dilate</a> filter.
+</p>
+<a name="smooth"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-smooth">37.59.3 smooth</a></h3>
+
+<p>Smooth the input video.
+</p>
+<p>The filter takes the following parameters:
+<var>type</var>|<var>param1</var>|<var>param2</var>|<var>param3</var>|<var>param4</var>.
+</p>
+<p><var>type</var> 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".
+</p>
+<p><var>param1</var>, <var>param2</var>, <var>param3</var>, and <var>param4</var> are
+parameters whose meanings depend on smooth type. <var>param1</var> and
+<var>param2</var> accept integer positive values or 0, <var>param3</var> and
+<var>param4</var> accept float values.
+</p>
+<p>The default value for <var>param1</var> is 3, the default value for the
+other parameters is 0.
+</p>
+<p>These parameters correspond to the parameters assigned to the
+libopencv function <code>cvSmooth</code>.
+</p>
+<p><a name="overlay"></a>
+</p><a name="overlay-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-overlay-1">37.60 overlay</a></h2>
+
+<p>Overlay one video on top of another.
+</p>
+<p>It takes two inputs and one output, the first input is the "main"
+video on which the second input is overlayed.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Set the expression for the x and y coordinates of the overlayed video
+on the main video. Default value is "0" for both expressions. In case
+the expression is invalid, it is set to a huge value (meaning that the
+overlay will not be displayed within the output visible area).
+</p>
+</dd>
+<dt> ‘<samp>eof_action</samp>’</dt>
+<dd><p>The action to take when EOF is encountered on the secondary input, accepts one
+of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>repeat</samp>’</dt>
+<dd><p>repeat the last frame (the default)
+</p></dd>
+<dt> ‘<samp>endall</samp>’</dt>
+<dd><p>end both streams
+</p></dd>
+<dt> ‘<samp>pass</samp>’</dt>
+<dd><p>pass through the main input
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the expressions for ‘<samp>x</samp>’, and ‘<samp>y</samp>’ are evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>only evaluate expressions once during the filter initialization or
+when a command is processed
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expressions for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>frame</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>If set to 1, force the output to terminate when the shortest input
+terminates. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set the format for the output video.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>yuv420</samp>’</dt>
+<dd><p>force YUV420 output
+</p>
+</dd>
+<dt> ‘<samp>yuv422</samp>’</dt>
+<dd><p>force YUV422 output
+</p>
+</dd>
+<dt> ‘<samp>yuv444</samp>’</dt>
+<dd><p>force YUV444 output
+</p>
+</dd>
+<dt> ‘<samp>rgb</samp>’</dt>
+<dd><p>force RGB output
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>yuv420</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>rgb <em>(deprecated)</em></samp>’</dt>
+<dd><p>If set to 1, force the filter to accept inputs in the RGB
+color space. Default value is 0. This option is deprecated, use
+‘<samp>format</samp>’ instead.
+</p>
+</dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>If set to 1, force the filter to draw the last overlay frame over the
+main input until the end of the stream. A value of 0 disables this
+behavior. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The ‘<samp>x</samp>’, and ‘<samp>y</samp>’ expressions can contain the following
+parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>main_w, W</samp>’</dt>
+<dt> ‘<samp>main_h, H</samp>’</dt>
+<dd><p>main input width and height
+</p>
+</dd>
+<dt> ‘<samp>overlay_w, w</samp>’</dt>
+<dt> ‘<samp>overlay_h, h</samp>’</dt>
+<dd><p>overlay input width and height
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values of the output
+format. For example for the pixel format "yuv422p" <var>hsub</var> is 2 and
+<var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>Note that the <var>n</var>, <var>pos</var>, <var>t</var> variables are available only
+when evaluation is done <em>per frame</em>, and will evaluate to NAN
+when ‘<samp>eval</samp>’ is set to ‘<samp>init</samp>’.
+</p>
+<p>Be aware that frames are taken from each input video in timestamp
+order, hence, if their initial timestamps differ, it is a good idea
+to pass the two inputs through a <var>setpts=PTS-STARTPTS</var> filter to
+have them begin in the same zero timestamp, as it does the example for
+the <var>movie</var> filter.
+</p>
+<p>You can chain together more overlays but you should test the
+efficiency of such approach.
+</p>
+<a name="Commands"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands">37.60.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Modify the x and y of the overlay input.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-8"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-8">37.60.2 Examples</a></h3>
+
+<ul>
+<li>
+Draw the overlay at 10 pixels from the bottom right corner of the main
+video:
+<table><tr><td> </td><td><pre class="example">overlay=main_w-overlay_w-10:main_h-overlay_h-10
+</pre></td></tr></table>
+
+<p>Using named options the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
+</pre></td></tr></table>
+
+</li><li>
+Insert a transparent PNG logo in the bottom left corner of the input,
+using the <code>ffmpeg</code> tool with the <code>-filter_complex</code> option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Insert 2 different transparent PNG logos (second logo on bottom
+right corner) using the <code>ffmpeg</code> tool:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Add a transparent color layer on top of the main video, <code>WxH</code>
+must specify the size of the main input to the overlay filter:
+<table><tr><td> </td><td><pre class="example">color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
+</pre></td></tr></table>
+
+</li><li>
+Play an original video and a filtered version (here with the deshake
+filter) side by side using the <code>ffplay</code> tool:
+<table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
+</pre></td></tr></table>
+
+<p>The above command is the same as:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
+</pre></td></tr></table>
+
+</li><li>
+Make a sliding overlay appearing from the left to the right top part of the
+screen starting since time 2:
+<table><tr><td> </td><td><pre class="example">overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
+</pre></td></tr></table>
+
+</li><li>
+Compose output by putting two input videos side to side:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i left.avi -i right.avi -filter_complex "
+nullsrc=size=200x100 [background];
+[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
+[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
+[background][left] overlay=shortest=1 [background+left];
+[background+left][right] overlay=shortest=1:x=100 [left+right]
+"
+</pre></td></tr></table>
+
+</li><li>
+mask 10-20 seconds of a video by applying the delogo filter to a section
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
+-vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
+masked.avi
+</pre></td></tr></table>
+
+</li><li>
+Chain several overlays in cascade:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=200x200 [bg];
+testsrc=s=100x100, split=4 [in0][in1][in2][in3];
+[in0] lutrgb=r=0, [bg] overlay=0:0 [mid0];
+[in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1];
+[in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2];
+[in3] null, [mid2] overlay=100:100 [out0]
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="owdenoise"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-owdenoise">37.61 owdenoise</a></h2>
+
+<p>Apply Overcomplete Wavelet denoiser.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>depth</samp>’</dt>
+<dd><p>Set depth.
+</p>
+<p>Larger depth values will denoise lower frequency components more, but
+slow down filtering.
+</p>
+<p>Must be an int in the range 8-16, default is <code>8</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p></dd>
+</dl>
+
+<a name="pad"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pad">37.62 pad</a></h2>
+
+<p>Add paddings to the input image, and place the original input at the
+given coordinates <var>x</var>, <var>y</var>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Specify an expression for the size of the output image with the
+paddings added. If the value for <var>width</var> or <var>height</var> is 0, the
+corresponding input size is used for the output.
+</p>
+<p>The <var>width</var> expression can reference the value set by the
+<var>height</var> expression, and vice versa.
+</p>
+<p>The default value of <var>width</var> and <var>height</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify an expression for the offsets where to place the input image
+in the padded area with respect to the top/left border of the output
+image.
+</p>
+<p>The <var>x</var> expression can reference the value set by the <var>y</var>
+expression, and vice versa.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the padded area. For the syntax of this option,
+check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>color</var> is "black".
+</p></dd>
+</dl>
+
+<p>The value for the <var>width</var>, <var>height</var>, <var>x</var>, and <var>y</var>
+options are expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>x and y offsets as specified by the <var>x</var> and <var>y</var>
+expressions, or NAN if not yet specified
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-44"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-44">37.62.1 Examples</a></h3>
+
+<ul>
+<li>
+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:
+<table><tr><td> </td><td><pre class="example">pad=640:480:0:40:violet
+</pre></td></tr></table>
+
+<p>The example above is equivalent to the following command:
+</p><table><tr><td> </td><td><pre class="example">pad=width=640:height=480:x=0:y=40:color=violet
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get an output with dimensions increased by 3/2,
+and put the input video at the center of the padded area:
+<table><tr><td> </td><td><pre class="example">pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get a final w/h ratio of 16:9:
+<table><tr><td> </td><td><pre class="example">pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+In case of anamorphic video, in order to set the output display aspect
+correctly, it is necessary to use <var>sar</var> in the expression,
+according to the relation:
+<table><tr><td> </td><td><pre class="example">(ih * X / ih) * sar = output_dar
+X = output_dar / sar
+</pre></td></tr></table>
+
+<p>Thus the previous example needs to be modified to:
+</p><table><tr><td> </td><td><pre class="example">pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Double output size and put the input video in the bottom-right
+corner of the output padded area:
+<table><tr><td> </td><td><pre class="example">pad="2*iw:2*ih:ow-iw:oh-ih"
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perspective"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-perspective">37.63 perspective</a></h2>
+
+<p>Correct perspective of video not recorded perpendicular to the screen.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>x1</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dt> ‘<samp>x2</samp>’</dt>
+<dt> ‘<samp>y2</samp>’</dt>
+<dt> ‘<samp>x3</samp>’</dt>
+<dt> ‘<samp>y3</samp>’</dt>
+<dd><p>Set coordinates expression for top left, top right, bottom left and bottom right corners.
+Default values are <code>0:0:W:0:0:H:W:H</code> with which perspective will remain unchanged.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of video frame.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>interpolation</samp>’</dt>
+<dd><p>Set interpolation for perspective correction.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>linear</samp>’</dt>
+<dt> ‘<samp>cubic</samp>’</dt>
+</dl>
+
+<p>Default value is ‘<samp>linear</samp>’.
+</p></dd>
+</dl>
+
+<a name="phase"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-phase">37.64 phase</a></h2>
+
+<p>Delay interlaced video by one field time so that the field order changes.
+</p>
+<p>The intended use is to fix PAL movies that have been captured with the
+opposite field order to the film-to-video transfer.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set phase mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>Capture field order top-first, transfer bottom-first.
+Filter will delay the bottom field.
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Capture field order bottom-first, transfer top-first.
+Filter will delay the top field.
+</p>
+</dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>Capture and transfer with the same field order. This mode only exists
+for the documentation of the other options to refer to, but if you
+actually select it, the filter will faithfully do nothing.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Capture field order determined automatically by field flags, transfer
+opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ modes on a frame by frame
+basis using field flags. If no field information is available,
+then this works just like ‘<samp>u</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Capture unknown or varying, transfer opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ on a frame by frame basis by
+analyzing the images and selecting the alternative that produces best
+match between the fields.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Capture top-first, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>B</samp>’</dt>
+<dd><p>Capture bottom-first, transfer unknown or varying.
+Filter selects among ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>A</samp>’</dt>
+<dd><p>Capture determined by field flags, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using field flags and
+image analysis. If no field information is available, then this works just
+like ‘<samp>U</samp>’. This is the default mode.
+</p>
+</dd>
+<dt> ‘<samp>U</samp>’</dt>
+<dd><p>Both capture and transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis only.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="pixdesctest"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pixdesctest">37.65 pixdesctest</a></h2>
+
+<p>Pixel format descriptor test filter, mainly useful for internal
+testing. The output video should be equal to the input video.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">format=monow, pixdesctest
+</pre></td></tr></table>
+
+<p>can be used to test the monowhite pixel format descriptor definition.
+</p>
+<a name="pp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pp">37.66 pp</a></h2>
+
+<p>Enable the specified chain of postprocessing subfilters using libpostproc. This
+library should be automatically selected with a GPL build (<code>--enable-gpl</code>).
+Subfilters must be separated by ’/’ and can be disabled by prepending a ’-’.
+Each subfilter and some options have a short and a long name that can be used
+interchangeably, i.e. dr/dering are the same.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>subfilters</samp>’</dt>
+<dd><p>Set postprocessing subfilters string.
+</p></dd>
+</dl>
+
+<p>All subfilters share common options to determine their scope:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a/autoq</samp>’</dt>
+<dd><p>Honor the quality commands for this subfilter.
+</p>
+</dd>
+<dt> ‘<samp>c/chrom</samp>’</dt>
+<dd><p>Do chrominance filtering, too (default).
+</p>
+</dd>
+<dt> ‘<samp>y/nochrom</samp>’</dt>
+<dd><p>Do luminance filtering only (no chrominance).
+</p>
+</dd>
+<dt> ‘<samp>n/noluma</samp>’</dt>
+<dd><p>Do chrominance filtering only (no luminance).
+</p></dd>
+</dl>
+
+<p>These options can be appended after the subfilter name, separated by a ’|’.
+</p>
+<p>Available subfilters are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hb/hdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vb/vdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ha/hadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>va/vadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>The horizontal and vertical deblocking filters share the difference and
+flatness values so you cannot set different horizontal and vertical
+thresholds.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h1/x1hdeblock</samp>’</dt>
+<dd><p>Experimental horizontal deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>v1/x1vdeblock</samp>’</dt>
+<dd><p>Experimental vertical deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>dr/dering</samp>’</dt>
+<dd><p>Deringing filter
+</p>
+</dd>
+<dt> ‘<samp>tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>threshold1</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold2</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold3</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>al/autolevels[:f/fullyrange], automatic brightness / contrast correction</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>f/fullyrange</samp>’</dt>
+<dd><p>Stretch luminance to <code>0-255</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lb/linblenddeint</samp>’</dt>
+<dd><p>Linear blend deinterlacing filter that deinterlaces the given block by
+filtering all lines with a <code>(1 2 1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>li/linipoldeint</samp>’</dt>
+<dd><p>Linear interpolating deinterlacing filter that deinterlaces the given block by
+linearly interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>ci/cubicipoldeint</samp>’</dt>
+<dd><p>Cubic interpolating deinterlacing filter deinterlaces the given block by
+cubically interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>md/mediandeint</samp>’</dt>
+<dd><p>Median deinterlacing filter that deinterlaces the given block by applying a
+median filter to every second line.
+</p>
+</dd>
+<dt> ‘<samp>fd/ffmpegdeint</samp>’</dt>
+<dd><p>FFmpeg deinterlacing filter that deinterlaces the given block by filtering every
+second line with a <code>(-1 4 2 4 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>l5/lowpass5</samp>’</dt>
+<dd><p>Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
+block by filtering all lines with a <code>(-1 2 6 2 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>fq/forceQuant[|quantizer]</samp>’</dt>
+<dd><p>Overrides the quantizer table from the input with the constant quantizer you
+specify.
+</p><dl compact="compact">
+<dt> ‘<samp>quantizer</samp>’</dt>
+<dd><p>Quantizer to use
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>de/default</samp>’</dt>
+<dd><p>Default pp filter combination (<code>hb|a,vb|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>fa/fast</samp>’</dt>
+<dd><p>Fast pp filter combination (<code>h1|a,v1|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>High quality pp filter combination (<code>ha|a|128|7,va|a,dr|a</code>)
+</p></dd>
+</dl>
+
+<a name="Examples-57"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-57">37.66.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply horizontal and vertical deblocking, deringing and automatic
+brightness/contrast:
+<table><tr><td> </td><td><pre class="example">pp=hb/vb/dr/al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters without brightness/contrast correction:
+<table><tr><td> </td><td><pre class="example">pp=de/-al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters and temporal denoiser:
+<table><tr><td> </td><td><pre class="example">pp=default/tmpnoise|1|2|3
+</pre></td></tr></table>
+
+</li><li>
+Apply deblocking on luminance only, and switch vertical deblocking on or off
+automatically depending on available CPU time:
+<table><tr><td> </td><td><pre class="example">pp=hb|y/vb|a
+</pre></td></tr></table>
+</li></ul>
+
+<a name="psnr"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-psnr">37.67 psnr</a></h2>
+
+<p>Obtain the average, maximum and minimum PSNR (Peak Signal to Noise
+Ratio) between two input videos.
+</p>
+<p>This filter takes in input two input videos, the first input is
+considered the "main" source and is passed unchanged to the
+output. The second input is used as a "reference" video for computing
+the PSNR.
+</p>
+<p>Both video inputs must have the same resolution and pixel format for
+this filter to work correctly. Also it assumes that both inputs
+have the same number of frames, which are compared one by one.
+</p>
+<p>The obtained average PSNR is printed through the logging system.
+</p>
+<p>The filter stores the accumulated MSE (mean squared error) of each
+frame, and at the end of the processing it is averaged across all frames
+equally, and the following formula is applied to obtain the PSNR:
+</p>
+<table><tr><td> </td><td><pre class="example">PSNR = 10*log10(MAX^2/MSE)
+</pre></td></tr></table>
+
+<p>Where MAX is the average of the maximum values of each component of the
+image.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>stats_file, f</samp>’</dt>
+<dd><p>If specified the filter will use the named file to save the PSNR of
+each individual frame.
+</p></dd>
+</dl>
+
+<p>The file printed if <var>stats_file</var> is selected, contains a sequence of
+key/value pairs of the form <var>key</var>:<var>value</var> for each compared
+couple of frames.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 1
+</p>
+</dd>
+<dt> ‘<samp>mse_avg</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames, averaged over all the image components.
+</p>
+</dd>
+<dt> ‘<samp>mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames for the component specified by the suffix.
+</p>
+</dd>
+<dt> ‘<samp>psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a</samp>’</dt>
+<dd><p>Peak Signal to Noise ratio of the compared frames for the component
+specified by the suffix.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
+[main][ref] psnr="stats_file=stats.log" [out]
+</pre></td></tr></table>
+
+<p>On this example the input file being processed is compared with the
+reference file ‘<tt>ref_movie.mpg</tt>’. The PSNR of each individual frame
+is stored in ‘<tt>stats.log</tt>’.
+</p>
+<p><a name="pullup"></a>
+</p><a name="pullup-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-pullup-1">37.68 pullup</a></h2>
+
+<p>Pulldown reversal (inverse telecine) filter, capable of handling mixed
+hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive
+content.
+</p>
+<p>The pullup filter is designed to take advantage of future context in making
+its decisions. This filter is stateless in the sense that it does not lock
+onto a pattern to follow, but it instead looks forward to the following
+fields in order to identify matches and rebuild progressive frames.
+</p>
+<p>To produce content with an even framerate, insert the fps filter after
+pullup, use <code>fps=24000/1001</code> if the input frame rate is 29.97fps,
+<code>fps=24</code> for 30fps and the (rare) telecined 25fps input.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>jl</samp>’</dt>
+<dt> ‘<samp>jr</samp>’</dt>
+<dt> ‘<samp>jt</samp>’</dt>
+<dt> ‘<samp>jb</samp>’</dt>
+<dd><p>These options set the amount of "junk" to ignore at the left, right, top, and
+bottom of the image, respectively. Left and right are in units of 8 pixels,
+while top and bottom are in units of 2 lines.
+The default is 8 pixels on each side.
+</p>
+</dd>
+<dt> ‘<samp>sb</samp>’</dt>
+<dd><p>Set the strict breaks. Setting this option to 1 will reduce the chances of
+filter generating an occasional mismatched frame, but it may also cause an
+excessive number of frames to be dropped during high motion sequences.
+Conversely, setting it to -1 will make filter match fields more easily.
+This may help processing of video where there is slight blurring between
+the fields, but may also cause there to be interlaced frames in the output.
+Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mp</samp>’</dt>
+<dd><p>Set the metric plane to use. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>Use luma plane.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Use chroma blue plane.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Use chroma red plane.
+</p></dd>
+</dl>
+
+<p>This option may be set to use chroma plane instead of the default luma plane
+for doing filter’s computations. This may improve accuracy on very clean
+source material, but more likely will decrease accuracy, especially if there
+is chroma noise (rainbow effect) or any grayscale video.
+The main purpose of setting ‘<samp>mp</samp>’ to a chroma plane is to reduce CPU
+load and make pullup usable in realtime on slow machines.
+</p></dd>
+</dl>
+
+<p>For best results (without duplicated frames in the output file) it is
+necessary to change the output frame rate. For example, to inverse
+telecine NTSC input:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf pullup -r 24000/1001 ...
+</pre></td></tr></table>
+
+<a name="removelogo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-removelogo">37.69 removelogo</a></h2>
+
+<p>Suppress a TV station logo, using an image file to determine which
+pixels comprise the logo. It works by filling in the pixels that
+comprise the logo with neighboring pixels.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filter bitmap file, which can be any image format supported by
+libavformat. The width and height of the image file must match those of the
+video stream being processed.
+</p></dd>
+</dl>
+
+<p>Pixels in the provided bitmap image with a value of zero are not
+considered part of the logo, non-zero pixels are considered part of
+the logo. If you use white (255) for the logo and black (0) for the
+rest, you will be safe. For making the filter bitmap, it is
+recommended to take a screen capture of a black frame with the logo
+visible, and then using a threshold filter followed by the erode
+filter once or twice.
+</p>
+<p>If needed, little splotches can be fixed manually. Remember that if
+logo pixels are not covered, the filter quality will be much
+reduced. Marking too many pixels as part of the logo does not hurt as
+much, but it will increase the amount of blurring needed to cover over
+the image and will destroy more information than necessary, and extra
+pixels will slow things down on a large logo.
+</p>
+<a name="rotate"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-rotate">37.70 rotate</a></h2>
+
+<p>Rotate video by an arbitrary angle expressed in radians.
+</p>
+<p>The filter accepts the following options:
+</p>
+<p>A description of the optional parameters follows.
+</p><dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set an expression for the angle by which to rotate the input video
+clockwise, expressed as a number of radians. A negative value will
+result in a counter-clockwise rotation. By default it is set to "0".
+</p>
+<p>This expression is evaluated for each frame.
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dd><p>Set the output width expression, default value is "iw".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>Set the output height expression, default value is "ih".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Enable bilinear interpolation if set to 1, a value of 0 disables
+it. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>fillcolor, c</samp>’</dt>
+<dd><p>Set the color used to fill the output area not covered by the rotated
+image. For the generalsyntax of this option, check the "Color" section in the
+ffmpeg-utils manual. If the special value "none" is selected then no
+background is printed (useful for example if the background is never shown).
+</p>
+<p>Default value is "black".
+</p></dd>
+</dl>
+
+<p>The expressions for the angle and the output size can contain the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0. It is always NAN
+before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time in seconds of the input frame, it is set to 0 when the filter is
+configured. It is always NAN before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>rotw(a)</samp>’</dt>
+<dt> ‘<samp>roth(a)</samp>’</dt>
+<dd><p>the minimal width/height required for completely containing the input
+video rotated by <var>a</var> radians.
+</p>
+<p>These are only available when computing the ‘<samp>out_w</samp>’ and
+‘<samp>out_h</samp>’ expressions.
+</p></dd>
+</dl>
+
+<a name="Examples-69"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-69">37.70.1 Examples</a></h3>
+
+<ul>
+<li>
+Rotate the input by PI/6 radians clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by PI/6 radians counter-clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=-PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by 45 degrees clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=45*PI/180
+</pre></td></tr></table>
+
+</li><li>
+Apply a constant rotation with period T, starting from an angle of PI/3:
+<table><tr><td> </td><td><pre class="example">rotate=PI/3+2*PI*t/T
+</pre></td></tr></table>
+
+</li><li>
+Make the input video rotation oscillating with a period of T
+seconds and an amplitude of A radians:
+<table><tr><td> </td><td><pre class="example">rotate=A*sin(2*PI/T*t)
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, output size is chosen so that the whole rotating
+input video is always completely contained in the output:
+<table><tr><td> </td><td><pre class="example">rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, reduce the output size so that no background is ever
+shown:
+<table><tr><td> </td><td><pre class="example">rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands-4"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands-4">37.70.2 Commands</a></h3>
+
+<p>The filter supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a, angle</samp>’</dt>
+<dd><p>Set the angle expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="sab"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sab">37.71 sab</a></h2>
+
+<p>Apply Shape Adaptive Blur.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set luma blur filter strength, must be a value in range 0.1-4.0, default
+value is 1.0. A greater value will result in a more blurred image, and
+in slower processing.
+</p>
+</dd>
+<dt> ‘<samp>luma_pre_filter_radius, lpfr</samp>’</dt>
+<dd><p>Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default
+value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma maximum difference between pixels to still be considered, must
+be a value in the 0.1-100.0 range, default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set chroma blur filter strength, must be a value in range 0.1-4.0. A
+greater value will result in a more blurred image, and in slower
+processing.
+</p>
+</dd>
+<dt> ‘<samp>chroma_pre_filter_radius, cpfr</samp>’</dt>
+<dd><p>Set chroma pre-filter radius, must be a value in the 0.1-2.0 range.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma maximum difference between pixels to still be considered,
+must be a value in the 0.1-100.0 range.
+</p></dd>
+</dl>
+
+<p>Each chroma option value, if not explicitly specified, is set to the
+corresponding luma option value.
+</p>
+<p><a name="scale"></a>
+</p><a name="scale-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-scale-1">37.72 scale</a></h2>
+
+<p>Scale (resize) the input video, using the libswscale library.
+</p>
+<p>The scale filter forces the output display aspect ratio to be the same
+of the input, by changing the output sample aspect ratio.
+</p>
+<p>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.
+</p>
+<a name="Options-2"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-2">37.72.1 Options</a></h3>
+<p>The filter accepts the following options, or any of the options
+supported by the libswscale scaler.
+</p>
+<p>See <a href="ffmpeg-scaler.html#scaler_005foptions">(ffmpeg-scaler)scaler_options</a> for
+the complete list of scaler options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Set the output video dimension expression. Default value is the input
+dimension.
+</p>
+<p>If the value is 0, the input width is used for the output.
+</p>
+<p>If one of the values is -1, the scale filter will use a value that
+maintains the aspect ratio of the input image, calculated from the
+other specified dimension. If both of them are -1, the input size is
+used
+</p>
+<p>If one of the values is -n with n > 1, the scale filter will also use a value
+that maintains the aspect ratio of the input image, calculated from the other
+specified dimension. After that it will, however, make sure that the calculated
+dimension is divisible by n and adjust the value if necessary.
+</p>
+<p>See below for the list of accepted constants for use in the dimension
+expression.
+</p>
+</dd>
+<dt> ‘<samp>interl</samp>’</dt>
+<dd><p>Set the interlacing mode. It accepts the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Force interlaced aware scaling.
+</p>
+</dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>Do not apply interlaced scaling.
+</p>
+</dd>
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>Select interlaced aware scaling depending on whether the source frames
+are flagged as interlaced or not.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>0</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set libswscale scaling flags. See
+<a href="ffmpeg-scaler.html#sws_005fflags">(ffmpeg-scaler)sws_flags</a> for the
+complete list of values. If not explicitly specified the filter applies
+the default flags.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>in_color_matrix</samp>’</dt>
+<dt> ‘<samp>out_color_matrix</samp>’</dt>
+<dd><p>Set in/output YCbCr color space type.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder.
+</p>
+<p>If not specified, the color space type depends on the pixel format.
+</p>
+<p>Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>Format conforming to International Telecommunication Union (ITU)
+Recommendation BT.709.
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>Set color space conforming to the United States Federal Communications
+Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a).
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>Set color space conforming to:
+</p>
+<ul>
+<li>
+ITU Radiocommunication Sector (ITU-R) Recommendation BT.601
+
+</li><li>
+ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G
+
+</li><li>
+Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004
+
+</li></ul>
+
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>Set color space conforming to SMPTE ST 240:1999.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>in_range</samp>’</dt>
+<dt> ‘<samp>out_range</samp>’</dt>
+<dd><p>Set in/output YCbCr sample range.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder. If not specified, the
+range depends on the pixel format. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>jpeg/full/pc</samp>’</dt>
+<dd><p>Set full range (0-255 in case of 8-bit luma).
+</p>
+</dd>
+<dt> ‘<samp>mpeg/tv</samp>’</dt>
+<dd><p>Set "MPEG" range (16-235 in case of 8-bit luma).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>force_original_aspect_ratio</samp>’</dt>
+<dd><p>Enable decreasing or increasing output video width or height if necessary to
+keep the original aspect ratio. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>disable</samp>’</dt>
+<dd><p>Scale the video as specified and disable this feature.
+</p>
+</dd>
+<dt> ‘<samp>decrease</samp>’</dt>
+<dd><p>The output video dimensions will automatically be decreased if needed.
+</p>
+</dd>
+<dt> ‘<samp>increase</samp>’</dt>
+<dd><p>The output video dimensions will automatically be increased if needed.
+</p>
+</dd>
+</dl>
+
+<p>One useful instance of this option is that when you know a specific device’s
+maximum allowed resolution, you can use this to limit the output video to
+that, while retaining the aspect ratio. For example, device A allows
+1280x720 playback, and your video is 1920x800. Using this option (set it to
+decrease) and specifying 1280x720 to the command line makes the output
+1280x533.
+</p>
+<p>Please note that this is a different thing than specifying -1 for ‘<samp>w</samp>’
+or ‘<samp>h</samp>’, you still need to specify the output resolution for this option
+to work.
+</p>
+</dd>
+</dl>
+
+<p>The values of the ‘<samp>w</samp>’ and ‘<samp>h</samp>’ options are expressions
+containing the following constants:
+</p>
+<dl compact="compact">
+<dt> <var>in_w</var></dt>
+<dt> <var>in_h</var></dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> <var>iw</var></dt>
+<dt> <var>ih</var></dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> <var>out_w</var></dt>
+<dt> <var>out_h</var></dt>
+<dd><p>the output (scaled) width and height
+</p>
+</dd>
+<dt> <var>ow</var></dt>
+<dt> <var>oh</var></dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> <var>a</var></dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> <var>sar</var></dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> <var>dar</var></dt>
+<dd><p>input display aspect ratio. Calculated from <code>(iw / ih) * sar</code>.
+</p>
+</dd>
+<dt> <var>hsub</var></dt>
+<dt> <var>vsub</var></dt>
+<dd><p>horizontal and vertical input chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> <var>ohsub</var></dt>
+<dt> <var>ovsub</var></dt>
+<dd><p>horizontal and vertical output chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-75"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-75">37.72.2 Examples</a></h3>
+
+<ul>
+<li>
+Scale the input video to a size of 200x100:
+<table><tr><td> </td><td><pre class="example">scale=w=200:h=100
+</pre></td></tr></table>
+
+<p>This is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">scale=200:100
+</pre></td></tr></table>
+
+<p>or:
+</p><table><tr><td> </td><td><pre class="example">scale=200x100
+</pre></td></tr></table>
+
+</li><li>
+Specify a size abbreviation for the output size:
+<table><tr><td> </td><td><pre class="example">scale=qcif
+</pre></td></tr></table>
+
+<p>which can also be written as:
+</p><table><tr><td> </td><td><pre class="example">scale=size=qcif
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x:
+<table><tr><td> </td><td><pre class="example">scale=w=2*iw:h=2*ih
+</pre></td></tr></table>
+
+</li><li>
+The above is the same as:
+<table><tr><td> </td><td><pre class="example">scale=2*in_w:2*in_h
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x with forced interlaced scaling:
+<table><tr><td> </td><td><pre class="example">scale=2*iw:2*ih:interl=1
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to half size:
+<table><tr><td> </td><td><pre class="example">scale=w=iw/2:h=ih/2
+</pre></td></tr></table>
+
+</li><li>
+Increase the width, and set the height to the same size:
+<table><tr><td> </td><td><pre class="example">scale=3/2*iw:ow
+</pre></td></tr></table>
+
+</li><li>
+Seek for Greek harmony:
+<table><tr><td> </td><td><pre class="example">scale=iw:1/PHI*iw
+scale=ih*PHI:ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the height, and set the width to 3/2 of the height:
+<table><tr><td> </td><td><pre class="example">scale=w=3/2*oh:h=3/5*ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the size, but make the size a multiple of the chroma
+subsample values:
+<table><tr><td> </td><td><pre class="example">scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
+</pre></td></tr></table>
+
+</li><li>
+Increase the width to a maximum of 500 pixels, keep the same input
+aspect ratio:
+<table><tr><td> </td><td><pre class="example">scale=w='min(500\, iw*3/2):h=-1'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="separatefields"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-separatefields">37.73 separatefields</a></h2>
+
+<p>The <code>separatefields</code> takes a frame-based video input and splits
+each frame into its components fields, producing a new half height clip
+with twice the frame rate and twice the frame count.
+</p>
+<p>This filter use field-dominance information in frame to decide which
+of each pair of fields to place first in the output.
+If it gets it wrong use <a href="#setfield">setfield</a> filter before <code>separatefields</code> filter.
+</p>
+<a name="setdar_002c-setsar"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-setdar_002c-setsar">37.74 setdar, setsar</a></h2>
+
+<p>The <code>setdar</code> filter sets the Display Aspect Ratio for the filter
+output video.
+</p>
+<p>This is done by changing the specified Sample (aka Pixel) Aspect
+Ratio, according to the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>DAR</var> = <var>HORIZONTAL_RESOLUTION</var> / <var>VERTICAL_RESOLUTION</var> * <var>SAR</var>
+</pre></td></tr></table>
+
+<p>Keep in mind that the <code>setdar</code> 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.
+</p>
+<p>The <code>setsar</code> filter sets the Sample (aka Pixel) Aspect Ratio for
+the filter output video.
+</p>
+<p>Note that as a consequence of the application of this filter, the
+output display aspect ratio will change according to the equation
+above.
+</p>
+<p>Keep in mind that the sample aspect ratio set by the <code>setsar</code>
+filter may be changed by later filters in the filterchain, e.g. if
+another "setsar" or a "setdar" filter is applied.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>r, ratio, dar (<code>setdar</code> only), sar (<code>setsar</code> only)</samp>’</dt>
+<dd><p>Set the aspect ratio used by the filter.
+</p>
+<p>The parameter can be a floating point number string, an expression, or
+a string of the form <var>num</var>:<var>den</var>, where <var>num</var> and
+<var>den</var> are the numerator and denominator of the aspect ratio. If
+the parameter is not specified, it is assumed the value "0".
+In case the form "<var>num</var>:<var>den</var>" is used, the <code>:</code> character
+should be escaped.
+</p>
+</dd>
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum integer value to use for expressing numerator and
+denominator when reducing the expressed aspect ratio to a rational.
+Default value is <code>100</code>.
+</p>
+</dd>
+</dl>
+
+<p>The parameter <var>sar</var> is an expression containing
+the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>E, PI, PHI</samp>’</dt>
+<dd><p>the corresponding mathematical approximated values for e
+(euler number), pi (greek PI), phi (golden ratio)
+</p>
+</dd>
+<dt> ‘<samp>w, h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>w</var> / <var>h</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub, vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-6"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-6">37.74.1 Examples</a></h3>
+
+<ul>
+<li>
+To change the display aspect ratio to 16:9, specify one of the following:
+<table><tr><td> </td><td><pre class="example">setdar=dar=1.77777
+setdar=dar=16/9
+setdar=dar=1.77777
+</pre></td></tr></table>
+
+</li><li>
+To change the sample aspect ratio to 10:11, specify:
+<table><tr><td> </td><td><pre class="example">setsar=sar=10/11
+</pre></td></tr></table>
+
+</li><li>
+To set a display aspect ratio of 16:9, and specify a maximum integer value of
+1000 in the aspect ratio reduction, use the command:
+<table><tr><td> </td><td><pre class="example">setdar=ratio=16/9:max=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="setfield"></a>
+</p><a name="setfield-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-setfield-1">37.75 setfield</a></h2>
+
+<p>Force field for the output video frame.
+</p>
+<p>The <code>setfield</code> filter marks the interlace type field for the
+output frames. It does not change the input frame, but only sets the
+corresponding property, which affects how the frame is treated by
+following filters (e.g. <code>fieldorder</code> or <code>yadif</code>).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Keep the same field property.
+</p>
+</dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Mark the frame as bottom-field-first.
+</p>
+</dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Mark the frame as top-field-first.
+</p>
+</dd>
+<dt> ‘<samp>prog</samp>’</dt>
+<dd><p>Mark the frame as progressive.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="showinfo"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-showinfo">37.76 showinfo</a></h2>
+
+<p>Show a line containing various information for each input video frame.
+The input video is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+time base units. The time base unit depends on the filter input pad.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>pixel format name
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>sample aspect ratio of the input frame, expressed in the form
+<var>num</var>/<var>den</var>
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>size of the input frame. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>i</samp>’</dt>
+<dd><p>interlaced mode ("P" for "progressive", "T" for top field first, "B"
+for bottom field first)
+</p>
+</dd>
+<dt> ‘<samp>iskey</samp>’</dt>
+<dd><p>1 if the frame is a key frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>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 <code>AVPictureType</code> enum and of
+the <code>av_get_picture_type_char</code> function defined in
+‘<tt>libavutil/avutil.h</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame
+</p>
+</dd>
+<dt> ‘<samp>plane_checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of each plane of the input frame,
+expressed in the form "[<var>c0</var> <var>c1</var> <var>c2</var> <var>c3</var>]"
+</p></dd>
+</dl>
+
+<p><a name="smartblur"></a>
+</p><a name="smartblur-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-smartblur-1">37.77 smartblur</a></h2>
+
+<p>Blur the input video without impacting the outlines.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set the luma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set the luma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_threshold, lt</samp>’</dt>
+<dd><p>Set the luma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set the chroma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set the chroma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_threshold, ct</samp>’</dt>
+<dd><p>Set the chroma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p></dd>
+</dl>
+
+<p>If a chroma option is not explicitly set, the corresponding luma value
+is set.
+</p>
+<a name="stereo3d"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-stereo3d">37.78 stereo3d</a></h2>
+
+<p>Convert between different stereoscopic image formats.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in</samp>’</dt>
+<dd><p>Set stereoscopic image format of input.
+</p>
+<p>Available values for input image formats are:
+</p><dl compact="compact">
+<dt> ‘<samp>sbsl</samp>’</dt>
+<dd><p>side by side parallel (left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbsr</samp>’</dt>
+<dd><p>side by side crosseye (right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2l</samp>’</dt>
+<dd><p>side by side parallel with half width resolution
+(left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2r</samp>’</dt>
+<dd><p>side by side crosseye with half width resolution
+(right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>abl</samp>’</dt>
+<dd><p>above-below (left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>abr</samp>’</dt>
+<dd><p>above-below (right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2l</samp>’</dt>
+<dd><p>above-below with half height resolution
+(left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2r</samp>’</dt>
+<dd><p>above-below with half height resolution
+(right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>al</samp>’</dt>
+<dd><p>alternating frames (left eye first, right eye second)
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dd><p>alternating frames (right eye first, left eye second)
+</p>
+<p>Default value is ‘<samp>sbsl</samp>’.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>out</samp>’</dt>
+<dd><p>Set stereoscopic image format of output.
+</p>
+<p>Available values for output image formats are all the input formats as well as:
+</p><dl compact="compact">
+<dt> ‘<samp>arbg</samp>’</dt>
+<dd><p>anaglyph red/blue gray
+(red filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>argg</samp>’</dt>
+<dd><p>anaglyph red/green gray
+(red filter on left eye, green filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcg</samp>’</dt>
+<dd><p>anaglyph red/cyan gray
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arch</samp>’</dt>
+<dd><p>anaglyph red/cyan half colored
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcc</samp>’</dt>
+<dd><p>anaglyph red/cyan color
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcd</samp>’</dt>
+<dd><p>anaglyph red/cyan color optimized with the least squares projection of dubois
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmg</samp>’</dt>
+<dd><p>anaglyph green/magenta gray
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmh</samp>’</dt>
+<dd><p>anaglyph green/magenta half colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmc</samp>’</dt>
+<dd><p>anaglyph green/magenta colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmd</samp>’</dt>
+<dd><p>anaglyph green/magenta color optimized with the least squares projection of dubois
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybg</samp>’</dt>
+<dd><p>anaglyph yellow/blue gray
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybh</samp>’</dt>
+<dd><p>anaglyph yellow/blue half colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybc</samp>’</dt>
+<dd><p>anaglyph yellow/blue colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybd</samp>’</dt>
+<dd><p>anaglyph yellow/blue color optimized with the least squares projection of dubois
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>irl</samp>’</dt>
+<dd><p>interleaved rows (left eye has top row, right eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>irr</samp>’</dt>
+<dd><p>interleaved rows (right eye has top row, left eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>ml</samp>’</dt>
+<dd><p>mono output (left eye only)
+</p>
+</dd>
+<dt> ‘<samp>mr</samp>’</dt>
+<dd><p>mono output (right eye only)
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>arcd</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-80"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-80">37.78.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input video from side by side parallel to anaglyph yellow/blue dubois:
+<table><tr><td> </td><td><pre class="example">stereo3d=sbsl:aybd
+</pre></td></tr></table>
+
+</li><li>
+Convert input video from above bellow (left eye above, right eye below) to side by side crosseye.
+<table><tr><td> </td><td><pre class="example">stereo3d=abl:sbsr
+</pre></td></tr></table>
+</li></ul>
+
+<a name="spp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-spp">37.79 spp</a></h2>
+
+<p>Apply a simple postprocessing filter that compresses and decompresses the image
+at several (or - in the case of ‘<samp>quality</samp>’ level <code>6</code> - all) shifts
+and average the results.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>quality</samp>’</dt>
+<dd><p>Set quality. This option defines the number of levels for averaging. It accepts
+an integer in the range 0-6. If set to <code>0</code>, the filter will have no
+effect. A value of <code>6</code> means the higher quality. For each increment of
+that value the speed drops by a factor of approximately 2. Default value is
+<code>3</code>.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Force a constant quantization parameter. If not set, the filter will use the QP
+from the video stream (if available).
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set thresholding mode. Available modes are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hard</samp>’</dt>
+<dd><p>Set hard thresholding (default).
+</p></dd>
+<dt> ‘<samp>soft</samp>’</dt>
+<dd><p>Set soft thresholding (better de-ringing effect, but likely blurrier).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_bframe_qp</samp>’</dt>
+<dd><p>Enable the use of the QP from the B-Frames if set to <code>1</code>. Using this
+option may cause flicker since the B-Frames have often larger QP. Default is
+<code>0</code> (not enabled).
+</p></dd>
+</dl>
+
+<p><a name="subtitles"></a>
+</p><a name="subtitles-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-subtitles-1">37.80 subtitles</a></h2>
+
+<p>Draw subtitles on top of input video using the libass library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libass</code>. This filter also requires a build with libavcodec and
+libavformat to convert the passed subtitles file to ASS (Advanced Substation
+Alpha) subtitles format.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the subtitle file to read. It must be specified.
+</p>
+</dd>
+<dt> ‘<samp>original_size</samp>’</dt>
+<dd><p>Specify the size of the original video, the video for which the ASS file
+was composed. For the syntax of this option, check the "Video size" section in
+the ffmpeg-utils manual. Due to a misdesign in ASS aspect ratio arithmetic,
+this is necessary to correctly scale the fonts if the aspect ratio has been
+changed.
+</p>
+</dd>
+<dt> ‘<samp>charenc</samp>’</dt>
+<dd><p>Set subtitles input character encoding. <code>subtitles</code> filter only. Only
+useful if not UTF-8.
+</p></dd>
+</dl>
+
+<p>If the first key is not specified, it is assumed that the first value
+specifies the ‘<samp>filename</samp>’.
+</p>
+<p>For example, to render the file ‘<tt>sub.srt</tt>’ on top of the input
+video, use the command:
+</p><table><tr><td> </td><td><pre class="example">subtitles=sub.srt
+</pre></td></tr></table>
+
+<p>which is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">subtitles=filename=sub.srt
+</pre></td></tr></table>
+
+<a name="super2xsai"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-super2xsai">37.81 super2xsai</a></h2>
+
+<p>Scale the input by 2x and smooth using the Super2xSaI (Scale and
+Interpolate) pixel art scaling algorithm.
+</p>
+<p>Useful for enlarging pixel art images without reducing sharpness.
+</p>
+<a name="swapuv"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-swapuv">37.82 swapuv</a></h2>
+<p>Swap U & V plane.
+</p>
+<a name="telecine"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-telecine">37.83 telecine</a></h2>
+
+<p>Apply telecine process to the video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>first_field</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>top, t</samp>’</dt>
+<dd><p>top field first
+</p></dd>
+<dt> ‘<samp>bottom, b</samp>’</dt>
+<dd><p>bottom field first
+The default value is <code>top</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>pattern</samp>’</dt>
+<dd><p>A string of numbers representing the pulldown pattern you wish to apply.
+The default value is <code>23</code>.
+</p></dd>
+</dl>
+
+<table><tr><td> </td><td><pre class="example">Some typical patterns:
+
+NTSC output (30i):
+27.5p: 32222
+24p: 23 (classic)
+24p: 2332 (preferred)
+20p: 33
+18p: 334
+16p: 3444
+
+PAL output (25i):
+27.5p: 12222
+24p: 222222222223 ("Euro pulldown")
+16.67p: 33
+16p: 33333334
+</pre></td></tr></table>
+
+<a name="thumbnail"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-thumbnail">37.84 thumbnail</a></h2>
+<p>Select the most representative frame in a given sequence of consecutive frames.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the frames batch size to analyze; in a set of <var>n</var> frames, the filter
+will pick one of them, and then handle the next batch of <var>n</var> frames until
+the end. Default is <code>100</code>.
+</p></dd>
+</dl>
+
+<p>Since the filter keeps track of the whole frames sequence, a bigger <var>n</var>
+value will result in a higher memory usage, so a high value is not recommended.
+</p>
+<a name="Examples-31"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-31">37.84.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract one picture each 50 frames:
+<table><tr><td> </td><td><pre class="example">thumbnail=50
+</pre></td></tr></table>
+
+</li><li>
+Complete example of a thumbnail creation with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tile"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-tile">37.85 tile</a></h2>
+
+<p>Tile several successive frames together.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>layout</samp>’</dt>
+<dd><p>Set the grid size (i.e. the number of lines and columns). For the syntax of
+this option, check the "Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames</samp>’</dt>
+<dd><p>Set the maximum number of frames to render in the given area. It must be less
+than or equal to <var>w</var>x<var>h</var>. The default value is <code>0</code>, meaning all
+the area will be used.
+</p>
+</dd>
+<dt> ‘<samp>margin</samp>’</dt>
+<dd><p>Set the outer border margin in pixels.
+</p>
+</dd>
+<dt> ‘<samp>padding</samp>’</dt>
+<dd><p>Set the inner border thickness (i.e. the number of pixels between frames). For
+more advanced padding options (such as having different values for the edges),
+refer to the pad video filter.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the unused areaFor the syntax of this option, check the
+"Color" section in the ffmpeg-utils manual. The default value of <var>color</var>
+is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-95"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-95">37.85.1 Examples</a></h3>
+
+<ul>
+<li>
+Produce 8x8 PNG tiles of all keyframes (‘<samp>-skip_frame nokey</samp>’) in a movie:
+<table><tr><td> </td><td><pre class="example">ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
+</pre></td></tr></table>
+<p>The ‘<samp>-vsync 0</samp>’ is necessary to prevent <code>ffmpeg</code> from
+duplicating each output frame to accommodate the originally detected frame
+rate.
+</p>
+</li><li>
+Display <code>5</code> pictures in an area of <code>3x2</code> frames,
+with <code>7</code> pixels between them, and <code>2</code> pixels of initial margin, using
+mixed flat and named options:
+<table><tr><td> </td><td><pre class="example">tile=3x2:nb_frames=5:padding=7:margin=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tinterlace"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-tinterlace">37.86 tinterlace</a></h2>
+
+<p>Perform various types of temporal field interlacing.
+</p>
+<p>Frames are counted starting from 1, so the first input frame is
+considered odd.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify the mode of the interlacing. This option can also be specified
+as a value alone. See below for a list of values for this option.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>merge, 0</samp>’</dt>
+<dd><p>Move odd frames into the upper field, even into the lower field,
+generating a double height frame at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_odd, 1</samp>’</dt>
+<dd><p>Only output even frames, odd frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_even, 2</samp>’</dt>
+<dd><p>Only output odd frames, even frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>pad, 3</samp>’</dt>
+<dd><p>Expand each frame to full height, but pad alternate lines with black,
+generating a frame with double height at the same input frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_top, 4</samp>’</dt>
+<dd><p>Interleave the upper field from odd frames with the lower field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_bottom, 5</samp>’</dt>
+<dd><p>Interleave the lower field from odd frames with the upper field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interlacex2, 6</samp>’</dt>
+<dd><p>Double frame rate with unchanged height. Frames are inserted each
+containing the second temporal field from the previous input frame and
+the first temporal field from the next input frame. This mode relies on
+the top_field_first flag. Useful for interlaced video displays with no
+field synchronisation.
+</p></dd>
+</dl>
+
+<p>Numeric values are deprecated but are accepted for backward
+compatibility reasons.
+</p>
+<p>Default mode is <code>merge</code>.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Specify flags influencing the filter process.
+</p>
+<p>Available value for <var>flags</var> is:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low_pass_filter, vlfp</samp>’</dt>
+<dd><p>Enable vertical low-pass filtering in the filter.
+Vertical low-pass filtering is required when creating an interlaced
+destination from a progressive source which contains high-frequency
+vertical detail. Filtering will reduce interlace ’twitter’ and Moire
+patterning.
+</p>
+<p>Vertical low-pass filtering can only be enabled for ‘<samp>mode</samp>’
+<var>interleave_top</var> and <var>interleave_bottom</var>.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<a name="transpose"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-transpose">37.87 transpose</a></h2>
+
+<p>Transpose rows with columns in the input video and optionally flip it.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dir</samp>’</dt>
+<dd><p>Specify the transposition direction.
+</p>
+<p>Can assume the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>0, 4, cclock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise and vertically flip (default), that is:
+</p><table><tr><td> </td><td><pre class="example">L.R L.l
+. . -> . .
+l.r R.r
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>1, 5, clock</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R l.L
+. . -> . .
+l.r r.R
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>2, 6, cclock</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R R.r
+. . -> . .
+l.r L.l
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>3, 7, clock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise and vertically flip, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R r.R
+. . -> . .
+l.r l.L
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>For values between 4-7, the transposition is only done if the input
+video geometry is portrait and not landscape. These values are
+deprecated, the <code>passthrough</code> option should be used instead.
+</p>
+<p>Numerical values are deprecated, and should be dropped in favor of
+symbolic constants.
+</p>
+</dd>
+<dt> ‘<samp>passthrough</samp>’</dt>
+<dd><p>Do not apply the transposition if the input geometry matches the one
+specified by the specified value. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Always apply transposition.
+</p></dd>
+<dt> ‘<samp>portrait</samp>’</dt>
+<dd><p>Preserve portrait geometry (when <var>height</var> >= <var>width</var>).
+</p></dd>
+<dt> ‘<samp>landscape</samp>’</dt>
+<dd><p>Preserve landscape geometry (when <var>width</var> >= <var>height</var>).
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p></dd>
+</dl>
+
+<p>For example to rotate by 90 degrees clockwise and preserve portrait
+layout:
+</p><table><tr><td> </td><td><pre class="example">transpose=dir=1:passthrough=portrait
+</pre></td></tr></table>
+
+<p>The command above can also be specified as:
+</p><table><tr><td> </td><td><pre class="example">transpose=1:portrait
+</pre></td></tr></table>
+
+<a name="trim"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-trim">37.88 trim</a></h2>
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the frame with the
+timestamp <var>start</var> will be the first frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first frame that will be dropped, i.e. the frame
+immediately preceding the one with the timestamp <var>end</var> will be the last
+frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in timebase
+units instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in timebase units
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _frame variants simply count the
+frames that pass through the filter. Also note that this filter does not modify
+the timestamps. If you wish that the output timestamps start at zero, insert a
+setpts filter after the trim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all the frames that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple trim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first second
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=duration=1
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="unsharp"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-unsharp">37.89 unsharp</a></h2>
+
+<p>Sharpen or blur the input video.
+</p>
+<p>It accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_msize_x, lx</samp>’</dt>
+<dd><p>Set the luma matrix horizontal size. It must be an odd integer between
+3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_msize_y, ly</samp>’</dt>
+<dd><p>Set the luma matrix vertical size. It must be an odd integer between 3
+and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_amount, la</samp>’</dt>
+<dd><p>Set the luma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_x, cx</samp>’</dt>
+<dd><p>Set the chroma matrix horizontal size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_y, cy</samp>’</dt>
+<dd><p>Set the chroma matrix vertical size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_amount, ca</samp>’</dt>
+<dd><p>Set the chroma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 0.0.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<p>All parameters are optional and default to the equivalent of the
+string ’5:5:1.0:5:5:0.0’.
+</p>
+<a name="Examples-64"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-64">37.89.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply strong luma sharpen effect:
+<table><tr><td> </td><td><pre class="example">unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
+</pre></td></tr></table>
+
+</li><li>
+Apply strong blur of both luma and chroma parameters:
+<table><tr><td> </td><td><pre class="example">unsharp=7:7:-2:7:7:-2
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabdetect"></a>
+</p><a name="vidstabdetect-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-vidstabdetect-1">37.90 vidstabdetect</a></h2>
+
+<p>Analyze video stabilization/deshaking. Perform pass 1 of 2, see
+<a href="#vidstabtransform">vidstabtransform</a> for pass 2.
+</p>
+<p>This filter generates a file with relative translation and rotation
+transform information about subsequent frames, which is then used by
+the <a href="#vidstabtransform">vidstabtransform</a> filter.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>result</samp>’</dt>
+<dd><p>Set the path to the file used to write the transforms information.
+Default value is ‘<tt>transforms.trf</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>shakiness</samp>’</dt>
+<dd><p>Set how shaky the video is and how quick the camera is. It accepts an
+integer in the range 1-10, a value of 1 means little shakiness, a
+value of 10 means strong shakiness. Default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>accuracy</samp>’</dt>
+<dd><p>Set the accuracy of the detection process. It must be a value in the
+range 1-15. A value of 1 means low accuracy, a value of 15 means high
+accuracy. Default value is 15.
+</p>
+</dd>
+<dt> ‘<samp>stepsize</samp>’</dt>
+<dd><p>Set stepsize of the search process. The region around minimum is
+scanned with 1 pixel resolution. Default value is 6.
+</p>
+</dd>
+<dt> ‘<samp>mincontrast</samp>’</dt>
+<dd><p>Set minimum contrast. Below this value a local measurement field is
+discarded. Must be a floating point value in the range 0-1. Default
+value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Set reference frame number for tripod mode.
+</p>
+<p>If enabled, the motion of the frames is compared to a reference frame
+in the filtered stream, identified by the specified number. The idea
+is to compensate all movements in a more-or-less static scene and keep
+the camera view absolutely still.
+</p>
+<p>If set to 0, it is disabled. The frames are counted starting from 1.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>Show fields and transforms in the resulting frames. It accepts an
+integer in the range 0-2. Default value is 0, which disables any
+visualization.
+</p></dd>
+</dl>
+
+<a name="Examples-55"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-55">37.90.1 Examples</a></h3>
+
+<ul>
+<li>
+Use default values:
+<table><tr><td> </td><td><pre class="example">vidstabdetect
+</pre></td></tr></table>
+
+</li><li>
+Analyze strongly shaky movie and put the results in file
+‘<tt>mytransforms.trf</tt>’:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Visualize the result of internal transformations in the resulting
+video:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=show=1
+</pre></td></tr></table>
+
+</li><li>
+Analyze a video with medium shakiness using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabtransform"></a>
+</p><a name="vidstabtransform-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-vidstabtransform-1">37.91 vidstabtransform</a></h2>
+
+<p>Video stabilization/deshaking: pass 2 of 2,
+see <a href="#vidstabdetect">vidstabdetect</a> for pass 1.
+</p>
+<p>Read a file with transform information for each frame and
+apply/compensate them. Together with the <a href="#vidstabdetect">vidstabdetect</a>
+filter this can be used to deshake videos. See also
+<a href="http://public.hronopik.de/vid.stab">http://public.hronopik.de/vid.stab</a>. It is important to also use
+the unsharp filter, see below.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<a name="Options-3"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Options-3">37.91.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>input</samp>’</dt>
+<dd><p>Set path to the file used to read the transforms. Default value is
+‘<tt>transforms.trf</tt>’).
+</p>
+</dd>
+<dt> ‘<samp>smoothing</samp>’</dt>
+<dd><p>Set the number of frames (value*2 + 1) used for lowpass filtering the
+camera movements. Default value is 10.
+</p>
+<p>For example a number of 10 means that 21 frames are used (10 in the
+past and 10 in the future) to smoothen the motion in the video. A
+larger values leads to a smoother video, but limits the acceleration
+of the camera (pan/tilt movements). 0 is a special case where a
+static camera is simulated.
+</p>
+</dd>
+<dt> ‘<samp>optalgo</samp>’</dt>
+<dd><p>Set the camera path optimization algorithm.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>gaussian kernel low-pass filter on camera motion (default)
+</p></dd>
+<dt> ‘<samp>avg</samp>’</dt>
+<dd><p>averaging on transformations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>maxshift</samp>’</dt>
+<dd><p>Set maximal number of pixels to translate frames. Default value is -1,
+meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>maxangle</samp>’</dt>
+<dd><p>Set maximal angle in radians (degree*PI/180) to rotate frames. Default
+value is -1, meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>crop</samp>’</dt>
+<dd><p>Specify how to deal with borders that may be visible due to movement
+compensation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>keep</samp>’</dt>
+<dd><p>keep image information from previous frame (default)
+</p></dd>
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>fill the border black
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>invert</samp>’</dt>
+<dd><p>Invert transforms if set to 1. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>relative</samp>’</dt>
+<dd><p>Consider transforms as relative to previsou frame if set to 1,
+absolute if set to 0. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set percentage to zoom. A positive value will result in a zoom-in
+effect, a negative value in a zoom-out effect. Default value is 0 (no
+zoom).
+</p>
+</dd>
+<dt> ‘<samp>optzoom</samp>’</dt>
+<dd><p>Set optimal zooming to avoid borders.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>disabled
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>optimal static zoom value is determined (only very strong movements
+will lead to visible borders) (default)
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dd><p>optimal adaptive zoom value is determined (no borders will be
+visible), see ‘<samp>zoomspeed</samp>’
+</p></dd>
+</dl>
+
+<p>Note that the value given at zoom is added to the one calculated here.
+</p>
+</dd>
+<dt> ‘<samp>zoomspeed</samp>’</dt>
+<dd><p>Set percent to zoom maximally each frame (enabled when
+‘<samp>optzoom</samp>’ is set to 2). Range is from 0 to 5, default value is
+0.25.
+</p>
+</dd>
+<dt> ‘<samp>interpol</samp>’</dt>
+<dd><p>Specify type of interpolation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>no</samp>’</dt>
+<dd><p>no interpolation
+</p></dd>
+<dt> ‘<samp>linear</samp>’</dt>
+<dd><p>linear only horizontal
+</p></dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>linear in both directions (default)
+</p></dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>cubic in both directions (slow)
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Enable virtual tripod mode if set to 1, which is equivalent to
+<code>relative=0:smoothing=0</code>. Default value is 0.
+</p>
+<p>Use also <code>tripod</code> option of <a href="#vidstabdetect">vidstabdetect</a>.
+</p>
+</dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Increase log verbosity if set to 1. Also the detected global motions
+are written to the temporary file ‘<tt>global_motions.trf</tt>’. Default
+value is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-87"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-87">37.91.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for a typical stabilization with default values:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
+</pre></td></tr></table>
+
+<p>Note the use of the unsharp filter which is always recommended.
+</p>
+</li><li>
+Zoom in a bit more and load transform data from a given file:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=zoom=5:input="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Smoothen the video even more:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=smoothing=30
+</pre></td></tr></table>
+</li></ul>
+
+<a name="vflip"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-vflip">37.92 vflip</a></h2>
+
+<p>Flip the input video vertically.
+</p>
+<p>For example, to vertically flip a video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "vflip" out.avi
+</pre></td></tr></table>
+
+<a name="vignette"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-vignette">37.93 vignette</a></h2>
+
+<p>Make or reverse a natural vignetting effect.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set lens angle expression as a number of radians.
+</p>
+<p>The value is clipped in the <code>[0,PI/2]</code> range.
+</p>
+<p>Default value: <code>"PI/5"</code>
+</p>
+</dd>
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dd><p>Set center coordinates expressions. Respectively <code>"w/2"</code> and <code>"h/2"</code>
+by default.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set forward/backward mode.
+</p>
+<p>Available modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>forward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the darker the image becomes.
+</p>
+</dd>
+<dt> ‘<samp>backward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the brighter the image becomes.
+This can be used to reverse a vignette effect, though there is no automatic
+detection to extract the lens ‘<samp>angle</samp>’ and other settings (yet). It can
+also be used to create a burning effect.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>forward</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set evaluation mode for the expressions (‘<samp>angle</samp>’, ‘<samp>x0</samp>’, ‘<samp>y0</samp>’).
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>Evaluate expressions only once during the filter initialization.
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Evaluate expressions for each incoming frame. This is way slower than the
+‘<samp>init</samp>’ mode since it requires all the scalers to be re-computed, but it
+allows advanced dynamic expressions.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>init</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>dither</samp>’</dt>
+<dd><p>Set dithering to reduce the circular banding effects. Default is <code>1</code>
+(enabled).
+</p>
+</dd>
+<dt> ‘<samp>aspect</samp>’</dt>
+<dd><p>Set vignette aspect. This setting allows one to adjust the shape of the vignette.
+Setting this value to the SAR of the input will make a rectangular vignetting
+following the dimensions of the video.
+</p>
+<p>Default is <code>1/1</code>.
+</p></dd>
+</dl>
+
+<a name="Expressions"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Expressions">37.93.1 Expressions</a></h3>
+
+<p>The ‘<samp>alpha</samp>’, ‘<samp>x0</samp>’ and ‘<samp>y0</samp>’ expressions can contain the
+following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>input width and height
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in
+<var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+
+<a name="Examples-59"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-59">37.93.2 Examples</a></h3>
+
+<ul>
+<li>
+Apply simple strong vignetting effect:
+<table><tr><td> </td><td><pre class="example">vignette=PI/4
+</pre></td></tr></table>
+
+</li><li>
+Make a flickering vignetting:
+<table><tr><td> </td><td><pre class="example">vignette='PI/4+random(1)*PI/50':eval=frame
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="w3fdif"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-w3fdif">37.94 w3fdif</a></h2>
+
+<p>Deinterlace the input video ("w3fdif" stands for "Weston 3 Field
+Deinterlacing Filter").
+</p>
+<p>Based on the process described by Martin Weston for BBC R&D, and
+implemented based on the de-interlace algorithm written by Jim
+Easterbrook for BBC R&D, the Weston 3 field deinterlacing filter
+uses filter coefficients calculated by BBC R&D.
+</p>
+<p>There are two sets of filter coefficients, so called "simple":
+and "complex". Which set of filter coefficients is used can
+be set by passing an optional parameter:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter</samp>’</dt>
+<dd><p>Set the interlacing filter coefficients. Accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>Simple filter coefficient set.
+</p></dd>
+<dt> ‘<samp>complex</samp>’</dt>
+<dd><p>More-complex filter coefficient set.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>complex</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Deinterlace all frames,
+</p></dd>
+<dt> ‘<samp>interlaced</samp>’</dt>
+<dd><p>Only deinterlace frames marked as interlaced.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>all</samp>’.
+</p></dd>
+</dl>
+
+<p><a name="yadif"></a>
+</p><a name="yadif-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-yadif-1">37.95 yadif</a></h2>
+
+<p>Deinterlace the input video ("yadif" means "yet another deinterlacing
+filter").
+</p>
+<p>This filter accepts the following options:
+</p>
+
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>The interlacing mode to adopt, accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, send_frame</samp>’</dt>
+<dd><p>output 1 frame for each frame
+</p></dd>
+<dt> ‘<samp>1, send_field</samp>’</dt>
+<dd><p>output 1 frame for each field
+</p></dd>
+<dt> ‘<samp>2, send_frame_nospatial</samp>’</dt>
+<dd><p>like <code>send_frame</code> but skip spatial interlacing check
+</p></dd>
+<dt> ‘<samp>3, send_field_nospatial</samp>’</dt>
+<dd><p>like <code>send_field</code> but skip spatial interlacing check
+</p></dd>
+</dl>
+
+<p>Default value is <code>send_frame</code>.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>The picture field parity assumed for the input interlaced video, accepts one of
+the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+<dt> ‘<samp>-1, auto</samp>’</dt>
+<dd><p>enable automatic detection
+</p></dd>
+</dl>
+
+<p>Default value is <code>auto</code>.
+If interlacing is unknown or decoder does not export this information,
+top field first will be assumed.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following
+values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, all</samp>’</dt>
+<dd><p>deinterlace all frames
+</p></dd>
+<dt> ‘<samp>1, interlaced</samp>’</dt>
+<dd><p>only deinterlace frames marked as interlaced
+</p></dd>
+</dl>
+
+<p>Default value is <code>all</code>.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sources"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Video-Sources">38. Video Sources</a></h1>
+
+<p>Below is a description of the currently available video sources.
+</p>
+<a name="buffer"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-buffer">38.1 buffer</a></h2>
+
+<p>Buffer video frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/vsrc_buffer.h</tt>’.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Specify the size (width and height) of the buffered video frames. For the
+syntax of this option, check the "Video size" section in the ffmpeg-utils
+manual.
+</p>
+</dd>
+<dt> ‘<samp>width</samp>’</dt>
+<dd><p>Input video width.
+</p>
+</dd>
+<dt> ‘<samp>height</samp>’</dt>
+<dd><p>Input video height.
+</p>
+</dd>
+<dt> ‘<samp>pix_fmt</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Specify the timebase assumed by the timestamps of the buffered frames.
+</p>
+</dd>
+<dt> ‘<samp>frame_rate</samp>’</dt>
+<dd><p>Specify the frame rate expected for the video stream.
+</p>
+</dd>
+<dt> ‘<samp>pixel_aspect, sar</samp>’</dt>
+<dd><p>Specify the sample aspect ratio assumed by the video frames.
+</p>
+</dd>
+<dt> ‘<samp>sws_param</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
+</pre></td></tr></table>
+
+<p>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 AVPixelFormat definition in ‘<tt>libavutil/pixfmt.h</tt>’),
+this example corresponds to:
+</p><table><tr><td> </td><td><pre class="example">buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
+</pre></td></tr></table>
+
+<p>Alternatively, the options can be specified as a flat string, but this
+syntax is deprecated:
+</p>
+<p><var>width</var>:<var>height</var>:<var>pix_fmt</var>:<var>time_base.num</var>:<var>time_base.den</var>:<var>pixel_aspect.num</var>:<var>pixel_aspect.den</var>[:<var>sws_param</var>]
+</p>
+<a name="cellauto"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-cellauto">38.2 cellauto</a></h2>
+
+<p>Create a pattern generated by an elementary cellular automaton.
+</p>
+<p>The initial state of the cellular automaton can be defined through the
+‘<samp>filename</samp>’, and ‘<samp>pattern</samp>’ options. If such options are
+not specified an initial state is created randomly.
+</p>
+<p>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 ‘<samp>scroll</samp>’ option.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pattern, p</samp>’</dt>
+<dd><p>Read the initial cellular automaton state, i.e. the starting row, from
+the specified string.
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This option is ignored when a file or a pattern is specified.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the cellular automaton rule, it is a number ranging from 0 to 255.
+Default value is 110.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ or ‘<samp>pattern</samp>’ is specified, the size is set
+by default to the width of the specified initial state row, and the
+height is set to <var>width</var> * PHI.
+</p>
+<p>If ‘<samp>size</samp>’ is set, it must contain the width of the specified
+pattern string, and the specified pattern will be centered in the
+larger row.
+</p>
+<p>If a filename or a pattern string is not specified, the size value
+defaults to "320x518" (used for a randomly generated initial state).
+</p>
+</dd>
+<dt> ‘<samp>scroll</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>start_full, full</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right row edges together.
+This is the default behavior, for disabling set the value to 0.
+</p></dd>
+</dl>
+
+<a name="Examples-20"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-20">38.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Read the initial state from ‘<tt>pattern</tt>’, and specify an output of
+size 200x400.
+<table><tr><td> </td><td><pre class="example">cellauto=f=pattern:s=200x400
+</pre></td></tr></table>
+
+</li><li>
+Generate a random initial row with a width of 200 cells, with a fill
+ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">cellauto=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Create a pattern generated by rule 18 starting by a single alive cell
+centered on an initial row with width 100:
+<table><tr><td> </td><td><pre class="example">cellauto=p=@:s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li><li>
+Specify a more elaborated initial pattern:
+<table><tr><td> </td><td><pre class="example">cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="mandelbrot"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mandelbrot">38.3 mandelbrot</a></h2>
+
+<p>Generate a Mandelbrot set fractal, and progressively zoom towards the
+point specified with <var>start_x</var> and <var>start_y</var>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Set the terminal pts value. Default value is 400.
+</p>
+</dd>
+<dt> ‘<samp>end_scale</samp>’</dt>
+<dd><p>Set the terminal scale value.
+Must be a floating point value. Default value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>inner</samp>’</dt>
+<dd><p>Set the inner coloring mode, that is the algorithm used to draw the
+Mandelbrot fractal internal region.
+</p>
+<p>It shall assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>Set black mode.
+</p></dd>
+<dt> ‘<samp>convergence</samp>’</dt>
+<dd><p>Show time until convergence.
+</p></dd>
+<dt> ‘<samp>mincol</samp>’</dt>
+<dd><p>Set color based on point closest to the origin of the iterations.
+</p></dd>
+<dt> ‘<samp>period</samp>’</dt>
+<dd><p>Set period mode.
+</p></dd>
+</dl>
+
+<p>Default value is <var>mincol</var>.
+</p>
+</dd>
+<dt> ‘<samp>bailout</samp>’</dt>
+<dd><p>Set the bailout value. Default value is 10.0.
+</p>
+</dd>
+<dt> ‘<samp>maxiter</samp>’</dt>
+<dd><p>Set the maximum of iterations performed by the rendering
+algorithm. Default value is 7189.
+</p>
+</dd>
+<dt> ‘<samp>outer</samp>’</dt>
+<dd><p>Set outer coloring mode.
+It shall assume one of following values:
+</p><dl compact="compact">
+<dt> ‘<samp>iteration_count</samp>’</dt>
+<dd><p>Set iteration cound mode.
+</p></dd>
+<dt> ‘<samp>normalized_iteration_count</samp>’</dt>
+<dd><p>set normalized iteration count mode.
+</p></dd>
+</dl>
+<p>Default value is <var>normalized_iteration_count</var>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set frame rate, expressed as number of frames per second. Default
+value is "25".
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set frame size. For the syntax of this option, check the "Video
+size" section in the ffmpeg-utils manual. Default value is "640x480".
+</p>
+</dd>
+<dt> ‘<samp>start_scale</samp>’</dt>
+<dd><p>Set the initial scale value. Default value is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>start_x</samp>’</dt>
+<dd><p>Set the initial x position. Must be a floating point value between
+-100 and 100. Default value is -0.743643887037158704752191506114774.
+</p>
+</dd>
+<dt> ‘<samp>start_y</samp>’</dt>
+<dd><p>Set the initial y position. Must be a floating point value between
+-100 and 100. Default value is -0.131825904205311970493132056385139.
+</p></dd>
+</dl>
+
+<a name="mptestsrc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-mptestsrc">38.4 mptestsrc</a></h2>
+
+<p>Generate various test patterns, as generated by the MPlayer test filter.
+</p>
+<p>The size of the generated video is fixed, and is 256x256.
+This source is useful in particular for testing encoding features.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH:MM:SS[.m...]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>test, t</samp>’</dt>
+<dd>
+<p>Set the number or the name of the test to perform. Supported tests are:
+</p><dl compact="compact">
+<dt> ‘<samp>dc_luma</samp>’</dt>
+<dt> ‘<samp>dc_chroma</samp>’</dt>
+<dt> ‘<samp>freq_luma</samp>’</dt>
+<dt> ‘<samp>freq_chroma</samp>’</dt>
+<dt> ‘<samp>amp_luma</samp>’</dt>
+<dt> ‘<samp>amp_chroma</samp>’</dt>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dt> ‘<samp>mv</samp>’</dt>
+<dt> ‘<samp>ring1</samp>’</dt>
+<dt> ‘<samp>ring2</samp>’</dt>
+<dt> ‘<samp>all</samp>’</dt>
+</dl>
+
+<p>Default value is "all", which will cycle through the list of all tests.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=t=dc_luma
+</pre></td></tr></table>
+
+<p>will generate a "dc_luma" test pattern.
+</p>
+<a name="frei0r_005fsrc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-frei0r_005fsrc">38.5 frei0r_src</a></h2>
+
+<p>Provide a frei0r source.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>The size of the video to generate. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Framerate of the generated video, may be a string of the form
+<var>num</var>/<var>den</var> or a frame rate abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r source to load. For more information regarding frei0r and
+how to set the parameters read the section <a href="#frei0r">frei0r</a> in the description of
+the video filters.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r source.
+</p>
+</dd>
+</dl>
+
+<p>For example, to generate a frei0r partik0l source with size 200x200
+and frame rate 10 which is overlayed on the overlay filter main input:
+</p><table><tr><td> </td><td><pre class="example">frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
+</pre></td></tr></table>
+
+<a name="life"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-life">38.6 life</a></h2>
+
+<p>Generate a life pattern.
+</p>
+<p>This source is based on a generalization of John Conway’s life game.
+</p>
+<p>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.
+</p>
+<p>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 ‘<samp>rule</samp>’ option allows one to specify
+the rule to adopt.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+<p>If this option is not specified, the initial grid is generated
+randomly.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the life rule.
+</p>
+<p>A rule can be specified with a code of the kind "S<var>NS</var>/B<var>NB</var>",
+where <var>NS</var> and <var>NB</var> are sequences of numbers in the range 0-8,
+<var>NS</var> specifies the number of alive neighbor cells which make a
+live cell stay alive, and <var>NB</var> 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.
+</p>
+<p>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 = <code>(12<<9)+9</code> specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ is specified, the size is set by default to the
+same size of the input file. If ‘<samp>size</samp>’ 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.
+</p>
+<p>If a filename is not specified, the size value defaults to "320x240"
+(used for a randomly generated initial grid).
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right grid edges together, and the
+top and bottom edges also. Defaults to 1.
+</p>
+</dd>
+<dt> ‘<samp>mold</samp>’</dt>
+<dd><p>Set cell mold speed. If set, a dead cell will go from ‘<samp>death_color</samp>’ to
+‘<samp>mold_color</samp>’ with a step of ‘<samp>mold</samp>’. ‘<samp>mold</samp>’ can have a
+value from 0 to 255.
+</p>
+</dd>
+<dt> ‘<samp>life_color</samp>’</dt>
+<dd><p>Set the color of living (or new born) cells.
+</p>
+</dd>
+<dt> ‘<samp>death_color</samp>’</dt>
+<dd><p>Set the color of dead cells. If ‘<samp>mold</samp>’ is set, this is the first color
+used to represent a dead cell.
+</p>
+</dd>
+<dt> ‘<samp>mold_color</samp>’</dt>
+<dd><p>Set mold color, for definitely dead and moldy cells.
+</p>
+<p>For the syntax of these 3 color options, check the "Color" section in the
+ffmpeg-utils manual.
+</p></dd>
+</dl>
+
+<a name="Examples-76"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-76">38.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Read a grid from ‘<tt>pattern</tt>’, and center it on a grid of size
+300x300 pixels:
+<table><tr><td> </td><td><pre class="example">life=f=pattern:s=300x300
+</pre></td></tr></table>
+
+</li><li>
+Generate a random grid of size 200x200, with a fill ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">life=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Specify a custom rule for evolving a randomly generated grid:
+<table><tr><td> </td><td><pre class="example">life=rule=S14/B34
+</pre></td></tr></table>
+
+</li><li>
+Full example with slow death effect (mold) using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="color"></a>
+<a name="haldclutsrc"></a>
+<a name="nullsrc"></a>
+<a name="rgbtestsrc"></a>
+<a name="smptebars"></a>
+<a name="smptehdbars"></a>
+<a name="testsrc"></a>
+</p><a name="color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">38.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a></h2>
+
+<p>The <code>color</code> source provides an uniformly colored input.
+</p>
+<p>The <code>haldclutsrc</code> source provides an identity Hald CLUT. See also
+<a href="#haldclut">haldclut</a> filter.
+</p>
+<p>The <code>nullsrc</code> 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.
+</p>
+<p>The <code>rgbtestsrc</code> 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.
+</p>
+<p>The <code>smptebars</code> source generates a color bars pattern, based on
+the SMPTE Engineering Guideline EG 1-1990.
+</p>
+<p>The <code>smptehdbars</code> source generates a color bars pattern, based on
+the SMPTE RP 219-2002.
+</p>
+<p>The <code>testsrc</code> source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+</p>
+<p>The sources accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the source, only available in the <code>color</code>
+source. For the syntax of this option, check the "Color" section in the
+ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>level</samp>’</dt>
+<dd><p>Specify the level of the Hald CLUT, only available in the <code>haldclutsrc</code>
+source. A level of <code>N</code> generates a picture of <code>N*N*N</code> by <code>N*N*N</code>
+pixels to be used as identity matrix for 3D lookup tables. Each component is
+coded on a <code>1/(N*N)</code> scale.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the size of the sourced video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual. The default value is
+"320x240".
+</p>
+<p>This option is not available with the <code>haldclutsrc</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>Set the sample aspect ratio of the sourced video.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>decimals, n</samp>’</dt>
+<dd><p>Set the number of decimals to show in the timestamp, only available in the
+<code>testsrc</code> source.
+</p>
+<p>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.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=duration=5.3:size=qcif:rate=10
+</pre></td></tr></table>
+
+<p>will generate a video with a duration of 5.3 seconds, with size
+176x144 and a frame rate of 10 frames per second.
+</p>
+<p>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.
+</p><table><tr><td> </td><td><pre class="example">color=c=red@0.2:s=qcif:r=10
+</pre></td></tr></table>
+
+<p>If the input content is to be ignored, <code>nullsrc</code> can be used. The
+following command generates noise in the luminance plane by employing
+the <code>geq</code> filter:
+</p><table><tr><td> </td><td><pre class="example">nullsrc=s=256x256, geq=random(1)*255:128:128
+</pre></td></tr></table>
+
+<a name="Commands-5"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands-5">38.7.1 Commands</a></h3>
+
+<p>The <code>color</code> source supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c, color</samp>’</dt>
+<dd><p>Set the color of the created image. Accepts the same syntax of the
+corresponding ‘<samp>color</samp>’ option.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sinks"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Video-Sinks">39. Video Sinks</a></h1>
+
+<p>Below is a description of the currently available video sinks.
+</p>
+<a name="buffersink"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-buffersink">39.1 buffersink</a></h2>
+
+<p>Buffer video frames, and make them available to the end of the filter
+graph.
+</p>
+<p>This sink is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVBufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="nullsink"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-nullsink">39.2 nullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Multimedia-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Multimedia-Filters">40. Multimedia Filters</a></h1>
+
+<p>Below is a description of the currently available multimedia filters.
+</p>
+<a name="avectorscope"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-avectorscope">40.1 avectorscope</a></h2>
+
+<p>Convert input audio to a video output, representing the audio vector
+scope.
+</p>
+<p>The filter is used to measure the difference between channels of stereo
+audio stream. A monoaural signal, consisting of identical left and right
+signal, results in straight vertical line. Any stereo separation is visible
+as a deviation from this line, creating a Lissajous figure.
+If the straight (or deviation from it) but horizontal line appears this
+indicates that the left and right channels are out of phase.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode, m</samp>’</dt>
+<dd><p>Set the vectorscope mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>lissajous</samp>’</dt>
+<dd><p>Lissajous rotated by 45 degrees.
+</p>
+</dd>
+<dt> ‘<samp>lissajous_xy</samp>’</dt>
+<dd><p>Same as above but not rotated.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>lissajous</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size for the output. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual. Default value is <code>400x400</code>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the output frame rate. Default value is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dt> ‘<samp>gc</samp>’</dt>
+<dt> ‘<samp>bc</samp>’</dt>
+<dd><p>Specify the red, green and blue contrast. Default values are <code>40</code>, <code>160</code> and <code>80</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>rf</samp>’</dt>
+<dt> ‘<samp>gf</samp>’</dt>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>Specify the red, green and blue fade. Default values are <code>15</code>, <code>10</code> and <code>5</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set the zoom factor. Default value is <code>1</code>. Allowed range is <code>[1, 10]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-85"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-85">40.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Complete example using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="concat-2"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-concat-2">40.2 concat</a></h2>
+
+<p>Concatenate audio and video streams, joining them together one after the
+other.
+</p>
+<p>The filter works on segments of synchronized video and audio streams. All
+segments must have the same number of streams of each type, and that will
+also be the number of streams at output.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of segments. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Set the number of output video streams, that is also the number of video
+streams in each segment. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Set the number of output audio streams, that is also the number of video
+streams in each segment. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>unsafe</samp>’</dt>
+<dd><p>Activate unsafe mode: do not fail if segments have a different format.
+</p>
+</dd>
+</dl>
+
+<p>The filter has <var>v</var>+<var>a</var> outputs: first <var>v</var> video outputs, then
+<var>a</var> audio outputs.
+</p>
+<p>There are <var>n</var>x(<var>v</var>+<var>a</var>) inputs: first the inputs for the first
+segment, in the same order as the outputs, then the inputs for the second
+segment, etc.
+</p>
+<p>Related streams do not always have exactly the same duration, for various
+reasons including codec frame size or sloppy authoring. For that reason,
+related synchronized streams (e.g. a video and its audio track) should be
+concatenated at once. The concat filter will use the duration of the longest
+stream in each segment (except the last one), and if necessary pad shorter
+audio streams with silence.
+</p>
+<p>For this filter to work correctly, all segments must start at timestamp 0.
+</p>
+<p>All corresponding streams must have the same parameters in all segments; the
+filtering system will automatically select a common pixel format for video
+streams, and a common sample format, sample rate and channel layout for
+audio streams, but other settings, such as resolution, must be converted
+explicitly by the user.
+</p>
+<p>Different frame rates are acceptable but will result in variable frame rate
+at output; be sure to configure the output file to handle it.
+</p>
+<a name="Examples-93"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-93">40.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Concatenate an opening, an episode and an ending, all in bilingual version
+(video in stream 0, audio in streams 1 and 2):
+<table><tr><td> </td><td><pre class="example">ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
+ '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
+ concat=n=3:v=1:a=2 [v] [a1] [a2]' \
+ -map '[v]' -map '[a1]' -map '[a2]' output.mkv
+</pre></td></tr></table>
+
+</li><li>
+Concatenate two parts, handling audio and video separately, using the
+(a)movie sources, and adjusting the resolution:
+<table><tr><td> </td><td><pre class="example">movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
+movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
+[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
+</pre></td></tr></table>
+<p>Note that a desync will happen at the stitch if the audio and video streams
+do not have exactly the same duration in the first file.
+</p>
+</li></ul>
+
+<a name="ebur128"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-ebur128">40.3 ebur128</a></h2>
+
+<p>EBU R128 scanner filter. This filter takes an audio stream as input and outputs
+it unchanged. By default, it logs a message at a frequency of 10Hz with the
+Momentary loudness (identified by <code>M</code>), Short-term loudness (<code>S</code>),
+Integrated loudness (<code>I</code>) and Loudness Range (<code>LRA</code>).
+</p>
+<p>The filter also has a video output (see the <var>video</var> option) with a real
+time graph to observe the loudness evolution. The graphic contains the logged
+message mentioned above, so it is not printed anymore when this option is set,
+unless the verbose logging is set. The main graphing area contains the
+short-term loudness (3 seconds of analysis), and the gauge on the right is for
+the momentary loudness (400 milliseconds).
+</p>
+<p>More information about the Loudness Recommendation EBU R128 on
+<a href="http://tech.ebu.ch/loudness">http://tech.ebu.ch/loudness</a>.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dd><p>Activate the video output. The audio stream is passed unchanged whether this
+option is set or no. The video stream will be the first output stream if
+activated. Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>Set the video size. This option is for video only. For the syntax of this
+option, check the "Video size" section in the ffmpeg-utils manual. Default
+and minimum resolution is <code>640x480</code>.
+</p>
+</dd>
+<dt> ‘<samp>meter</samp>’</dt>
+<dd><p>Set the EBU scale meter. Default is <code>9</code>. Common values are <code>9</code> and
+<code>18</code>, respectively for EBU scale meter +9 and EBU scale meter +18. Any
+other integer value between this range is allowed.
+</p>
+</dd>
+<dt> ‘<samp>metadata</samp>’</dt>
+<dd><p>Set metadata injection. If set to <code>1</code>, the audio input will be segmented
+into 100ms output frames, each of them containing various loudness information
+in metadata. All the metadata keys are prefixed with <code>lavfi.r128.</code>.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>framelog</samp>’</dt>
+<dd><p>Force the frame logging level.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>information logging level
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>verbose logging level
+</p></dd>
+</dl>
+
+<p>By default, the logging level is set to <var>info</var>. If the ‘<samp>video</samp>’ or
+the ‘<samp>metadata</samp>’ options are set, it switches to <var>verbose</var>.
+</p>
+</dd>
+<dt> ‘<samp>peak</samp>’</dt>
+<dd><p>Set peak mode(s).
+</p>
+<p>Available modes can be cumulated (the option is a <code>flag</code> type). Possible
+values are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Disable any peak mode (default).
+</p></dd>
+<dt> ‘<samp>sample</samp>’</dt>
+<dd><p>Enable sample-peak mode.
+</p>
+<p>Simple peak mode looking for the higher sample value. It logs a message
+for sample-peak (identified by <code>SPK</code>).
+</p></dd>
+<dt> ‘<samp>true</samp>’</dt>
+<dd><p>Enable true-peak mode.
+</p>
+<p>If enabled, the peak lookup is done on an over-sampled version of the input
+stream for better peak accuracy. It logs a message for true-peak.
+(identified by <code>TPK</code>) and true-peak per frame (identified by <code>FTPK</code>).
+This mode requires a build with <code>libswresample</code>.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Examples-74"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-74">40.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Real-time graph using <code>ffplay</code>, with a EBU scale meter +18:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
+</pre></td></tr></table>
+
+</li><li>
+Run an analysis with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="interleave_002c-ainterleave"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-interleave_002c-ainterleave">40.4 interleave, ainterleave</a></h2>
+
+<p>Temporally interleave frames from several inputs.
+</p>
+<p><code>interleave</code> works with video inputs, <code>ainterleave</code> with audio.
+</p>
+<p>These filters read frames from several inputs and send the oldest
+queued frame to the output.
+</p>
+<p>Input streams must have a well defined, monotonically increasing frame
+timestamp values.
+</p>
+<p>In order to submit one frame to output, these filters need to enqueue
+at least one frame for each input, so they cannot work in case one
+input is not yet terminated and will not receive incoming frames.
+</p>
+<p>For example consider the case when one input is a <code>select</code> filter
+which always drop input frames. The <code>interleave</code> filter will keep
+reading from that input, but it will never be able to send new frames
+to output until the input will send an end-of-stream signal.
+</p>
+<p>Also, depending on inputs synchronization, the filters will drop
+frames in case one input receives more frames than the other ones, and
+the queue is already filled.
+</p>
+<p>These filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_inputs, n</samp>’</dt>
+<dd><p>Set the number of different inputs, it is 2 by default.
+</p></dd>
+</dl>
+
+<a name="Examples-38"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-38">40.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Interleave frames belonging to different streams using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
+</pre></td></tr></table>
+
+</li><li>
+Add flickering blur effect:
+<table><tr><td> </td><td><pre class="example">select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perms_002c-aperms"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-perms_002c-aperms">40.5 perms, aperms</a></h2>
+
+<p>Set read/write permissions for the output frames.
+</p>
+<p>These filters are mainly aimed at developers to test direct path in the
+following filter in the filtergraph.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Select the permissions mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing. This is the default.
+</p></dd>
+<dt> ‘<samp>ro</samp>’</dt>
+<dd><p>Set all the output frames read-only.
+</p></dd>
+<dt> ‘<samp>rw</samp>’</dt>
+<dd><p>Set all the output frames directly writable.
+</p></dd>
+<dt> ‘<samp>toggle</samp>’</dt>
+<dd><p>Make the frame read-only if writable, and writable if read-only.
+</p></dd>
+<dt> ‘<samp>random</samp>’</dt>
+<dd><p>Set each output frame read-only or writable randomly.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seed</samp>’</dt>
+<dd><p>Set the seed for the <var>random</var> mode, must be an integer included between
+<code>0</code> and <code>UINT32_MAX</code>. If not specified, or if explicitly set to
+<code>-1</code>, the filter will try to use a good random seed on a best effort
+basis.
+</p></dd>
+</dl>
+
+<p>Note: in case of auto-inserted filter between the permission filter and the
+following one, the permission might not be received as expected in that
+following filter. Inserting a <a href="#format">format</a> or <a href="#aformat">aformat</a> filter before the
+perms/aperms filter can avoid this problem.
+</p>
+<a name="select_002c-aselect"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-select_002c-aselect">40.6 select, aselect</a></h2>
+
+<p>Select frames to pass in output.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set expression, which is evaluated for each input frame.
+</p>
+<p>If the expression is evaluated to zero, the frame is discarded.
+</p>
+<p>If the evaluation result is negative or NaN, the frame is sent to the
+first output; otherwise it is sent to the output with index
+<code>ceil(val)-1</code>, assuming that the input index starts from 0.
+</p>
+<p>For example a value of <code>1.2</code> corresponds to the output with index
+<code>ceil(1.2)-1 = 2-1 = 1</code>, that is the second output.
+</p>
+</dd>
+<dt> ‘<samp>outputs, n</samp>’</dt>
+<dd><p>Set the number of outputs. The output to which to send the selected
+frame is based on the result of the evaluation. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The expression can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the sequential number of the filtered frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>selected_n</samp>’</dt>
+<dd><p>the sequential number of the selected frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_n</samp>’</dt>
+<dd><p>the sequential number of the last selected frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in <var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_pts</samp>’</dt>
+<dd><p>the PTS of the previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_pts</samp>’</dt>
+<dd><p>the PTS of the last previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_t</samp>’</dt>
+<dd><p>the PTS of the last previously selected video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>the PTS of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_t</samp>’</dt>
+<dd><p>the time of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>pict_type <em>(video only)</em></samp>’</dt>
+<dd><p>the type of the filtered frame, can assume one of the following
+values:
+</p><dl compact="compact">
+<dt> ‘<samp>I</samp>’</dt>
+<dt> ‘<samp>P</samp>’</dt>
+<dt> ‘<samp>B</samp>’</dt>
+<dt> ‘<samp>S</samp>’</dt>
+<dt> ‘<samp>SI</samp>’</dt>
+<dt> ‘<samp>SP</samp>’</dt>
+<dt> ‘<samp>BI</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>interlace_type <em>(video only)</em></samp>’</dt>
+<dd><p>the frame interlace type, can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>PROGRESSIVE</samp>’</dt>
+<dd><p>the frame is progressive (not interlaced)
+</p></dd>
+<dt> ‘<samp>TOPFIRST</samp>’</dt>
+<dd><p>the frame is top-field-first
+</p></dd>
+<dt> ‘<samp>BOTTOMFIRST</samp>’</dt>
+<dd><p>the frame is bottom-field-first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>consumed_sample_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of selected samples before the current frame
+</p>
+</dd>
+<dt> ‘<samp>samples_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of samples in the current frame
+</p>
+</dd>
+<dt> ‘<samp>sample_rate <em>(audio only)</em></samp>’</dt>
+<dd><p>the input sample rate
+</p>
+</dd>
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>1 if the filtered frame is a key-frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the filtered frame, -1 if the information
+is not available (e.g. for synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>scene <em>(video only)</em></samp>’</dt>
+<dd><p>value between 0 and 1 to indicate a new scene; a low value reflects a low
+probability for the current frame to introduce a new scene, while a higher
+value means the current frame is more likely to be one (see the example below)
+</p>
+</dd>
+</dl>
+
+<p>The default value of the select expression is "1".
+</p>
+<a name="Examples-3"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-3">40.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Select all frames in input:
+<table><tr><td> </td><td><pre class="example">select
+</pre></td></tr></table>
+
+<p>The example above is the same as:
+</p><table><tr><td> </td><td><pre class="example">select=1
+</pre></td></tr></table>
+
+</li><li>
+Skip all frames:
+<table><tr><td> </td><td><pre class="example">select=0
+</pre></td></tr></table>
+
+</li><li>
+Select only I-frames:
+<table><tr><td> </td><td><pre class="example">select='eq(pict_type\,I)'
+</pre></td></tr></table>
+
+</li><li>
+Select one frame every 100:
+<table><tr><td> </td><td><pre class="example">select='not(mod(n\,100))'
+</pre></td></tr></table>
+
+</li><li>
+Select only frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)
+</pre></td></tr></table>
+
+</li><li>
+Select only I frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)*eq(pict_type\,I)
+</pre></td></tr></table>
+
+</li><li>
+Select frames with a minimum distance of 10 seconds:
+<table><tr><td> </td><td><pre class="example">select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
+</pre></td></tr></table>
+
+</li><li>
+Use aselect to select only audio frames with samples number > 100:
+<table><tr><td> </td><td><pre class="example">aselect='gt(samples_n\,100)'
+</pre></td></tr></table>
+
+</li><li>
+Create a mosaic of the first scenes:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
+</pre></td></tr></table>
+
+<p>Comparing <var>scene</var> against a value between 0.3 and 0.5 is generally a sane
+choice.
+</p>
+</li><li>
+Send even and odd frames to separate outputs, and compose them:
+<table><tr><td> </td><td><pre class="example">select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sendcmd_002c-asendcmd"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-sendcmd_002c-asendcmd">40.7 sendcmd, asendcmd</a></h2>
+
+<p>Send commands to filters in the filtergraph.
+</p>
+<p>These filters read commands to be sent to other filters in the
+filtergraph.
+</p>
+<p><code>sendcmd</code> must be inserted between two video filters,
+<code>asendcmd</code> must be inserted between two audio filters, but apart
+from that they act the same way.
+</p>
+<p>The specification of commands can be provided in the filter arguments
+with the <var>commands</var> option, or in a file specified by the
+<var>filename</var> option.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>commands, c</samp>’</dt>
+<dd><p>Set the commands to be read and sent to the other filters.
+</p></dd>
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the commands to be read and sent to the other
+filters.
+</p></dd>
+</dl>
+
+<a name="Commands-syntax"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Commands-syntax">40.7.1 Commands syntax</a></h3>
+
+<p>A commands description consists of a sequence of interval
+specifications, comprising a list of commands to be executed when a
+particular event related to that interval occurs. The occurring event
+is typically the current frame time entering or leaving a given time
+interval.
+</p>
+<p>An interval is specified by the following syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>START</var>[-<var>END</var>] <var>COMMANDS</var>;
+</pre></td></tr></table>
+
+<p>The time interval is specified by the <var>START</var> and <var>END</var> times.
+<var>END</var> is optional and defaults to the maximum time.
+</p>
+<p>The current frame time is considered within the specified interval if
+it is included in the interval [<var>START</var>, <var>END</var>), that is when
+the time is greater or equal to <var>START</var> and is lesser than
+<var>END</var>.
+</p>
+<p><var>COMMANDS</var> consists of a sequence of one or more command
+specifications, separated by ",", relating to that interval. The
+syntax of a command specification is given by:
+</p><table><tr><td> </td><td><pre class="example">[<var>FLAGS</var>] <var>TARGET</var> <var>COMMAND</var> <var>ARG</var>
+</pre></td></tr></table>
+
+<p><var>FLAGS</var> is optional and specifies the type of events relating to
+the time interval which enable sending the specified command, and must
+be a non-null sequence of identifier flags separated by "+" or "|" and
+enclosed between "[" and "]".
+</p>
+<p>The following flags are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>enter</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp enters the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was not in the given interval, and the
+current is.
+</p>
+</dd>
+<dt> ‘<samp>leave</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp leaves the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was in the given interval, and the
+current is not.
+</p></dd>
+</dl>
+
+<p>If <var>FLAGS</var> is not specified, a default value of <code>[enter]</code> is
+assumed.
+</p>
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional list of argument for
+the given <var>COMMAND</var>.
+</p>
+<p>Between one interval specification and another, whitespaces, or
+sequences of characters starting with <code>#</code> until the end of line,
+are ignored and can be used to annotate comments.
+</p>
+<p>A simplified BNF description of the commands specification syntax
+follows:
+</p><table><tr><td> </td><td><pre class="example"><var>COMMAND_FLAG</var> ::= "enter" | "leave"
+<var>COMMAND_FLAGS</var> ::= <var>COMMAND_FLAG</var> [(+|"|")<var>COMMAND_FLAG</var>]
+<var>COMMAND</var> ::= ["[" <var>COMMAND_FLAGS</var> "]"] <var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+<var>COMMANDS</var> ::= <var>COMMAND</var> [,<var>COMMANDS</var>]
+<var>INTERVAL</var> ::= <var>START</var>[-<var>END</var>] <var>COMMANDS</var>
+<var>INTERVALS</var> ::= <var>INTERVAL</var>[;<var>INTERVALS</var>]
+</pre></td></tr></table>
+
+<a name="Examples-19"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-19">40.7.2 Examples</a></h3>
+
+<ul>
+<li>
+Specify audio tempo change at second 4:
+<table><tr><td> </td><td><pre class="example">asendcmd=c='4.0 atempo tempo 1.5',atempo
+</pre></td></tr></table>
+
+</li><li>
+Specify a list of drawtext and hue commands in a file.
+<table><tr><td> </td><td><pre class="example"># show text in the interval 5-10
+5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
+
+# desaturate the image in the interval 15-20
+15.0-20.0 [enter] hue s 0,
+ [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
+ [leave] hue s 1,
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
+
+# apply an exponential saturation fade-out effect, starting from time 25
+25 [enter] hue s exp(25-t)
+</pre></td></tr></table>
+
+<p>A filtergraph allowing to read and process the above command list
+stored in a file ‘<tt>test.cmd</tt>’, can be specified with:
+</p><table><tr><td> </td><td><pre class="example">sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="setpts"></a>
+</p><a name="setpts_002c-asetpts"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-setpts_002c-asetpts">40.8 setpts, asetpts</a></h2>
+
+<p>Change the PTS (presentation timestamp) of the input frames.
+</p>
+<p><code>setpts</code> works on video frames, <code>asetpts</code> on audio frames.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr</samp>’</dt>
+<dd><p>The expression which is evaluated for each frame to construct its timestamp.
+</p>
+</dd>
+</dl>
+
+<p>The expression is evaluated through the eval API and can contain the following
+constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>FRAME_RATE</samp>’</dt>
+<dd><p>frame rate, only defined for constant frame-rate video
+</p>
+</dd>
+<dt> ‘<samp>PTS</samp>’</dt>
+<dd><p>the presentation timestamp in input
+</p>
+</dd>
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>the count of the input frame for video or the number of consumed samples,
+not including the current frame for audio, starting from 0.
+</p>
+</dd>
+<dt> ‘<samp>NB_CONSUMED_SAMPLES</samp>’</dt>
+<dd><p>the number of consumed samples, not including the current frame (only
+audio)
+</p>
+</dd>
+<dt> ‘<samp>NB_SAMPLES, S</samp>’</dt>
+<dd><p>the number of samples in the current frame (only audio)
+</p>
+</dd>
+<dt> ‘<samp>SAMPLE_RATE, SR</samp>’</dt>
+<dd><p>audio sample rate
+</p>
+</dd>
+<dt> ‘<samp>STARTPTS</samp>’</dt>
+<dd><p>the PTS of the first frame
+</p>
+</dd>
+<dt> ‘<samp>STARTT</samp>’</dt>
+<dd><p>the time in seconds of the first frame
+</p>
+</dd>
+<dt> ‘<samp>INTERLACED</samp>’</dt>
+<dd><p>tell if the current frame is interlaced
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>the time in seconds of the current frame
+</p>
+</dd>
+<dt> ‘<samp>POS</samp>’</dt>
+<dd><p>original position in the file of the frame, or undefined if undefined
+for the current frame
+</p>
+</dd>
+<dt> ‘<samp>PREV_INPTS</samp>’</dt>
+<dd><p>previous input PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_INT</samp>’</dt>
+<dd><p>previous input time in seconds
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTPTS</samp>’</dt>
+<dd><p>previous output PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTT</samp>’</dt>
+<dd><p>previous output time in seconds
+</p>
+</dd>
+<dt> ‘<samp>RTCTIME</samp>’</dt>
+<dd><p>wallclock (RTC) time in microseconds. This is deprecated, use time(0)
+instead.
+</p>
+</dd>
+<dt> ‘<samp>RTCSTART</samp>’</dt>
+<dd><p>wallclock (RTC) time at the start of the movie in microseconds
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+</dl>
+
+<a name="Examples-4"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-4">40.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Start counting PTS from zero
+<table><tr><td> </td><td><pre class="example">setpts=PTS-STARTPTS
+</pre></td></tr></table>
+
+</li><li>
+Apply fast motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=0.5*PTS
+</pre></td></tr></table>
+
+</li><li>
+Apply slow motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=2.0*PTS
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate of 25 frames per second:
+<table><tr><td> </td><td><pre class="example">setpts=N/(25*TB)
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate 25 fps with some jitter:
+<table><tr><td> </td><td><pre class="example">setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
+</pre></td></tr></table>
+
+</li><li>
+Apply an offset of 10 seconds to the input PTS:
+<table><tr><td> </td><td><pre class="example">setpts=PTS+10/TB
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps from a "live source" and rebase onto the current timebase:
+<table><tr><td> </td><td><pre class="example">setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps by counting samples:
+<table><tr><td> </td><td><pre class="example">asetpts=N/SR/TB
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="settb_002c-asettb"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-settb_002c-asettb">40.9 settb, asettb</a></h2>
+
+<p>Set the timebase to use for the output frames timestamps.
+It is mainly useful for testing timebase configuration.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, tb</samp>’</dt>
+<dd><p>The expression which is evaluated into the output timebase.
+</p>
+</dd>
+</dl>
+
+<p>The value for ‘<samp>tb</samp>’ is an arithmetic expression representing a
+rational. The expression can contain the constants "AVTB" (the default
+timebase), "intb" (the input timebase) and "sr" (the sample rate,
+audio only). Default value is "intb".
+</p>
+<a name="Examples-45"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-45">40.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the timebase to 1/25:
+<table><tr><td> </td><td><pre class="example">settb=expr=1/25
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1/10:
+<table><tr><td> </td><td><pre class="example">settb=expr=0.1
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1001/1000:
+<table><tr><td> </td><td><pre class="example">settb=1+0.001
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 2*intb:
+<table><tr><td> </td><td><pre class="example">settb=2*intb
+</pre></td></tr></table>
+
+</li><li>
+Set the default timebase value:
+<table><tr><td> </td><td><pre class="example">settb=AVTB
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showspectrum"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-showspectrum">40.10 showspectrum</a></h2>
+
+<p>Convert input audio to a video output, representing the audio frequency
+spectrum.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value is
+<code>640x512</code>.
+</p>
+</dd>
+<dt> ‘<samp>slide</samp>’</dt>
+<dd><p>Specify if the spectrum should slide along the window. Default value is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify display mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>combined</samp>’</dt>
+<dd><p>all channels are displayed in the same row
+</p></dd>
+<dt> ‘<samp>separate</samp>’</dt>
+<dd><p>all channels are displayed in separate rows
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>combined</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify display color mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>each channel is displayed in a separate color
+</p></dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>each channel is is displayed using the same color scheme
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>channel</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>scale</samp>’</dt>
+<dd><p>Specify scale used for calculating intensity color values.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>lin</samp>’</dt>
+<dd><p>linear
+</p></dd>
+<dt> ‘<samp>sqrt</samp>’</dt>
+<dd><p>square root, default
+</p></dd>
+<dt> ‘<samp>cbrt</samp>’</dt>
+<dd><p>cubic root
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>logarithmic
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>sqrt</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>saturation</samp>’</dt>
+<dd><p>Set saturation modifier for displayed colors. Negative values provide
+alternative color scheme. <code>0</code> is no saturation at all.
+Saturation must be in [-10.0, 10.0] range.
+Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>win_func</samp>’</dt>
+<dd><p>Set window function.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No samples pre-processing (do not expect this to be faster)
+</p></dd>
+<dt> ‘<samp>hann</samp>’</dt>
+<dd><p>Hann window
+</p></dd>
+<dt> ‘<samp>hamming</samp>’</dt>
+<dd><p>Hamming window
+</p></dd>
+<dt> ‘<samp>blackman</samp>’</dt>
+<dd><p>Blackman window
+</p></dd>
+</dl>
+
+<p>Default value is <code>hann</code>.
+</p></dd>
+</dl>
+
+<p>The usage is very similar to the showwaves filter; see the examples in that
+section.
+</p>
+<a name="Examples-83"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-83">40.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Large window with logarithmic color scaling:
+<table><tr><td> </td><td><pre class="example">showspectrum=s=1280x480:scale=log
+</pre></td></tr></table>
+
+</li><li>
+Complete example for a colored and sliding spectrum per channel using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showwaves"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-showwaves">40.11 showwaves</a></h2>
+
+<p>Convert input audio to a video output, representing the samples waves.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value
+is "600x240".
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set display mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>point</samp>’</dt>
+<dd><p>Draw a point for each sample.
+</p>
+</dd>
+<dt> ‘<samp>line</samp>’</dt>
+<dd><p>Draw a vertical line for each sample.
+</p></dd>
+</dl>
+
+<p>Default value is <code>point</code>.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of samples which are printed on the same column. A
+larger value will decrease the frame rate. Must be a positive
+integer. This option can be set only if the value for <var>rate</var>
+is not explicitly specified.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the (approximate) output frame rate. This is done by setting the
+option <var>n</var>. Default value is "25".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-25"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-25">40.11.1 Examples</a></h3>
+
+<ul>
+<li>
+Output the input file audio and the corresponding video representation
+at the same time:
+<table><tr><td> </td><td><pre class="example">amovie=a.mp3,asplit[out0],showwaves[out1]
+</pre></td></tr></table>
+
+</li><li>
+Create a synthetic signal and show it with showwaves, forcing a
+frame rate of 30 frames per second:
+<table><tr><td> </td><td><pre class="example">aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
+</pre></td></tr></table>
+</li></ul>
+
+<a name="split_002c-asplit"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-split_002c-asplit">40.12 split, asplit</a></h2>
+
+<p>Split input into several identical outputs.
+</p>
+<p><code>asplit</code> works with audio input, <code>split</code> with video.
+</p>
+<p>The filter accepts a single parameter which specifies the number of outputs. If
+unspecified, it defaults to 2.
+</p>
+<a name="Examples-7"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-7">40.12.1 Examples</a></h3>
+
+<ul>
+<li>
+Create two separate outputs from the same input:
+<table><tr><td> </td><td><pre class="example">[in] split [out0][out1]
+</pre></td></tr></table>
+
+</li><li>
+To create 3 or more outputs, you need to specify the number of
+outputs, like in:
+<table><tr><td> </td><td><pre class="example">[in] asplit=3 [out0][out1][out2]
+</pre></td></tr></table>
+
+</li><li>
+Create two separate outputs from the same input, one cropped and
+one padded:
+<table><tr><td> </td><td><pre class="example">[in] split [splitout1][splitout2];
+[splitout1] crop=100:100:0:0 [cropout];
+[splitout2] pad=200:200:100:100 [padout];
+</pre></td></tr></table>
+
+</li><li>
+Create 5 copies of the input audio with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
+</pre></td></tr></table>
+</li></ul>
+
+<a name="zmq_002c-azmq"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-zmq_002c-azmq">40.13 zmq, azmq</a></h2>
+
+<p>Receive commands sent through a libzmq client, and forward them to
+filters in the filtergraph.
+</p>
+<p><code>zmq</code> and <code>azmq</code> work as a pass-through filters. <code>zmq</code>
+must be inserted between two video filters, <code>azmq</code> between two
+audio filters.
+</p>
+<p>To enable these filters you need to install the libzmq library and
+headers and configure FFmpeg with <code>--enable-libzmq</code>.
+</p>
+<p>For more information about libzmq see:
+<a href="http://www.zeromq.org/">http://www.zeromq.org/</a>
+</p>
+<p>The <code>zmq</code> and <code>azmq</code> filters work as a libzmq server, which
+receives messages sent through a network interface defined by the
+‘<samp>bind_address</samp>’ option.
+</p>
+<p>The received message must be in the form:
+</p><table><tr><td> </td><td><pre class="example"><var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+</pre></td></tr></table>
+
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional argument list for the
+given <var>COMMAND</var>.
+</p>
+<p>Upon reception, the message is processed and the corresponding command
+is injected into the filtergraph. Depending on the result, the filter
+will send a reply to the client, adopting the format:
+</p><table><tr><td> </td><td><pre class="example"><var>ERROR_CODE</var> <var>ERROR_REASON</var>
+<var>MESSAGE</var>
+</pre></td></tr></table>
+
+<p><var>MESSAGE</var> is optional.
+</p>
+<a name="Examples-58"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-58">40.13.1 Examples</a></h3>
+
+<p>Look at ‘<tt>tools/zmqsend</tt>’ for an example of a zmq client which can
+be used to send commands processed by these filters.
+</p>
+<p>Consider the following filtergraph generated by <code>ffplay</code>
+</p><table><tr><td> </td><td><pre class="example">ffplay -dumpgraph 1 -f lavfi "
+color=s=100x100:c=red [l];
+color=s=100x100:c=blue [r];
+nullsrc=s=200x100, zmq [bg];
+[bg][l] overlay [bg+l];
+[bg+l][r] overlay=x=100 "
+</pre></td></tr></table>
+
+<p>To change the color of the left side of the video, the following
+command can be used:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_0 c yellow | tools/zmqsend
+</pre></td></tr></table>
+
+<p>To change the right side:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_1 c pink | tools/zmqsend
+</pre></td></tr></table>
+
+
+<a name="Multimedia-Sources"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Multimedia-Sources">41. Multimedia Sources</a></h1>
+
+<p>Below is a description of the currently available multimedia sources.
+</p>
+<a name="amovie"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-amovie">41.1 amovie</a></h2>
+
+<p>This is the same as <a href="#movie">movie</a> source, except it selects an audio
+stream by default.
+</p>
+<p><a name="movie"></a>
+</p><a name="movie-1"></a>
+<h2 class="section"><a href="ffmpeg-all.html#toc-movie-1">41.2 movie</a></h2>
+
+<p>Read audio and/or video stream(s) from a movie container.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>The name of the resource to read (not necessarily a file but also a device or a
+stream accessed through some protocol).
+</p>
+</dd>
+<dt> ‘<samp>format_name, f</samp>’</dt>
+<dd><p>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 <var>movie_name</var> or by probing.
+</p>
+</dd>
+<dt> ‘<samp>seek_point, sp</samp>’</dt>
+<dd><p>Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+<code>av_strtod</code> so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+</p>
+</dd>
+<dt> ‘<samp>streams, s</samp>’</dt>
+<dd><p>Specifies the streams to read. Several streams can be specified,
+separated by "+". The source will then have as many outputs, in the
+same order. The syntax is explained in the “Stream specifiers”
+section in the ffmpeg manual. Two special names, "dv" and "da" specify
+respectively the default (best suited) video and audio stream. Default
+is "dv", or "da" if the filter is called as "amovie".
+</p>
+</dd>
+<dt> ‘<samp>stream_index, si</samp>’</dt>
+<dd><p>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". Deprecated. If the filter is called "amovie", it will select
+audio instead of video.
+</p>
+</dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Specifies how many times to read the stream in sequence.
+If the value is less than 1, the stream will be read again and again.
+Default value is "1".
+</p>
+<p>Note that when the movie is looped the source timestamps are not
+changed, so it will generate non monotonically increasing timestamps.
+</p></dd>
+</dl>
+
+<p>This filter allows one to overlay a second video on top of main input of
+a filtergraph as shown in this graph:
+</p><table><tr><td> </td><td><pre class="example">input -----------> deltapts0 --> overlay --> output
+ ^
+ |
+movie --> scale--> deltapts1 -------+
+</pre></td></tr></table>
+
+<a name="Examples-82"></a>
+<h3 class="subsection"><a href="ffmpeg-all.html#toc-Examples-82">41.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Skip 3.2 seconds from the start of the avi file in.avi, and overlay it
+on top of the input labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read from a video4linux2 device, and overlay it on top of the input
+labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read the first video stream and the audio stream with id 0x81 from
+dvd.vob; the video is connected to the pad named "video" and the audio is
+connected to the pad named "audio":
+<table><tr><td> </td><td><pre class="example">movie=dvd.vob:s=v:0+#0x81 [video] [audio]
+</pre></td></tr></table>
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-See-Also">42. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>
+<a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
+<a href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-all.html#toc-Authors">43. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Bitstream Filters </title>
+
+<meta name="description" content="FFmpeg Bitstream Filters Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Bitstream Filters ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Bitstream Filters Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Bitstream-Filters" href="#Bitstream-Filters">2. Bitstream Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aac_005fadtstoasc" href="#aac_005fadtstoasc">2.1 aac_adtstoasc</a></li>
+ <li><a name="toc-chomp" href="#chomp">2.2 chomp</a></li>
+ <li><a name="toc-dump_005fextra" href="#dump_005fextra">2.3 dump_extra</a></li>
+ <li><a name="toc-h264_005fmp4toannexb" href="#h264_005fmp4toannexb">2.4 h264_mp4toannexb</a></li>
+ <li><a name="toc-imx_005fdump_005fheader" href="#imx_005fdump_005fheader">2.5 imx_dump_header</a></li>
+ <li><a name="toc-mjpeg2jpeg" href="#mjpeg2jpeg">2.6 mjpeg2jpeg</a></li>
+ <li><a name="toc-mjpega_005fdump_005fheader" href="#mjpega_005fdump_005fheader">2.7 mjpega_dump_header</a></li>
+ <li><a name="toc-movsub" href="#movsub">2.8 movsub</a></li>
+ <li><a name="toc-mp3_005fheader_005fdecompress" href="#mp3_005fheader_005fdecompress">2.9 mp3_header_decompress</a></li>
+ <li><a name="toc-noise" href="#noise">2.10 noise</a></li>
+ <li><a name="toc-remove_005fextra" href="#remove_005fextra">2.11 remove_extra</a></li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">3. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">4. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-bitstream-filters.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes the bitstream filters provided by the
+libavcodec library.
+</p>
+<p>A bitstream filter operates on the encoded stream data, and performs
+bitstream level modifications without performing decoding.
+</p>
+
+<a name="Bitstream-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-bitstream-filters.html#toc-Bitstream-Filters">2. Bitstream Filters</a></h1>
+
+<p>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 <code>--list-bsfs</code>.
+</p>
+<p>You can disable all the bitstream filters using the configure option
+<code>--disable-bsfs</code>, and selectively enable any bitstream filter using
+the option <code>--enable-bsf=BSF</code>, or you can disable a particular
+bitstream filter using the option <code>--disable-bsf=BSF</code>.
+</p>
+<p>The option <code>-bsfs</code> of the ff* tools will display the list of
+all the supported bitstream filters included in your build.
+</p>
+<p>Below is a description of the currently available bitstream filters.
+</p>
+<a name="aac_005fadtstoasc"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-aac_005fadtstoasc">2.1 aac_adtstoasc</a></h2>
+
+<p>Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration
+bitstream filter.
+</p>
+<p>This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
+ADTS header and removes the ADTS header.
+</p>
+<p>This is required for example when copying an AAC stream from a raw
+ADTS AAC container to a FLV or a MOV/MP4 file.
+</p>
+<a name="chomp"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-chomp">2.2 chomp</a></h2>
+
+<p>Remove zero padding at the end of a packet.
+</p>
+<a name="dump_005fextra"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-dump_005fextra">2.3 dump_extra</a></h2>
+
+<p>Add extradata to the beginning of the filtered packets.
+</p>
+<p>The additional argument specifies which packets should be filtered.
+It accepts the values:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>add extradata to all key packets, but only if <var>local_header</var> is
+set in the ‘<samp>flags2</samp>’ codec context field
+</p>
+</dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>add extradata to all key packets
+</p>
+</dd>
+<dt> ‘<samp>e</samp>’</dt>
+<dd><p>add extradata to all packets
+</p></dd>
+</dl>
+
+<p>If not specified it is assumed ‘<samp>k</samp>’.
+</p>
+<p>For example the following <code>ffmpeg</code> command forces a global
+header (thus disabling individual packet headers) in the H.264 packets
+generated by the <code>libx264</code> encoder, but corrects them by adding
+the header stored in extradata to the key packets:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
+</pre></td></tr></table>
+
+<a name="h264_005fmp4toannexb"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-h264_005fmp4toannexb">2.4 h264_mp4toannexb</a></h2>
+
+<p>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).
+</p>
+<p>This is required by some streaming formats, typically the MPEG-2
+transport stream format ("mpegts").
+</p>
+<p>For example to remux an MP4 file containing an H.264 stream to mpegts
+format with <code>ffmpeg</code>, you can use the command:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
+</pre></td></tr></table>
+
+<a name="imx_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-imx_005fdump_005fheader">2.5 imx_dump_header</a></h2>
+
+<a name="mjpeg2jpeg"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-mjpeg2jpeg">2.6 mjpeg2jpeg</a></h2>
+
+<p>Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
+</p>
+<p>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
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
+</pre></td></tr></table>
+
+<p>Unfortunately, these chunks are incomplete JPEG images, because
+they lack the DHT segment required for decoding. Quoting from
+<a href="http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml">http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml</a>:
+</p>
+<p>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."
+</p>
+<p>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.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
+exiftran -i -9 frame*.jpg
+ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
+</pre></td></tr></table>
+
+<a name="mjpega_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-mjpega_005fdump_005fheader">2.7 mjpega_dump_header</a></h2>
+
+<a name="movsub"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-movsub">2.8 movsub</a></h2>
+
+<a name="mp3_005fheader_005fdecompress"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-mp3_005fheader_005fdecompress">2.9 mp3_header_decompress</a></h2>
+
+<a name="noise"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-noise">2.10 noise</a></h2>
+
+<a name="remove_005fextra"></a>
+<h2 class="section"><a href="ffmpeg-bitstream-filters.html#toc-remove_005fextra">2.11 remove_extra</a></h2>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-bitstream-filters.html#toc-See-Also">3. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavcodec.html">libavcodec</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-bitstream-filters.html#toc-Authors">4. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Codecs </title>
+
+<meta name="description" content="FFmpeg Codecs Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Codecs ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Codecs Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Codec-Options" href="#Codec-Options">2. Codec Options</a></li>
+ <li><a name="toc-Decoders" href="#Decoders">3. Decoders</a></li>
+ <li><a name="toc-Video-Decoders" href="#Video-Decoders">4. Video Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-rawvideo" href="#rawvideo">4.1 rawvideo</a>
+ <ul class="toc">
+ <li><a name="toc-Options-2" href="#Options-2">4.1.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Decoders" href="#Audio-Decoders">5. Audio Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-ac3" href="#ac3">5.1 ac3</a>
+ <ul class="toc">
+ <li><a name="toc-AC_002d3-Decoder-Options" href="#AC_002d3-Decoder-Options">5.1.1 AC-3 Decoder Options</a></li>
+ </ul></li>
+ <li><a name="toc-ffwavesynth" href="#ffwavesynth">5.2 ffwavesynth</a></li>
+ <li><a name="toc-libcelt" href="#libcelt">5.3 libcelt</a></li>
+ <li><a name="toc-libgsm" href="#libgsm">5.4 libgsm</a></li>
+ <li><a name="toc-libilbc" href="#libilbc">5.5 libilbc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-16" href="#Options-16">5.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopencore_002damrnb" href="#libopencore_002damrnb">5.6 libopencore-amrnb</a></li>
+ <li><a name="toc-libopencore_002damrwb" href="#libopencore_002damrwb">5.7 libopencore-amrwb</a></li>
+ <li><a name="toc-libopus-1" href="#libopus-1">5.8 libopus</a></li>
+ </ul></li>
+ <li><a name="toc-Subtitles-Decoders" href="#Subtitles-Decoders">6. Subtitles Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-dvdsub" href="#dvdsub">6.1 dvdsub</a>
+ <ul class="toc">
+ <li><a name="toc-Options-14" href="#Options-14">6.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libzvbi_002dteletext" href="#libzvbi_002dteletext">6.2 libzvbi-teletext</a>
+ <ul class="toc">
+ <li><a name="toc-Options-18" href="#Options-18">6.2.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Encoders" href="#Encoders">7. Encoders</a></li>
+ <li><a name="toc-Audio-Encoders" href="#Audio-Encoders">8. Audio Encoders</a>
+ <ul class="toc">
+ <li><a name="toc-aac" href="#aac">8.1 aac</a>
+ <ul class="toc">
+ <li><a name="toc-Options-8" href="#Options-8">8.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-ac3-and-ac3_005ffixed" href="#ac3-and-ac3_005ffixed">8.2 ac3 and ac3_fixed</a>
+ <ul class="toc">
+ <li><a name="toc-AC_002d3-Metadata" href="#AC_002d3-Metadata">8.2.1 AC-3 Metadata</a>
+ <ul class="toc">
+ <li><a name="toc-Metadata-Control-Options" href="#Metadata-Control-Options">8.2.1.1 Metadata Control Options</a></li>
+ <li><a name="toc-Downmix-Levels" href="#Downmix-Levels">8.2.1.2 Downmix Levels</a></li>
+ <li><a name="toc-Audio-Production-Information" href="#Audio-Production-Information">8.2.1.3 Audio Production Information</a></li>
+ <li><a name="toc-Other-Metadata-Options" href="#Other-Metadata-Options">8.2.1.4 Other Metadata Options</a></li>
+ </ul></li>
+ <li><a name="toc-Extended-Bitstream-Information" href="#Extended-Bitstream-Information">8.2.2 Extended Bitstream Information</a>
+ <ul class="toc">
+ <li><a name="toc-Extended-Bitstream-Information-_002d-Part-1" href="#Extended-Bitstream-Information-_002d-Part-1">8.2.2.1 Extended Bitstream Information - Part 1</a></li>
+ <li><a name="toc-Extended-Bitstream-Information-_002d-Part-2" href="#Extended-Bitstream-Information-_002d-Part-2">8.2.2.2 Extended Bitstream Information - Part 2</a></li>
+ </ul></li>
+ <li><a name="toc-Other-AC_002d3-Encoding-Options" href="#Other-AC_002d3-Encoding-Options">8.2.3 Other AC-3 Encoding Options</a></li>
+ <li><a name="toc-Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options" href="#Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options">8.2.4 Floating-Point-Only AC-3 Encoding Options</a></li>
+ </ul></li>
+ <li><a name="toc-libfaac-1" href="#libfaac-1">8.3 libfaac</a>
+ <ul class="toc">
+ <li><a name="toc-Options-12" href="#Options-12">8.3.1 Options</a></li>
+ <li><a name="toc-Examples-2" href="#Examples-2">8.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libfdk_005faac" href="#libfdk_005faac">8.4 libfdk_aac</a>
+ <ul class="toc">
+ <li><a name="toc-Options-13" href="#Options-13">8.4.1 Options</a></li>
+ <li><a name="toc-Examples-1" href="#Examples-1">8.4.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libmp3lame-1" href="#libmp3lame-1">8.5 libmp3lame</a>
+ <ul class="toc">
+ <li><a name="toc-Options-5" href="#Options-5">8.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopencore_002damrnb-1" href="#libopencore_002damrnb-1">8.6 libopencore-amrnb</a>
+ <ul class="toc">
+ <li><a name="toc-Options" href="#Options">8.6.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libshine-1" href="#libshine-1">8.7 libshine</a>
+ <ul class="toc">
+ <li><a name="toc-Options-4" href="#Options-4">8.7.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libtwolame" href="#libtwolame">8.8 libtwolame</a>
+ <ul class="toc">
+ <li><a name="toc-Options-6" href="#Options-6">8.8.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libvo_002daacenc-1" href="#libvo_002daacenc-1">8.9 libvo-aacenc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-17" href="#Options-17">8.9.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libvo_002damrwbenc" href="#libvo_002damrwbenc">8.10 libvo-amrwbenc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-3" href="#Options-3">8.10.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopus" href="#libopus">8.11 libopus</a>
+ <ul class="toc">
+ <li><a name="toc-Option-Mapping" href="#Option-Mapping">8.11.1 Option Mapping</a></li>
+ </ul></li>
+ <li><a name="toc-libvorbis" href="#libvorbis">8.12 libvorbis</a>
+ <ul class="toc">
+ <li><a name="toc-Options-10" href="#Options-10">8.12.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libwavpack-1" href="#libwavpack-1">8.13 libwavpack</a>
+ <ul class="toc">
+ <li><a name="toc-Options-15" href="#Options-15">8.13.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-wavpack" href="#wavpack">8.14 wavpack</a>
+ <ul class="toc">
+ <li><a name="toc-Options-11" href="#Options-11">8.14.1 Options</a>
+ <ul class="toc">
+ <li><a name="toc-Shared-options" href="#Shared-options">8.14.1.1 Shared options</a></li>
+ <li><a name="toc-Private-options" href="#Private-options">8.14.1.2 Private options</a></li>
+ </ul>
+</li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Video-Encoders" href="#Video-Encoders">9. Video Encoders</a>
+ <ul class="toc">
+ <li><a name="toc-libtheora" href="#libtheora">9.1 libtheora</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">9.1.1 Options</a></li>
+ <li><a name="toc-Examples" href="#Examples">9.1.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libvpx" href="#libvpx">9.2 libvpx</a>
+ <ul class="toc">
+ <li><a name="toc-Options-20" href="#Options-20">9.2.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libwebp" href="#libwebp">9.3 libwebp</a>
+ <ul class="toc">
+ <li><a name="toc-Pixel-Format" href="#Pixel-Format">9.3.1 Pixel Format</a></li>
+ <li><a name="toc-Options-7" href="#Options-7">9.3.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libx264_002c-libx264rgb" href="#libx264_002c-libx264rgb">9.4 libx264, libx264rgb</a>
+ <ul class="toc">
+ <li><a name="toc-Supported-Pixel-Formats" href="#Supported-Pixel-Formats">9.4.1 Supported Pixel Formats</a></li>
+ <li><a name="toc-Options-19" href="#Options-19">9.4.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libxvid" href="#libxvid">9.5 libxvid</a>
+ <ul class="toc">
+ <li><a name="toc-Options-9" href="#Options-9">9.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-png" href="#png">9.6 png</a>
+ <ul class="toc">
+ <li><a name="toc-Private-options-1" href="#Private-options-1">9.6.1 Private options</a></li>
+ </ul></li>
+ <li><a name="toc-ProRes" href="#ProRes">9.7 ProRes</a>
+ <ul class="toc">
+ <li><a name="toc-Private-Options-for-prores_002dks" href="#Private-Options-for-prores_002dks">9.7.1 Private Options for prores-ks</a></li>
+ <li><a name="toc-Speed-considerations" href="#Speed-considerations">9.7.2 Speed considerations</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">10. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">11. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes the codecs (decoders and encoders) provided by
+the libavcodec library.
+</p>
+
+<p><a name="codec_002doptions"></a>
+</p><a name="Codec-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Codec-Options">2. Codec Options</a></h1>
+
+<p>libavcodec provides some generic global options, which can be set on
+all the encoders and decoders. In addition each codec may support
+so-called private options, which are specific for a given codec.
+</p>
+<p>Sometimes, a global option may only affect a specific kind of codec,
+and may be unsensical or ignored by another, so you need to be aware
+of the meaning of the specified options. Also some options are
+meant only for decoding or encoding.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVCodecContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follow:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Default value is 200K.
+</p>
+</dd>
+<dt> ‘<samp>ab <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio bitrate (in bits/s). Default value is 128K.
+</p>
+</dd>
+<dt> ‘<samp>bt <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video bitrate tolerance (in bits/s). 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.
+</p>
+</dd>
+<dt> ‘<samp>flags <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Set generic flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>mv4</samp>’</dt>
+<dd><p>Use four motion vector by macroblock (mpeg4).
+</p></dd>
+<dt> ‘<samp>qpel</samp>’</dt>
+<dd><p>Use 1/4 pel motion compensation.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Use loop filter.
+</p></dd>
+<dt> ‘<samp>qscale</samp>’</dt>
+<dd><p>Use fixed qscale.
+</p></dd>
+<dt> ‘<samp>gmc</samp>’</dt>
+<dd><p>Use gmc.
+</p></dd>
+<dt> ‘<samp>mv0</samp>’</dt>
+<dd><p>Always try a mb with mv=<0,0>.
+</p></dd>
+<dt> ‘<samp>input_preserved</samp>’</dt>
+<dt> ‘<samp>pass1</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in first pass mode.
+</p></dd>
+<dt> ‘<samp>pass2</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in second pass mode.
+</p></dd>
+<dt> ‘<samp>gray</samp>’</dt>
+<dd><p>Only decode/encode grayscale.
+</p></dd>
+<dt> ‘<samp>emu_edge</samp>’</dt>
+<dd><p>Do not draw edges.
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>Set error[?] variables during encoding.
+</p></dd>
+<dt> ‘<samp>truncated</samp>’</dt>
+<dt> ‘<samp>naq</samp>’</dt>
+<dd><p>Normalize adaptive quantization.
+</p></dd>
+<dt> ‘<samp>ildct</samp>’</dt>
+<dd><p>Use interlaced DCT.
+</p></dd>
+<dt> ‘<samp>low_delay</samp>’</dt>
+<dd><p>Force low delay.
+</p></dd>
+<dt> ‘<samp>global_header</samp>’</dt>
+<dd><p>Place global headers in extradata instead of every keyframe.
+</p></dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Use only bitexact stuff (except (I)DCT).
+</p></dd>
+<dt> ‘<samp>aic</samp>’</dt>
+<dd><p>Apply H263 advanced intra coding / mpeg4 ac prediction.
+</p></dd>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>qprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>ilme</samp>’</dt>
+<dd><p>Apply interlaced motion estimation.
+</p></dd>
+<dt> ‘<samp>cgop</samp>’</dt>
+<dd><p>Use closed gop.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_method <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero motion estimation (fastest)
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>full motion estimation (slowest)
+</p></dd>
+<dt> ‘<samp>epzs</samp>’</dt>
+<dd><p>EPZS motion estimation (default)
+</p></dd>
+<dt> ‘<samp>esa</samp>’</dt>
+<dd><p>esa motion estimation (alias for full)
+</p></dd>
+<dt> ‘<samp>tesa</samp>’</dt>
+<dd><p>tesa motion estimation
+</p></dd>
+<dt> ‘<samp>dia</samp>’</dt>
+<dd><p>dia motion estimation (alias for epzs)
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>log motion estimation
+</p></dd>
+<dt> ‘<samp>phods</samp>’</dt>
+<dd><p>phods motion estimation
+</p></dd>
+<dt> ‘<samp>x1</samp>’</dt>
+<dd><p>X1 motion estimation
+</p></dd>
+<dt> ‘<samp>hex</samp>’</dt>
+<dd><p>hex motion estimation
+</p></dd>
+<dt> ‘<samp>umh</samp>’</dt>
+<dd><p>umh motion estimation
+</p></dd>
+<dt> ‘<samp>iter</samp>’</dt>
+<dd><p>iter motion estimation
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>extradata_size <var>integer</var></samp>’</dt>
+<dd><p>Set extradata size.
+</p>
+</dd>
+<dt> ‘<samp>time_base <var>rational number</var></samp>’</dt>
+<dd><p>Set codec time base.
+</p>
+<p>It is the fundamental unit of time (in seconds) in terms of which
+frame timestamps are represented. For fixed-fps content, timebase
+should be <code>1 / frame_rate</code> and timestamp increments should be
+identically 1.
+</p>
+</dd>
+<dt> ‘<samp>g <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set the group of picture size. Default value is 12.
+</p>
+</dd>
+<dt> ‘<samp>ar <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>ac <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>cutoff <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set cutoff bandwidth.
+</p>
+</dd>
+<dt> ‘<samp>frame_size <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio frame size.
+</p>
+<p>Each submitted frame except the last must contain exactly frame_size
+samples per channel. May be 0 when the codec has
+CODEC_CAP_VARIABLE_FRAME_SIZE set, in that case the frame size is not
+restricted. It is set by some decoders to indicate constant frame
+size.
+</p>
+</dd>
+<dt> ‘<samp>frame_number <var>integer</var></samp>’</dt>
+<dd><p>Set the frame number.
+</p>
+</dd>
+<dt> ‘<samp>delay <var>integer</var></samp>’</dt>
+<dt> ‘<samp>qcomp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale compression (VBR). It is used as a constant
+in the ratecontrol equation. Recommended range for default rc_eq:
+0.0-1.0.
+</p>
+</dd>
+<dt> ‘<samp>qblur <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale blur (VBR).
+</p>
+</dd>
+<dt> ‘<samp>qmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min video quantizer scale (VBR). Must be included between -1 and
+69, default value is 2.
+</p>
+</dd>
+<dt> ‘<samp>qmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max video quantizer scale (VBR). Must be included between -1 and
+1024, default value is 31.
+</p>
+</dd>
+<dt> ‘<samp>qdiff <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max difference between the quantizer scale (VBR).
+</p>
+</dd>
+<dt> ‘<samp>bf <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max number of B frames between non-B-frames.
+</p>
+<p>Must be an integer between -1 and 16. 0 means that B-frames are
+disabled. If a value of -1 is used, it will choose an automatic value
+depending on the encoder.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>b_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set qp factor between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol method.
+</p>
+</dd>
+<dt> ‘<samp>b_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set strategy to choose between I/P/B-frames.
+</p>
+</dd>
+<dt> ‘<samp>ps <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set RTP payload size in bytes.
+</p>
+</dd>
+<dt> ‘<samp>mv_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>header_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>skip_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>misc_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>frame_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>bug <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Workaround not auto detected encoder bugs.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>autodetect</samp>’</dt>
+<dt> ‘<samp>old_msmpeg4</samp>’</dt>
+<dd><p>some old lavc generated msmpeg4v3 files (no autodetection)
+</p></dd>
+<dt> ‘<samp>xvid_ilace</samp>’</dt>
+<dd><p>Xvid interlacing bug (autodetected if fourcc==XVIX)
+</p></dd>
+<dt> ‘<samp>ump4</samp>’</dt>
+<dd><p>(autodetected if fourcc==UMP4)
+</p></dd>
+<dt> ‘<samp>no_padding</samp>’</dt>
+<dd><p>padding bug (autodetected)
+</p></dd>
+<dt> ‘<samp>amv</samp>’</dt>
+<dt> ‘<samp>ac_vlc</samp>’</dt>
+<dd><p>illegal vlc bug (autodetected per fourcc)
+</p></dd>
+<dt> ‘<samp>qpel_chroma</samp>’</dt>
+<dt> ‘<samp>std_qpel</samp>’</dt>
+<dd><p>old standard qpel (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>qpel_chroma2</samp>’</dt>
+<dt> ‘<samp>direct_blocksize</samp>’</dt>
+<dd><p>direct-qpel-blocksize bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>edge padding bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>hpel_chroma</samp>’</dt>
+<dt> ‘<samp>dc_clip</samp>’</dt>
+<dt> ‘<samp>ms</samp>’</dt>
+<dd><p>Workaround various bugs in microsoft broken decoders.
+</p></dd>
+<dt> ‘<samp>trunc</samp>’</dt>
+<dd><p>trancated frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lelim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for luminance (negative
+values also consider DC coefficient).
+</p>
+</dd>
+<dt> ‘<samp>celim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for chrominance (negative
+values also consider dc coefficient)
+</p>
+</dd>
+<dt> ‘<samp>strict <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Specify how strictly to follow the standards.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>very</samp>’</dt>
+<dd><p>strictly conform to a older more strict version of the spec or reference software
+</p></dd>
+<dt> ‘<samp>strict</samp>’</dt>
+<dd><p>strictly conform to all the things in the spec no matter what consequences
+</p></dd>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>unofficial</samp>’</dt>
+<dd><p>allow unofficial extensions
+</p></dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>allow non standardized experimental things, experimental
+(unfinished/work in progress/not well tested) decoders and encoders.
+Note: experimental decoders can pose a security risk, do not use this for
+decoding untrusted input.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>b_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>err_detect <var>flags</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set error detection flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>verify embedded CRCs
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>detect bitstream specification deviations
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>detect improper bitstream length
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>abort decoding on minor error detection
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>consider things that violate the spec and have not been seen in the wild as errors
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>consider all spec non compliancies as errors
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>consider things that a sane encoder should not do as an error
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>has_b_frames <var>integer</var></samp>’</dt>
+<dt> ‘<samp>block_align <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mpeg_quant <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Use MPEG quantizers instead of H.263.
+</p>
+</dd>
+<dt> ‘<samp>qsquish <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>How to keep quantizer between qmin and qmax (0 = clip, 1 = use
+differentiable function).
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_amp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_freq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_override_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>rc_eq <var>string</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set rate control equation. When computing the expression, besides the
+standard functions defined in the section ’Expression Evaluation’, the
+following functions are available: bits2qp(bits), qp2bits(qp). Also
+the following constants are available: iTex pTex tex mv fCode iCount
+mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex
+avgTex.
+</p>
+</dd>
+<dt> ‘<samp>maxrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set max bitrate tolerance (in bits/s). Requires bufsize to be set.
+</p>
+</dd>
+<dt> ‘<samp>minrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR
+encode. It is of little use elsewise.
+</p>
+</dd>
+<dt> ‘<samp>bufsize <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol buffer size (in bits).
+</p>
+</dd>
+<dt> ‘<samp>rc_buf_aggressivity <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Currently useless.
+</p>
+</dd>
+<dt> ‘<samp>i_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP factor between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>i_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_cplx <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set initial complexity for 1-pass encoding.
+</p>
+</dd>
+<dt> ‘<samp>dct <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set DCT algorithm.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>autoselect a good one (default)
+</p></dd>
+<dt> ‘<samp>fastint</samp>’</dt>
+<dd><p>fast integer
+</p></dd>
+<dt> ‘<samp>int</samp>’</dt>
+<dd><p>accurate integer
+</p></dd>
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>faan</samp>’</dt>
+<dd><p>floating point AAN DCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lumi_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress bright areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>tcplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set temporal complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>scplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set spatial complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>p_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter masking.
+</p>
+</dd>
+<dt> ‘<samp>dark_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress dark areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>idct <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select IDCT implementation.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dt> ‘<samp>int</samp>’</dt>
+<dt> ‘<samp>simple</samp>’</dt>
+<dt> ‘<samp>simplemmx</samp>’</dt>
+<dt> ‘<samp>arm</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>sh4</samp>’</dt>
+<dt> ‘<samp>simplearm</samp>’</dt>
+<dt> ‘<samp>simplearmv5te</samp>’</dt>
+<dt> ‘<samp>simplearmv6</samp>’</dt>
+<dt> ‘<samp>simpleneon</samp>’</dt>
+<dt> ‘<samp>simplealpha</samp>’</dt>
+<dt> ‘<samp>ipp</samp>’</dt>
+<dt> ‘<samp>xvidmmx</samp>’</dt>
+<dt> ‘<samp>faani</samp>’</dt>
+<dd><p>floating point AAN IDCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>slice_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>ec <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set error concealment strategy.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>guess_mvs</samp>’</dt>
+<dd><p>iterative motion vector (MV) search (slow)
+</p></dd>
+<dt> ‘<samp>deblock</samp>’</dt>
+<dd><p>use strong deblock filter for damaged MBs
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>bits_per_coded_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set prediction method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>left</samp>’</dt>
+<dt> ‘<samp>plane</samp>’</dt>
+<dt> ‘<samp>median</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>aspect <var>rational number</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>debug <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pict</samp>’</dt>
+<dd><p>picture info
+</p></dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dd><p>rate control
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dt> ‘<samp>mb_type</samp>’</dt>
+<dd><p>macroblock (MB) type
+</p></dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>per-block quantization parameter (QP)
+</p></dd>
+<dt> ‘<samp>mv</samp>’</dt>
+<dd><p>motion vector
+</p></dd>
+<dt> ‘<samp>dct_coeff</samp>’</dt>
+<dt> ‘<samp>skip</samp>’</dt>
+<dt> ‘<samp>startcode</samp>’</dt>
+<dt> ‘<samp>pts</samp>’</dt>
+<dt> ‘<samp>er</samp>’</dt>
+<dd><p>error recognition
+</p></dd>
+<dt> ‘<samp>mmco</samp>’</dt>
+<dd><p>memory management control operations (H.264)
+</p></dd>
+<dt> ‘<samp>bugs</samp>’</dt>
+<dt> ‘<samp>vis_qp</samp>’</dt>
+<dd><p>visualize quantization parameter (QP), lower QP are tinted greener
+</p></dd>
+<dt> ‘<samp>vis_mb_type</samp>’</dt>
+<dd><p>visualize block types
+</p></dd>
+<dt> ‘<samp>buffers</samp>’</dt>
+<dd><p>picture buffer allocations
+</p></dd>
+<dt> ‘<samp>thread_ops</samp>’</dt>
+<dd><p>threading operations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vismv <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Visualize motion vectors (MVs).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pf</samp>’</dt>
+<dd><p>forward predicted MVs of P-frames
+</p></dd>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>forward predicted MVs of B-frames
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>backward predicted MVs of B-frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set full pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>subcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>mbcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>ildctcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set interlaced dct compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>last_pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set amount of motion predictors from the previous frame.
+</p>
+</dd>
+<dt> ‘<samp>preme <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>precmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>pre_dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation pre-pass.
+</p>
+</dd>
+<dt> ‘<samp>subq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel motion estimation quality.
+</p>
+</dd>
+<dt> ‘<samp>dtg_active_format <var>integer</var></samp>’</dt>
+<dt> ‘<samp>me_range <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set limit motion vectors range (1023 for DivX player).
+</p>
+</dd>
+<dt> ‘<samp>ibias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra quant bias.
+</p>
+</dd>
+<dt> ‘<samp>pbias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter quant bias.
+</p>
+</dd>
+<dt> ‘<samp>color_table_id <var>integer</var></samp>’</dt>
+<dt> ‘<samp>global_quality <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>coder <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>vlc</samp>’</dt>
+<dd><p>variable length coder / huffman coder
+</p></dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>arithmetic coder
+</p></dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>raw (no encoding)
+</p></dd>
+<dt> ‘<samp>rle</samp>’</dt>
+<dd><p>run-length coder
+</p></dd>
+<dt> ‘<samp>deflate</samp>’</dt>
+<dd><p>deflate-based coder
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>context <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set context model.
+</p>
+</dd>
+<dt> ‘<samp>slice_flags <var>integer</var></samp>’</dt>
+<dt> ‘<samp>xvmc_acceleration <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mbd <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock decision algorithm (high quality mode).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>use mbcmp (default)
+</p></dd>
+<dt> ‘<samp>bits</samp>’</dt>
+<dd><p>use fewest bits
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>use best rate distortion
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>stream_codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>sc_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set scene change threshold.
+</p>
+</dd>
+<dt> ‘<samp>lmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>lmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>nr <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set noise reduction.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set number of bits which should be loaded into the rc buffer before
+decoding starts.
+</p>
+</dd>
+<dt> ‘<samp>flags2 <var>flags</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dd><p>Allow non spec compliant speedup tricks.
+</p></dd>
+<dt> ‘<samp>sgop</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>noout</samp>’</dt>
+<dd><p>Skip bitstream encoding.
+</p></dd>
+<dt> ‘<samp>ignorecrop</samp>’</dt>
+<dd><p>Ignore cropping information from sps.
+</p></dd>
+<dt> ‘<samp>local_header</samp>’</dt>
+<dd><p>Place global headers at every keyframe instead of in extradata.
+</p></dd>
+<dt> ‘<samp>chunks</samp>’</dt>
+<dd><p>Frame data might be split into multiple chunks.
+</p></dd>
+<dt> ‘<samp>showall</samp>’</dt>
+<dd><p>Show all frames before the first keyframe.
+</p></dd>
+<dt> ‘<samp>skiprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>error <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>qns <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p>
+</dd>
+<dt> ‘<samp>threads <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>detect a good number of threads
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation threshold.
+</p>
+</dd>
+<dt> ‘<samp>mb_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock threshold.
+</p>
+</dd>
+<dt> ‘<samp>dc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra_dc_precision.
+</p>
+</dd>
+<dt> ‘<samp>nssew <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set nsse weight.
+</p>
+</dd>
+<dt> ‘<samp>skip_top <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the top which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>skip_bottom <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the bottom which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>profile <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+<dt> ‘<samp>aac_main</samp>’</dt>
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dt> ‘<samp>aac_ssr</samp>’</dt>
+<dt> ‘<samp>aac_ltp</samp>’</dt>
+<dt> ‘<samp>aac_he</samp>’</dt>
+<dt> ‘<samp>aac_he_v2</samp>’</dt>
+<dt> ‘<samp>aac_ld</samp>’</dt>
+<dt> ‘<samp>aac_eld</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_low</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_he</samp>’</dt>
+<dt> ‘<samp>dts</samp>’</dt>
+<dt> ‘<samp>dts_es</samp>’</dt>
+<dt> ‘<samp>dts_96_24</samp>’</dt>
+<dt> ‘<samp>dts_hd_hra</samp>’</dt>
+<dt> ‘<samp>dts_hd_ma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>lowres <var>integer</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Decode at 1= 1/2, 2=1/4, 3=1/8 resolutions.
+</p>
+</dd>
+<dt> ‘<samp>skip_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip threshold.
+</p>
+</dd>
+<dt> ‘<samp>skip_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip factor.
+</p>
+</dd>
+<dt> ‘<samp>skip_exp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip exponent.
+Negative values behave identical to the corresponding positive ones, except
+that the score is normalized.
+Positive values exist primarly for compatibility reasons and are not so useful.
+</p>
+</dd>
+<dt> ‘<samp>skipcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>border_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Increase the quantizer for macroblocks close to borders.
+</p>
+</dd>
+<dt> ‘<samp>mblmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mblmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mepc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation bitrate penalty compensation (1.0 = 256).
+</p>
+</dd>
+<dt> ‘<samp>skip_loop_filter <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_idct <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_frame <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd>
+<p>Make decoder discard processing depending on the frame type selected
+by the option value.
+</p>
+<p>‘<samp>skip_loop_filter</samp>’ skips frame loop filtering, ‘<samp>skip_idct</samp>’
+skips frame IDCT/dequantization, ‘<samp>skip_frame</samp>’ skips decoding.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Discard no frame.
+</p>
+</dd>
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Discard useless frames like 0-sized frames.
+</p>
+</dd>
+<dt> ‘<samp>noref</samp>’</dt>
+<dd><p>Discard all non-reference frames.
+</p>
+</dd>
+<dt> ‘<samp>bidir</samp>’</dt>
+<dd><p>Discard all bidirectional frames.
+</p>
+</dd>
+<dt> ‘<samp>nokey</samp>’</dt>
+<dd><p>Discard all frames excepts keyframes.
+</p>
+</dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Discard all frames.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>default</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>bidir_refine <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Refine the two motion vectors used in bidirectional macroblocks.
+</p>
+</dd>
+<dt> ‘<samp>brd_scale <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Downscale frames for dynamic B-frame decision.
+</p>
+</dd>
+<dt> ‘<samp>keyint_min <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set minimum interval between IDR-frames.
+</p>
+</dd>
+<dt> ‘<samp>refs <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set reference frames to consider for motion compensation.
+</p>
+</dd>
+<dt> ‘<samp>chromaoffset <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set chroma qp offset from luma.
+</p>
+</dd>
+<dt> ‘<samp>trellis <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set rate-distortion optimal quantization.
+</p>
+</dd>
+<dt> ‘<samp>sc_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set value multiplied by qscale for each frame and added to
+scene_change_score.
+</p>
+</dd>
+<dt> ‘<samp>mv0_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>b_sensitivity <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Adjust sensitivity of b_frame_strategy 1.
+</p>
+</dd>
+<dt> ‘<samp>compression_level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>min_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>max_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>timecode_frame_start <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set GOP timecode frame start number, in non drop frame format.
+</p>
+</dd>
+<dt> ‘<samp>request_channels <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set desired number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>bits_per_raw_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>channel_layout <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>request_channel_layout <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>rc_max_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>rc_min_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>ticks_per_frame <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_primaries <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_trc <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>colorspace <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_range <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>chroma_sample_location <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>log_level_offset <var>integer</var></samp>’</dt>
+<dd><p>Set the log level offset.
+</p>
+</dd>
+<dt> ‘<samp>slices <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Number of slices, used in parallelized encoding.
+</p>
+</dd>
+<dt> ‘<samp>thread_type <var>flags</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select multithreading type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>slice</samp>’</dt>
+<dt> ‘<samp>frame</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>audio_service_type <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio service type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ma</samp>’</dt>
+<dd><p>Main Audio Service
+</p></dd>
+<dt> ‘<samp>ef</samp>’</dt>
+<dd><p>Effects
+</p></dd>
+<dt> ‘<samp>vi</samp>’</dt>
+<dd><p>Visually Impaired
+</p></dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dd><p>Hearing Impaired
+</p></dd>
+<dt> ‘<samp>di</samp>’</dt>
+<dd><p>Dialogue
+</p></dd>
+<dt> ‘<samp>co</samp>’</dt>
+<dd><p>Commentary
+</p></dd>
+<dt> ‘<samp>em</samp>’</dt>
+<dd><p>Emergency
+</p></dd>
+<dt> ‘<samp>vo</samp>’</dt>
+<dd><p>Voice Over
+</p></dd>
+<dt> ‘<samp>ka</samp>’</dt>
+<dd><p>Karaoke
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>request_sample_fmt <var>sample_fmt</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set sample format audio decoders should prefer. Default value is
+<code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_timebase <var>rational number</var></samp>’</dt>
+<dt> ‘<samp>sub_charenc <var>encoding</var> (<em>decoding,subtitles</em>)</samp>’</dt>
+<dd><p>Set the input subtitles character encoding.
+</p>
+</dd>
+<dt> ‘<samp>field_order <var>field_order</var> (<em>video</em>)</samp>’</dt>
+<dd><p>Set/override the field order of the video.
+Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>progressive</samp>’</dt>
+<dd><p>Progressive video
+</p></dd>
+<dt> ‘<samp>tt</samp>’</dt>
+<dd><p>Interlaced video, top field coded and displayed first
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>Interlaced video, bottom field coded and displayed first
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>Interlaced video, top coded first, bottom displayed first
+</p></dd>
+<dt> ‘<samp>bt</samp>’</dt>
+<dd><p>Interlaced video, bottom coded first, top displayed first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>skip_alpha <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set to 1 to disable processing alpha (transparency). This works like the
+‘<samp>gray</samp>’ flag in the ‘<samp>flags</samp>’ option which skips chroma information
+instead of alpha. Default is 0.
+</p></dd>
+</dl>
+
+
+<a name="Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Decoders">3. Decoders</a></h1>
+
+<p>Decoders are configured elements in FFmpeg which allow the decoding of
+multimedia streams.
+</p>
+<p>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 <code>--enable-lib</code> option. You can list all
+available decoders using the configure option <code>--list-decoders</code>.
+</p>
+<p>You can disable all the decoders with the configure option
+<code>--disable-decoders</code> and selectively enable / disable single decoders
+with the options <code>--enable-decoder=<var>DECODER</var></code> /
+<code>--disable-decoder=<var>DECODER</var></code>.
+</p>
+<p>The option <code>-decoders</code> of the ff* tools will display the list of
+enabled decoders.
+</p>
+
+<a name="Video-Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Video-Decoders">4. Video Decoders</a></h1>
+
+<p>A description of some of the currently available video decoders
+follows.
+</p>
+<a name="rawvideo"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-rawvideo">4.1 rawvideo</a></h2>
+
+<p>Raw video decoder.
+</p>
+<p>This decoder decodes rawvideo streams.
+</p>
+<a name="Options-2"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-2">4.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>top <var>top_field_first</var></samp>’</dt>
+<dd><p>Specify the assumed field type of the input video.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>the video is assumed to be progressive (default)
+</p></dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>bottom-field-first is assumed
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>top-field-first is assumed
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="Audio-Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Audio-Decoders">5. Audio Decoders</a></h1>
+
+<p>A description of some of the currently available audio decoders
+follows.
+</p>
+<a name="ac3"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-ac3">5.1 ac3</a></h2>
+
+<p>AC-3 audio decoder.
+</p>
+<p>This decoder implements part of ATSC A/52:2010 and ETSI TS 102 366, as well as
+the undocumented RealAudio 3 (a.k.a. dnet).
+</p>
+<a name="AC_002d3-Decoder-Options"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-AC_002d3-Decoder-Options">5.1.1 AC-3 Decoder Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-drc_scale <var>value</var></samp>’</dt>
+<dd><p>Dynamic Range Scale Factor. The factor to apply to dynamic range values
+from the AC-3 stream. This factor is applied exponentially.
+There are 3 notable scale factor ranges:
+</p><dl compact="compact">
+<dt> ‘<samp>drc_scale == 0</samp>’</dt>
+<dd><p>DRC disabled. Produces full range audio.
+</p></dd>
+<dt> ‘<samp>0 < drc_scale <= 1</samp>’</dt>
+<dd><p>DRC enabled. Applies a fraction of the stream DRC value.
+Audio reproduction is between full range and full compression.
+</p></dd>
+<dt> ‘<samp>drc_scale > 1</samp>’</dt>
+<dd><p>DRC enabled. Applies drc_scale asymmetrically.
+Loud sounds are fully compressed. Soft sounds are enhanced.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="ffwavesynth"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-ffwavesynth">5.2 ffwavesynth</a></h2>
+
+<p>Internal wave synthetizer.
+</p>
+<p>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.
+</p>
+<a name="libcelt"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libcelt">5.3 libcelt</a></h2>
+
+<p>libcelt decoder wrapper.
+</p>
+<p>libcelt allows libavcodec to decode the Xiph CELT ultra-low delay audio codec.
+Requires the presence of the libcelt headers and library during configuration.
+You need to explicitly configure the build with <code>--enable-libcelt</code>.
+</p>
+<a name="libgsm"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libgsm">5.4 libgsm</a></h2>
+
+<p>libgsm decoder wrapper.
+</p>
+<p>libgsm allows libavcodec to decode the GSM full rate audio codec. Requires
+the presence of the libgsm headers and library during configuration. You need
+to explicitly configure the build with <code>--enable-libgsm</code>.
+</p>
+<p>This decoder supports both the ordinary GSM and the Microsoft variant.
+</p>
+<a name="libilbc"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libilbc">5.5 libilbc</a></h2>
+
+<p>libilbc decoder wrapper.
+</p>
+<p>libilbc allows libavcodec to decode the Internet Low Bitrate Codec (iLBC)
+audio codec. Requires the presence of the libilbc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libilbc</code>.
+</p>
+<a name="Options-16"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-16">5.5.1 Options</a></h3>
+
+<p>The following option is supported by the libilbc wrapper.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>enhance</samp>’</dt>
+<dd>
+<p>Enable the enhancement of the decoded audio when set to 1. The default
+value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libopencore_002damrnb"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libopencore_002damrnb">5.6 libopencore-amrnb</a></h2>
+
+<p>libopencore-amrnb decoder wrapper.
+</p>
+<p>libopencore-amrnb allows libavcodec to decode the Adaptive Multi-Rate
+Narrowband audio codec. Using it requires the presence of the
+libopencore-amrnb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrnb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-NB exists, so users can decode AMR-NB
+without this library.
+</p>
+<a name="libopencore_002damrwb"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libopencore_002damrwb">5.7 libopencore-amrwb</a></h2>
+
+<p>libopencore-amrwb decoder wrapper.
+</p>
+<p>libopencore-amrwb allows libavcodec to decode the Adaptive Multi-Rate
+Wideband audio codec. Using it requires the presence of the
+libopencore-amrwb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrwb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-WB exists, so users can decode AMR-WB
+without this library.
+</p>
+<a name="libopus-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libopus-1">5.8 libopus</a></h2>
+
+<p>libopus decoder wrapper.
+</p>
+<p>libopus allows libavcodec to decode the Opus Interactive Audio Codec.
+Requires the presence of the libopus headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopus</code>.
+</p>
+
+<a name="Subtitles-Decoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Subtitles-Decoders">6. Subtitles Decoders</a></h1>
+
+<a name="dvdsub"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-dvdsub">6.1 dvdsub</a></h2>
+
+<p>This codec decodes the bitmap subtitles used in DVDs; the same subtitles can
+also be found in VobSub file pairs and in some Matroska files.
+</p>
+<a name="Options-14"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-14">6.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>palette</samp>’</dt>
+<dd><p>Specify the global palette used by the bitmaps. When stored in VobSub, the
+palette is normally specified in the index file; in Matroska, the palette is
+stored in the codec extra-data in the same format as in VobSub. In DVDs, the
+palette is stored in the IFO file, and therefore not available when reading
+from dumped VOB files.
+</p>
+<p>The format for this option is a string containing 16 24-bits hexadecimal
+numbers (without 0x prefix) separated by comas, for example <code>0d00ee,
+ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1,
+7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b</code>.
+</p></dd>
+</dl>
+
+<a name="libzvbi_002dteletext"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libzvbi_002dteletext">6.2 libzvbi-teletext</a></h2>
+
+<p>Libzvbi allows libavcodec to decode DVB teletext pages and DVB teletext
+subtitles. Requires the presence of the libzvbi headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libzvbi</code>.
+</p>
+<a name="Options-18"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-18">6.2.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>txt_page</samp>’</dt>
+<dd><p>List of teletext page numbers to decode. You may use the special * string to
+match all pages. Pages that do not match the specified list are dropped.
+Default value is *.
+</p></dd>
+<dt> ‘<samp>txt_chop_top</samp>’</dt>
+<dd><p>Discards the top teletext line. Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_format</samp>’</dt>
+<dd><p>Specifies the format of the decoded subtitles. The teletext decoder is capable
+of decoding the teletext pages to bitmaps or to simple text, you should use
+"bitmap" for teletext pages, because certain graphics and colors cannot be
+expressed in simple text. You might use "text" for teletext based subtitles if
+your application can handle simple text based subtitles. Default value is
+bitmap.
+</p></dd>
+<dt> ‘<samp>txt_left</samp>’</dt>
+<dd><p>X offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_top</samp>’</dt>
+<dd><p>Y offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_chop_spaces</samp>’</dt>
+<dd><p>Chops leading and trailing spaces and removes empty lines from the generated
+text. This option is useful for teletext based subtitles where empty spaces may
+be present at the start or at the end of the lines or empty lines may be
+present between the subtitle lines because of double-sized teletext charactes.
+Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_duration</samp>’</dt>
+<dd><p>Sets the display duration of the decoded teletext pages or subtitles in
+miliseconds. Default value is 30000 which is 30 seconds.
+</p></dd>
+<dt> ‘<samp>txt_transparent</samp>’</dt>
+<dd><p>Force transparent background of the generated teletext bitmaps. Default value
+is 0 which means an opaque (black) background.
+</p></dd>
+</dl>
+
+<a name="Encoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Encoders">7. Encoders</a></h1>
+
+<p>Encoders are configured elements in FFmpeg which allow the encoding of
+multimedia streams.
+</p>
+<p>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 <code>--enable-lib</code> option. You can list all
+available encoders using the configure option <code>--list-encoders</code>.
+</p>
+<p>You can disable all the encoders with the configure option
+<code>--disable-encoders</code> and selectively enable / disable single encoders
+with the options <code>--enable-encoder=<var>ENCODER</var></code> /
+<code>--disable-encoder=<var>ENCODER</var></code>.
+</p>
+<p>The option <code>-encoders</code> of the ff* tools will display the list of
+enabled encoders.
+</p>
+
+<a name="Audio-Encoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Audio-Encoders">8. Audio Encoders</a></h1>
+
+<p>A description of some of the currently available audio encoders
+follows.
+</p>
+<p><a name="aacenc"></a>
+</p><a name="aac"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-aac">8.1 aac</a></h2>
+
+<p>Advanced Audio Coding (AAC) encoder.
+</p>
+<p>This encoder is an experimental FFmpeg-native AAC encoder. Currently only the
+low complexity (AAC-LC) profile is supported. To use this encoder, you must set
+‘<samp>strict</samp>’ option to ‘<samp>experimental</samp>’ or lower.
+</p>
+<p>As this encoder is experimental, unexpected behavior may exist from time to
+time. For a more stable AAC encoder, see <a href="#libvo_002daacenc">libvo-aacenc</a>. However, be warned
+that it has a worse quality reported by some users.
+</p>
+<p>See also <a href="#libfdk_002daac_002denc">libfdk_aac</a> and <a href="#libfaac">libfaac</a>.
+</p>
+<a name="Options-8"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-8">8.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bit rate in bits/s. Setting this automatically activates constant bit rate
+(CBR) mode.
+</p>
+</dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Set quality for variable bit rate (VBR) mode. This option is valid only using
+the <code>ffmpeg</code> command-line tool. For library interface users, use
+‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>stereo_mode</samp>’</dt>
+<dd><p>Set stereo encoding mode. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatically selected by the encoder.
+</p>
+</dd>
+<dt> ‘<samp>ms_off</samp>’</dt>
+<dd><p>Disable middle/side encoding. This is the default.
+</p>
+</dd>
+<dt> ‘<samp>ms_force</samp>’</dt>
+<dd><p>Force middle/side encoding.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>aac_coder</samp>’</dt>
+<dd><p>Set AAC encoder coding method. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>faac</samp>’</dt>
+<dd><p>FAAC-inspired method.
+</p>
+<p>This method is a simplified reimplementation of the method used in FAAC, which
+sets thresholds proportional to the band energies, and then decreases all the
+thresholds with quantizer steps to find the appropriate quantization with
+distortion below threshold band by band.
+</p>
+<p>The quality of this method is comparable to the two loop searching method
+descibed below, but somewhat a little better and slower.
+</p>
+</dd>
+<dt> ‘<samp>anmr</samp>’</dt>
+<dd><p>Average noise to mask ratio (ANMR) trellis-based solution.
+</p>
+<p>This has a theoretic best quality out of all the coding methods, but at the
+cost of the slowest speed.
+</p>
+</dd>
+<dt> ‘<samp>twoloop</samp>’</dt>
+<dd><p>Two loop searching (TLS) method.
+</p>
+<p>This method first sets quantizers depending on band thresholds and then tries
+to find an optimal combination by adding or subtracting a specific value from
+all quantizers and adjusting some individual quantizer a little.
+</p>
+<p>This method produces similar quality with the FAAC method and is the default.
+</p>
+</dd>
+<dt> ‘<samp>fast</samp>’</dt>
+<dd><p>Constant quantizer method.
+</p>
+<p>This method sets a constant quantizer for all bands. This is the fastest of all
+the methods, yet produces the worst quality.
+</p>
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="ac3-and-ac3_005ffixed"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-ac3-and-ac3_005ffixed">8.2 ac3 and ac3_fixed</a></h2>
+
+<p>AC-3 audio encoders.
+</p>
+<p>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).
+</p>
+<p>The <var>ac3</var> encoder uses floating-point math, while the <var>ac3_fixed</var>
+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 <var>ac3_fixed</var> encoder is not the
+default codec for any of the output formats, so it must be specified explicitly
+using the option <code>-acodec ac3_fixed</code> in order to use it.
+</p>
+<a name="AC_002d3-Metadata"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-AC_002d3-Metadata">8.2.1 AC-3 Metadata</a></h3>
+
+<p>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.
+</p>
+<p>These parameters are described in detail in several publicly-available
+documents.
+</p><ul>
+<li> <a href="http://www.atsc.org/cms/standards/a_52-2010.pdf">A/52:2010 - Digital Audio Compression (AC-3) (E-AC-3) Standard</a>
+</li><li> <a href="http://www.atsc.org/cms/standards/a_54a_with_corr_1.pdf">A/54 - Guide to the Use of the ATSC Digital Television Standard</a>
+</li><li> <a href="http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/18_Metadata.Guide.pdf">Dolby Metadata Guide</a>
+</li><li> <a href="http://www.dolby.com/uploadedFiles/zz-_Shared_Assets/English_PDFs/Professional/46_DDEncodingGuidelines.pdf">Dolby Digital Professional Encoding Guidelines</a>
+</li></ul>
+
+<a name="Metadata-Control-Options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Metadata-Control-Options">8.2.1.1 Metadata Control Options</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-per_frame_metadata <var>boolean</var></samp>’</dt>
+<dd><p>Allow Per-Frame Metadata. Specifies if the encoder should check for changing
+metadata for each frame.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>The metadata values set at initialization will be used for every frame in the
+stream. (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Metadata values can be changed before encoding each frame.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Downmix-Levels"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Downmix-Levels">8.2.1.2 Downmix Levels</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-center_mixlev <var>level</var></samp>’</dt>
+<dd><p>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:
+</p><dl compact="compact">
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6dB gain
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-surround_mixlev <var>level</var></samp>’</dt>
+<dd><p>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:
+</p><dl compact="compact">
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3dB gain
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Surround Channel(s)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Audio-Production-Information"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Audio-Production-Information">8.2.1.3 Audio Production Information</a></h4>
+<p>Audio Production Information is optional information describing the mixing
+environment. Either none or both of the fields are written to the bitstream.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-mixing_level <var>number</var></samp>’</dt>
+<dd><p>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 <code>room_type</code> option is not the default value, the <code>mixing_level</code>
+option must not be -1.
+</p>
+</dd>
+<dt> ‘<samp>-room_type <var>type</var></samp>’</dt>
+<dd><p>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 <code>mixing_level</code>
+option and the <code>room_type</code> option have the default values.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>large</samp>’</dt>
+<dd><p>Large Room
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>small</samp>’</dt>
+<dd><p>Small Room
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Other-Metadata-Options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Other-Metadata-Options">8.2.1.4 Other Metadata Options</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-copyright <var>boolean</var></samp>’</dt>
+<dd><p>Copyright Indicator. Specifies whether a copyright exists for this audio.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>No Copyright Exists (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Copyright Exists
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-dialnorm <var>value</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>-dsur_mode <var>mode</var></samp>’</dt>
+<dd><p>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 <b>NOT</b> mean the encoder will actually
+apply Dolby Surround processing.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Not Dolby Surround Encoded
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Dolby Surround Encoded
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-original <var>boolean</var></samp>’</dt>
+<dd><p>Original Bit Stream Indicator. Specifies whether this audio is from the
+original source and not a copy.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Not Original Source
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Original Source (default)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Extended-Bitstream-Information"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Extended-Bitstream-Information">8.2.2 Extended Bitstream Information</a></h3>
+<p>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 <code>center_mixlev</code>
+and <code>surround_mixlev</code> options if it supports the Alternate Bit Stream
+Syntax.
+</p>
+<a name="Extended-Bitstream-Information-_002d-Part-1"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Extended-Bitstream-Information-_002d-Part-1">8.2.2.1 Extended Bitstream Information - Part 1</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-dmix_mode <var>mode</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>ltrt</samp>’</dt>
+<dd><p>Lt/Rt Downmix Preferred
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>loro</samp>’</dt>
+<dd><p>Lo/Ro Downmix Preferred
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-ltrt_cmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>1.414</samp>’</dt>
+<dd><p>Apply +3dB gain
+</p></dd>
+<dt> ‘<samp>1.189</samp>’</dt>
+<dd><p>Apply +1.5dB gain
+</p></dd>
+<dt> ‘<samp>1.000</samp>’</dt>
+<dd><p>Apply 0dB gain
+</p></dd>
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Center Channel
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-ltrt_surmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Surround Channel(s)
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-loro_cmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>1.414</samp>’</dt>
+<dd><p>Apply +3dB gain
+</p></dd>
+<dt> ‘<samp>1.189</samp>’</dt>
+<dd><p>Apply +1.5dB gain
+</p></dd>
+<dt> ‘<samp>1.000</samp>’</dt>
+<dd><p>Apply 0dB gain
+</p></dd>
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Center Channel
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-loro_surmixlev <var>level</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>0.841</samp>’</dt>
+<dd><p>Apply -1.5dB gain
+</p></dd>
+<dt> ‘<samp>0.707</samp>’</dt>
+<dd><p>Apply -3.0dB gain
+</p></dd>
+<dt> ‘<samp>0.595</samp>’</dt>
+<dd><p>Apply -4.5dB gain
+</p></dd>
+<dt> ‘<samp>0.500</samp>’</dt>
+<dd><p>Apply -6.0dB gain (default)
+</p></dd>
+<dt> ‘<samp>0.000</samp>’</dt>
+<dd><p>Silence Surround Channel(s)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Extended-Bitstream-Information-_002d-Part-2"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Extended-Bitstream-Information-_002d-Part-2">8.2.2.2 Extended Bitstream Information - Part 2</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>-dsurex_mode <var>mode</var></samp>’</dt>
+<dd><p>Dolby Surround EX Mode. Indicates whether the stream uses Dolby Surround EX
+(7.1 matrixed to 5.1). Using this option does <b>NOT</b> mean the encoder will actually
+apply Dolby Surround EX processing.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Dolby Surround EX Off
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Dolby Surround EX On
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-dheadphone_mode <var>mode</var></samp>’</dt>
+<dd><p>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 <b>NOT</b> mean the encoder will actually apply Dolby Headphone
+processing.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>notindicated</samp>’</dt>
+<dd><p>Not Indicated (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Dolby Headphone Off
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Dolby Headphone On
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-ad_conv_type <var>type</var></samp>’</dt>
+<dd><p>A/D Converter Type. Indicates whether the audio has passed through HDCD A/D
+conversion.
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>standard</samp>’</dt>
+<dd><p>Standard A/D Converter (default)
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>hdcd</samp>’</dt>
+<dd><p>HDCD A/D Converter
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Other-AC_002d3-Encoding-Options"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Other-AC_002d3-Encoding-Options">8.2.3 Other AC-3 Encoding Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-stereo_rematrixing <var>boolean</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+</dl>
+
+<a name="Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Floating_002dPoint_002dOnly-AC_002d3-Encoding-Options">8.2.4 Floating-Point-Only AC-3 Encoding Options</a></h3>
+
+<p>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.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-channel_coupling <var>boolean</var></samp>’</dt>
+<dd><p>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.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Selected by Encoder (default)
+</p></dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Disable Channel Coupling
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>Enable Channel Coupling
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-cpl_start_band <var>number</var></samp>’</dt>
+<dd><p>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 <var>auto</var> 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.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Selected by Encoder (default)
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<p><a name="libfaac"></a>
+</p><a name="libfaac-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libfaac-1">8.3 libfaac</a></h2>
+
+<p>libfaac AAC (Advanced Audio Coding) encoder wrapper.
+</p>
+<p>Requires the presence of the libfaac headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libfaac --enable-nonfree</code>.
+</p>
+<p>This encoder is considered to be of higher quality with respect to the
+<a href="#aacenc">the native experimental FFmpeg AAC encoder</a>.
+</p>
+<p>For more information see the libfaac project at
+<a href="http://www.audiocoding.com/faac.html/">http://www.audiocoding.com/faac.html/</a>.
+</p>
+<a name="Options-12"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-12">8.3.1 Options</a></h3>
+
+<p>The following shared FFmpeg codec options are recognized.
+</p>
+<p>The following options are supported by the libfaac wrapper. The
+<code>faac</code>-equivalent of the options are listed in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bit rate in bits/s for ABR (Average Bit Rate) mode. If the bit rate
+is not explicitly specified, it is automatically set to a suitable
+value depending on the selected profile. <code>faac</code> bitrate is
+expressed in kilobits/s.
+</p>
+<p>Note that libfaac does not support CBR (Constant Bit Rate) but only
+ABR (Average Bit Rate).
+</p>
+<p>If VBR mode is enabled this option is ignored.
+</p>
+</dd>
+<dt> ‘<samp>ar (<em>-R</em>)</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>ac (<em>-c</em>)</samp>’</dt>
+<dd><p>Set the number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>cutoff (<em>-C</em>)</samp>’</dt>
+<dd><p>Set cutoff frequency. If not specified (or explicitly set to 0) it
+will use a value automatically computed by the library. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>profile</samp>’</dt>
+<dd><p>Set audio profile.
+</p>
+<p>The following profiles are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>aac_main</samp>’</dt>
+<dd><p>Main AAC (Main)
+</p>
+</dd>
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dd><p>Low Complexity AAC (LC)
+</p>
+</dd>
+<dt> ‘<samp>aac_ssr</samp>’</dt>
+<dd><p>Scalable Sample Rate (SSR)
+</p>
+</dd>
+<dt> ‘<samp>aac_ltp</samp>’</dt>
+<dd><p>Long Term Prediction (LTP)
+</p></dd>
+</dl>
+
+<p>If not specified it is set to ‘<samp>aac_low</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>flags +qscale</samp>’</dt>
+<dd><p>Set constant quality VBR (Variable Bit Rate) mode.
+</p>
+</dd>
+<dt> ‘<samp>global_quality</samp>’</dt>
+<dd><p>Set quality in VBR mode as an integer number of lambda units.
+</p>
+<p>Only relevant when VBR mode is enabled with <code>flags +qscale</code>. The
+value is converted to QP units by dividing it by <code>FF_QP2LAMBDA</code>,
+and used to set the quality value used by libfaac. A reasonable range
+for the option value in QP units is [10-500], the higher the value the
+higher the quality.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-q</em>)</samp>’</dt>
+<dd><p>Enable VBR mode when set to a non-negative value, and set constant
+quality value as a double floating point value in QP units.
+</p>
+<p>The value sets the quality value used by libfaac. A reasonable range
+for the option value is [10-500], the higher the value the higher the
+quality.
+</p>
+<p>This option is valid only using the <code>ffmpeg</code> command-line
+tool. For library interface users, use ‘<samp>global_quality</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Examples-2">8.3.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to convert an audio file to ABR 128 kbps AAC in an M4A (MP4)
+container:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -codec:a libfaac -b:a 128k -output.m4a
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to convert an audio file to VBR AAC, using the
+LTP AAC profile:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -c:a libfaac -profile:a aac_ltp -q:a 100 output.m4a
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="libfdk_002daac_002denc"></a>
+</p><a name="libfdk_005faac"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libfdk_005faac">8.4 libfdk_aac</a></h2>
+
+<p>libfdk-aac AAC (Advanced Audio Coding) encoder wrapper.
+</p>
+<p>The libfdk-aac library is based on the Fraunhofer FDK AAC code from
+the Android project.
+</p>
+<p>Requires the presence of the libfdk-aac headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libfdk-aac</code>. The library is also incompatible with GPL,
+so if you allow the use of GPL, you should configure with
+<code>--enable-gpl --enable-nonfree --enable-libfdk-aac</code>.
+</p>
+<p>This encoder is considered to be of higher quality with respect to
+both <a href="#aacenc">the native experimental FFmpeg AAC encoder</a> and
+<a href="#libfaac">libfaac</a>.
+</p>
+<p>VBR encoding, enabled through the ‘<samp>vbr</samp>’ or ‘<samp>flags
++qscale</samp>’ options, is experimental and only works with some
+combinations of parameters.
+</p>
+<p>Support for encoding 7.1 audio is only available with libfdk-aac 0.1.3 or
+higher.
+</p>
+<p>For more information see the fdk-aac project at
+<a href="http://sourceforge.net/p/opencore-amr/fdk-aac/">http://sourceforge.net/p/opencore-amr/fdk-aac/</a>.
+</p>
+<a name="Options-13"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-13">8.4.1 Options</a></h3>
+
+<p>The following options are mapped on the shared FFmpeg codec options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bit rate in bits/s. If the bitrate is not explicitly specified, it
+is automatically set to a suitable value depending on the selected
+profile.
+</p>
+<p>In case VBR mode is enabled the option is ignored.
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>flags +qscale</samp>’</dt>
+<dd><p>Enable fixed quality, VBR (Variable Bit Rate) mode.
+Note that VBR is implicitly enabled when the ‘<samp>vbr</samp>’ value is
+positive.
+</p>
+</dd>
+<dt> ‘<samp>cutoff</samp>’</dt>
+<dd><p>Set cutoff frequency. If not specified (or explicitly set to 0) it
+will use a value automatically computed by the library. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>profile</samp>’</dt>
+<dd><p>Set audio profile.
+</p>
+<p>The following profiles are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dd><p>Low Complexity AAC (LC)
+</p>
+</dd>
+<dt> ‘<samp>aac_he</samp>’</dt>
+<dd><p>High Efficiency AAC (HE-AAC)
+</p>
+</dd>
+<dt> ‘<samp>aac_he_v2</samp>’</dt>
+<dd><p>High Efficiency AAC version 2 (HE-AACv2)
+</p>
+</dd>
+<dt> ‘<samp>aac_ld</samp>’</dt>
+<dd><p>Low Delay AAC (LD)
+</p>
+</dd>
+<dt> ‘<samp>aac_eld</samp>’</dt>
+<dd><p>Enhanced Low Delay AAC (ELD)
+</p></dd>
+</dl>
+
+<p>If not specified it is set to ‘<samp>aac_low</samp>’.
+</p></dd>
+</dl>
+
+<p>The following are private options of the libfdk_aac encoder.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>afterburner</samp>’</dt>
+<dd><p>Enable afterburner feature if set to 1, disabled if set to 0. This
+improves the quality but also the required processing power.
+</p>
+<p>Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>eld_sbr</samp>’</dt>
+<dd><p>Enable SBR (Spectral Band Replication) for ELD if set to 1, disabled
+if set to 0.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>signaling</samp>’</dt>
+<dd><p>Set SBR/PS signaling style.
+</p>
+<p>It can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>choose signaling implicitly (explicit hierarchical by default,
+implicit if global header is disabled)
+</p>
+</dd>
+<dt> ‘<samp>implicit</samp>’</dt>
+<dd><p>implicit backwards compatible signaling
+</p>
+</dd>
+<dt> ‘<samp>explicit_sbr</samp>’</dt>
+<dd><p>explicit SBR, implicit PS signaling
+</p>
+</dd>
+<dt> ‘<samp>explicit_hierarchical</samp>’</dt>
+<dd><p>explicit hierarchical signaling
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>default</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Output LATM/LOAS encapsulated data if set to 1, disabled if set to 0.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>header_period</samp>’</dt>
+<dd><p>Set StreamMuxConfig and PCE repetition period (in frames) for sending
+in-band configuration buffers within LATM/LOAS transport layer.
+</p>
+<p>Must be a 16-bits non-negative integer.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>vbr</samp>’</dt>
+<dd><p>Set VBR mode, from 1 to 5. 1 is lowest quality (though still pretty
+good) and 5 is highest quality. A value of 0 will disable VBR, and CBR
+(Constant Bit Rate) is enabled.
+</p>
+<p>Currently only the ‘<samp>aac_low</samp>’ profile supports VBR encoding.
+</p>
+<p>VBR modes 1-5 correspond to roughly the following average bit rates:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>32 kbps/channel
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dd><p>40 kbps/channel
+</p></dd>
+<dt> ‘<samp>3</samp>’</dt>
+<dd><p>48-56 kbps/channel
+</p></dd>
+<dt> ‘<samp>4</samp>’</dt>
+<dd><p>64 kbps/channel
+</p></dd>
+<dt> ‘<samp>5</samp>’</dt>
+<dd><p>about 80-96 kbps/channel
+</p></dd>
+</dl>
+
+<p>Default value is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Examples-1">8.4.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to convert an audio file to VBR AAC in an M4A (MP4)
+container:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to convert an audio file to CBR 64k kbps AAC, using the
+High-Efficiency AAC profile:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="libmp3lame"></a>
+</p><a name="libmp3lame-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libmp3lame-1">8.5 libmp3lame</a></h2>
+
+<p>LAME (Lame Ain’t an MP3 Encoder) MP3 encoder wrapper.
+</p>
+<p>Requires the presence of the libmp3lame headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libmp3lame</code>.
+</p>
+<p>See <a href="#libshine">libshine</a> for a fixed-point MP3 encoder, although with a
+lower quality.
+</p>
+<a name="Options-5"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-5">8.5.1 Options</a></h3>
+
+<p>The following options are supported by the libmp3lame wrapper. The
+<code>lame</code>-equivalent of the options are listed in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for CBR or ABR. LAME <code>bitrate</code> is
+expressed in kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-V</em>)</samp>’</dt>
+<dd><p>Set constant quality setting for VBR. This option is valid only
+using the <code>ffmpeg</code> command-line tool. For library interface
+users, use ‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>compression_level (<em>-q</em>)</samp>’</dt>
+<dd><p>Set algorithm quality. Valid arguments are integers in the 0-9 range,
+with 0 meaning highest quality but slowest, and 9 meaning fastest
+while producing the worst quality.
+</p>
+</dd>
+<dt> ‘<samp>reservoir</samp>’</dt>
+<dd><p>Enable use of bit reservoir when set to 1. Default value is 1. LAME
+has this enabled by default, but can be overridden by use
+‘<samp>--nores</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>joint_stereo (<em>-m j</em>)</samp>’</dt>
+<dd><p>Enable the encoder to use (on a frame by frame basis) either L/R
+stereo or mid/side stereo. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>abr (<em>--abr</em>)</samp>’</dt>
+<dd><p>Enable the encoder to use ABR when set to 1. The <code>lame</code>
+‘<samp>--abr</samp>’ sets the target bitrate, while this options only
+tells FFmpeg to use ABR still relies on ‘<samp>b</samp>’ to set bitrate.
+</p>
+</dd>
+</dl>
+
+<a name="libopencore_002damrnb-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libopencore_002damrnb-1">8.6 libopencore-amrnb</a></h2>
+
+<p>OpenCORE Adaptive Multi-Rate Narrowband encoder.
+</p>
+<p>Requires the presence of the libopencore-amrnb headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopencore-amrnb --enable-version3</code>.
+</p>
+<p>This is a mono-only encoder. Officially it only supports 8000Hz sample rate,
+but you can override it by setting ‘<samp>strict</samp>’ to ‘<samp>unofficial</samp>’ or
+lower.
+</p>
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options">8.6.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bitrate in bits per second. Only the following bitrates are supported,
+otherwise libavcodec will round to the nearest valid bitrate.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>4750</samp>’</dt>
+<dt> ‘<samp>5150</samp>’</dt>
+<dt> ‘<samp>5900</samp>’</dt>
+<dt> ‘<samp>6700</samp>’</dt>
+<dt> ‘<samp>7400</samp>’</dt>
+<dt> ‘<samp>7950</samp>’</dt>
+<dt> ‘<samp>10200</samp>’</dt>
+<dt> ‘<samp>12200</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dtx</samp>’</dt>
+<dd><p>Allow discontinuous transmission (generate comfort noise) when set to 1. The
+default value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<p><a name="libshine"></a>
+</p><a name="libshine-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libshine-1">8.7 libshine</a></h2>
+
+<p>Shine Fixed-Point MP3 encoder wrapper.
+</p>
+<p>Shine is a fixed-point MP3 encoder. It has a far better performance on
+platforms without an FPU, e.g. armel CPUs, and some phones and tablets.
+However, as it is more targeted on performance than quality, it is not on par
+with LAME and other production-grade encoders quality-wise. Also, according to
+the project’s homepage, this encoder may not be free of bugs as the code was
+written a long time ago and the project was dead for at least 5 years.
+</p>
+<p>This encoder only supports stereo and mono input. This is also CBR-only.
+</p>
+<p>The original project (last updated in early 2007) is at
+<a href="http://sourceforge.net/projects/libshine-fxp/">http://sourceforge.net/projects/libshine-fxp/</a>. We only support the
+updated fork by the Savonet/Liquidsoap project at <a href="https://github.com/savonet/shine">https://github.com/savonet/shine</a>.
+</p>
+<p>Requires the presence of the libshine headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libshine</code>.
+</p>
+<p>See also <a href="#libmp3lame">libmp3lame</a>.
+</p>
+<a name="Options-4"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-4">8.7.1 Options</a></h3>
+
+<p>The following options are supported by the libshine wrapper. The
+<code>shineenc</code>-equivalent of the options are listed in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for CBR. <code>shineenc</code> ‘<samp>-b</samp>’ option
+is expressed in kilobits/s.
+</p>
+</dd>
+</dl>
+
+<a name="libtwolame"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libtwolame">8.8 libtwolame</a></h2>
+
+<p>TwoLAME MP2 encoder wrapper.
+</p>
+<p>Requires the presence of the libtwolame headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libtwolame</code>.
+</p>
+<a name="Options-6"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-6">8.8.1 Options</a></h3>
+
+<p>The following options are supported by the libtwolame wrapper. The
+<code>twolame</code>-equivalent options follow the FFmpeg ones and are in
+parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for CBR. <code>twolame</code> ‘<samp>b</samp>’
+option is expressed in kilobits/s. Default value is 128k.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-V</em>)</samp>’</dt>
+<dd><p>Set quality for experimental VBR support. Maximum value range is
+from -50 to 50, useful range is from -10 to 10. The higher the
+value, the better the quality. This option is valid only using the
+<code>ffmpeg</code> command-line tool. For library interface users,
+use ‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>mode (<em>--mode</em>)</samp>’</dt>
+<dd><p>Set the mode of the resulting audio. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose mode automatically based on the input. This is the default.
+</p></dd>
+<dt> ‘<samp>stereo</samp>’</dt>
+<dd><p>Stereo
+</p></dd>
+<dt> ‘<samp>joint_stereo</samp>’</dt>
+<dd><p>Joint stereo
+</p></dd>
+<dt> ‘<samp>dual_channel</samp>’</dt>
+<dd><p>Dual channel
+</p></dd>
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>Mono
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>psymodel (<em>--psyc-mode</em>)</samp>’</dt>
+<dd><p>Set psychoacoustic model to use in encoding. The argument must be
+an integer between -1 and 4, inclusive. The higher the value, the
+better the quality. The default value is 3.
+</p>
+</dd>
+<dt> ‘<samp>energy_levels (<em>--energy</em>)</samp>’</dt>
+<dd><p>Enable energy levels extensions when set to 1. The default value is
+0 (disabled).
+</p>
+</dd>
+<dt> ‘<samp>error_protection (<em>--protect</em>)</samp>’</dt>
+<dd><p>Enable CRC error protection when set to 1. The default value is 0
+(disabled).
+</p>
+</dd>
+<dt> ‘<samp>copyright (<em>--copyright</em>)</samp>’</dt>
+<dd><p>Set MPEG audio copyright flag when set to 1. The default value is 0
+(disabled).
+</p>
+</dd>
+<dt> ‘<samp>original (<em>--original</em>)</samp>’</dt>
+<dd><p>Set MPEG audio original flag when set to 1. The default value is 0
+(disabled).
+</p>
+</dd>
+</dl>
+
+<p><a name="libvo_002daacenc"></a>
+</p><a name="libvo_002daacenc-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libvo_002daacenc-1">8.9 libvo-aacenc</a></h2>
+
+<p>VisualOn AAC encoder.
+</p>
+<p>Requires the presence of the libvo-aacenc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libvo-aacenc --enable-version3</code>.
+</p>
+<p>This encoder is considered to be worse than the
+<a href="#aacenc">native experimental FFmpeg AAC encoder</a>, according to
+multiple sources.
+</p>
+<a name="Options-17"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-17">8.9.1 Options</a></h3>
+
+<p>The VisualOn AAC encoder only support encoding AAC-LC and up to 2
+channels. It is also CBR-only.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bit rate in bits/s.
+</p>
+</dd>
+</dl>
+
+<a name="libvo_002damrwbenc"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libvo_002damrwbenc">8.10 libvo-amrwbenc</a></h2>
+
+<p>VisualOn Adaptive Multi-Rate Wideband encoder.
+</p>
+<p>Requires the presence of the libvo-amrwbenc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libvo-amrwbenc --enable-version3</code>.
+</p>
+<p>This is a mono-only encoder. Officially it only supports 16000Hz sample
+rate, but you can override it by setting ‘<samp>strict</samp>’ to
+‘<samp>unofficial</samp>’ or lower.
+</p>
+<a name="Options-3"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-3">8.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Only the following bitrates are supported, otherwise
+libavcodec will round to the nearest valid bitrate.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>6600</samp>’</dt>
+<dt> ‘<samp>8850</samp>’</dt>
+<dt> ‘<samp>12650</samp>’</dt>
+<dt> ‘<samp>14250</samp>’</dt>
+<dt> ‘<samp>15850</samp>’</dt>
+<dt> ‘<samp>18250</samp>’</dt>
+<dt> ‘<samp>19850</samp>’</dt>
+<dt> ‘<samp>23050</samp>’</dt>
+<dt> ‘<samp>23850</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dtx</samp>’</dt>
+<dd><p>Allow discontinuous transmission (generate comfort noise) when set to 1. The
+default value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libopus"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libopus">8.11 libopus</a></h2>
+
+<p>libopus Opus Interactive Audio Codec encoder wrapper.
+</p>
+<p>Requires the presence of the libopus headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopus</code>.
+</p>
+<a name="Option-Mapping"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Option-Mapping">8.11.1 Option Mapping</a></h3>
+
+<p>Most libopus options are modeled after the <code>opusenc</code> utility from
+opus-tools. The following is an option mapping chart describing options
+supported by the libopus wrapper, and their <code>opusenc</code>-equivalent
+in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>bitrate</em>)</samp>’</dt>
+<dd><p>Set the bit rate in bits/s. FFmpeg’s ‘<samp>b</samp>’ option is
+expressed in bits/s, while <code>opusenc</code>’s ‘<samp>bitrate</samp>’ in
+kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>vbr (<em>vbr</em>, <em>hard-cbr</em>, and <em>cvbr</em>)</samp>’</dt>
+<dd><p>Set VBR mode. The FFmpeg ‘<samp>vbr</samp>’ option has the following
+valid arguments, with the their <code>opusenc</code> equivalent options
+in parentheses:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>off (<em>hard-cbr</em>)</samp>’</dt>
+<dd><p>Use constant bit rate encoding.
+</p>
+</dd>
+<dt> ‘<samp>on (<em>vbr</em>)</samp>’</dt>
+<dd><p>Use variable bit rate encoding (the default).
+</p>
+</dd>
+<dt> ‘<samp>constrained (<em>cvbr</em>)</samp>’</dt>
+<dd><p>Use constrained variable bit rate encoding.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>compression_level (<em>comp</em>)</samp>’</dt>
+<dd><p>Set encoding algorithm complexity. Valid options are integers in
+the 0-10 range. 0 gives the fastest encodes but lower quality, while 10
+gives the highest quality but slowest encoding. The default is 10.
+</p>
+</dd>
+<dt> ‘<samp>frame_duration (<em>framesize</em>)</samp>’</dt>
+<dd><p>Set maximum frame size, or duration of a frame in milliseconds. The
+argument must be exactly the following: 2.5, 5, 10, 20, 40, 60. Smaller
+frame sizes achieve lower latency but less quality at a given bitrate.
+Sizes greater than 20ms are only interesting at fairly low bitrates.
+The default is 20ms.
+</p>
+</dd>
+<dt> ‘<samp>packet_loss (<em>expect-loss</em>)</samp>’</dt>
+<dd><p>Set expected packet loss percentage. The default is 0.
+</p>
+</dd>
+<dt> ‘<samp>application (N.A.)</samp>’</dt>
+<dd><p>Set intended application type. Valid options are listed below:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>voip</samp>’</dt>
+<dd><p>Favor improved speech intelligibility.
+</p></dd>
+<dt> ‘<samp>audio</samp>’</dt>
+<dd><p>Favor faithfulness to the input (the default).
+</p></dd>
+<dt> ‘<samp>lowdelay</samp>’</dt>
+<dd><p>Restrict to only the lowest delay modes.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cutoff (N.A.)</samp>’</dt>
+<dd><p>Set cutoff bandwidth in Hz. The argument must be exactly one of the
+following: 4000, 6000, 8000, 12000, or 20000, corresponding to
+narrowband, mediumband, wideband, super wideband, and fullband
+respectively. The default is 0 (cutoff disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libvorbis"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libvorbis">8.12 libvorbis</a></h2>
+
+<p>libvorbis encoder wrapper.
+</p>
+<p>Requires the presence of the libvorbisenc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libvorbis</code>.
+</p>
+<a name="Options-10"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-10">8.12.1 Options</a></h3>
+
+<p>The following options are supported by the libvorbis wrapper. The
+<code>oggenc</code>-equivalent of the options are listed in parentheses.
+</p>
+<p>To get a more accurate and extensive documentation of the libvorbis
+options, consult the libvorbisenc’s and <code>oggenc</code>’s documentations.
+See <a href="http://xiph.org/vorbis/">http://xiph.org/vorbis/</a>,
+<a href="http://wiki.xiph.org/Vorbis-tools">http://wiki.xiph.org/Vorbis-tools</a>, and oggenc(1).
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>-b</em>)</samp>’</dt>
+<dd><p>Set bitrate expressed in bits/s for ABR. <code>oggenc</code> ‘<samp>-b</samp>’ is
+expressed in kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>q (<em>-q</em>)</samp>’</dt>
+<dd><p>Set constant quality setting for VBR. The value should be a float
+number in the range of -1.0 to 10.0. The higher the value, the better
+the quality. The default value is ‘<samp>3.0</samp>’.
+</p>
+<p>This option is valid only using the <code>ffmpeg</code> command-line tool.
+For library interface users, use ‘<samp>global_quality</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>cutoff (<em>--advanced-encode-option lowpass_frequency=N</em>)</samp>’</dt>
+<dd><p>Set cutoff bandwidth in Hz, a value of 0 disables cutoff. <code>oggenc</code>’s
+related option is expressed in kHz. The default value is ‘<samp>0</samp>’ (cutoff
+disabled).
+</p>
+</dd>
+<dt> ‘<samp>minrate (<em>-m</em>)</samp>’</dt>
+<dd><p>Set minimum bitrate expressed in bits/s. <code>oggenc</code> ‘<samp>-m</samp>’ is
+expressed in kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>maxrate (<em>-M</em>)</samp>’</dt>
+<dd><p>Set maximum bitrate expressed in bits/s. <code>oggenc</code> ‘<samp>-M</samp>’ is
+expressed in kilobits/s. This only has effect on ABR mode.
+</p>
+</dd>
+<dt> ‘<samp>iblock (<em>--advanced-encode-option impulse_noisetune=N</em>)</samp>’</dt>
+<dd><p>Set noise floor bias for impulse blocks. The value is a float number from
+-15.0 to 0.0. A negative bias instructs the encoder to pay special attention
+to the crispness of transients in the encoded audio. The tradeoff for better
+transient response is a higher bitrate.
+</p>
+</dd>
+</dl>
+
+<p><a name="libwavpack"></a>
+</p><a name="libwavpack-1"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libwavpack-1">8.13 libwavpack</a></h2>
+
+<p>A wrapper providing WavPack encoding through libwavpack.
+</p>
+<p>Only lossless mode using 32-bit integer samples is supported currently.
+</p>
+<p>Requires the presence of the libwavpack headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libwavpack</code>.
+</p>
+<p>Note that a libavcodec-native encoder for the WavPack codec exists so users can
+encode audios with this codec without using this encoder. See <a href="#wavpackenc">wavpackenc</a>.
+</p>
+<a name="Options-15"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-15">8.13.1 Options</a></h3>
+
+<p><code>wavpack</code> command line utility’s corresponding options are listed in
+parentheses, if any.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frame_size (<em>--blocksize</em>)</samp>’</dt>
+<dd><p>Default is 32768.
+</p>
+</dd>
+<dt> ‘<samp>compression_level</samp>’</dt>
+<dd><p>Set speed vs. compression tradeoff. Acceptable arguments are listed below:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0 (<em>-f</em>)</samp>’</dt>
+<dd><p>Fast mode.
+</p>
+</dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Normal (default) settings.
+</p>
+</dd>
+<dt> ‘<samp>2 (<em>-h</em>)</samp>’</dt>
+<dd><p>High quality.
+</p>
+</dd>
+<dt> ‘<samp>3 (<em>-hh</em>)</samp>’</dt>
+<dd><p>Very high quality.
+</p>
+</dd>
+<dt> ‘<samp>4-8 (<em>-hh -x</em><var>EXTRAPROC</var>)</samp>’</dt>
+<dd><p>Same as ‘<samp>3</samp>’, but with extra processing enabled.
+</p>
+<p>‘<samp>4</samp>’ is the same as ‘<samp>-x2</samp>’ and ‘<samp>8</samp>’ is the same as ‘<samp>-x6</samp>’.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<p><a name="wavpackenc"></a>
+</p><a name="wavpack"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-wavpack">8.14 wavpack</a></h2>
+
+<p>WavPack lossless audio encoder.
+</p>
+<p>This is a libavcodec-native WavPack encoder. There is also an encoder based on
+libwavpack, but there is virtually no reason to use that encoder.
+</p>
+<p>See also <a href="#libwavpack">libwavpack</a>.
+</p>
+<a name="Options-11"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-11">8.14.1 Options</a></h3>
+
+<p>The equivalent options for <code>wavpack</code> command line utility are listed in
+parentheses.
+</p>
+<a name="Shared-options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Shared-options">8.14.1.1 Shared options</a></h4>
+
+<p>The following shared options are effective for this encoder. Only special notes
+about this particular encoder will be documented here. For the general meaning
+of the options, see <a href="#codec_002doptions">the Codec Options chapter</a>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frame_size (<em>--blocksize</em>)</samp>’</dt>
+<dd><p>For this encoder, the range for this option is between 128 and 131072. Default
+is automatically decided based on sample rate and number of channel.
+</p>
+<p>For the complete formula of calculating default, see
+‘<tt>libavcodec/wavpackenc.c</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>compression_level (<em>-f</em>, <em>-h</em>, <em>-hh</em>, and <em>-x</em>)</samp>’</dt>
+<dd><p>This option’s syntax is consistent with <a href="#libwavpack">libwavpack</a>’s.
+</p></dd>
+</dl>
+
+<a name="Private-options"></a>
+<h4 class="subsubsection"><a href="ffmpeg-codecs.html#toc-Private-options">8.14.1.2 Private options</a></h4>
+
+<dl compact="compact">
+<dt> ‘<samp>joint_stereo (<em>-j</em>)</samp>’</dt>
+<dd><p>Set whether to enable joint stereo. Valid values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>on (<em>1</em>)</samp>’</dt>
+<dd><p>Force mid/side audio encoding.
+</p></dd>
+<dt> ‘<samp>off (<em>0</em>)</samp>’</dt>
+<dd><p>Force left/right audio encoding.
+</p></dd>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Let the encoder decide automatically.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>optimize_mono</samp>’</dt>
+<dd><p>Set whether to enable optimization for mono. This option is only effective for
+non-mono streams. Available values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>on</samp>’</dt>
+<dd><p>enabled
+</p></dd>
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>disabled
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="Video-Encoders"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Video-Encoders">9. Video Encoders</a></h1>
+
+<p>A description of some of the currently available video encoders
+follows.
+</p>
+<a name="libtheora"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libtheora">9.1 libtheora</a></h2>
+
+<p>libtheora Theora encoder wrapper.
+</p>
+<p>Requires the presence of the libtheora headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libtheora</code>.
+</p>
+<p>For more information about the libtheora project see
+<a href="http://www.theora.org/">http://www.theora.org/</a>.
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-1">9.1.1 Options</a></h3>
+
+<p>The following global options are mapped to internal libtheora options
+which affect the quality and the bitrate of the encoded stream.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Set the video bitrate in bit/s for CBR (Constant Bit Rate) mode. In
+case VBR (Variable Bit Rate) mode is enabled this option is ignored.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Used to enable constant quality mode (VBR) encoding through the
+‘<samp>qscale</samp>’ flag, and to enable the <code>pass1</code> and <code>pass2</code>
+modes.
+</p>
+</dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>Set the GOP size.
+</p>
+</dd>
+<dt> ‘<samp>global_quality</samp>’</dt>
+<dd><p>Set the global quality as an integer in lambda units.
+</p>
+<p>Only relevant when VBR mode is enabled with <code>flags +qscale</code>. The
+value is converted to QP units by dividing it by <code>FF_QP2LAMBDA</code>,
+clipped in the [0 - 10] range, and then multiplied by 6.3 to get a
+value in the native libtheora range [0-63]. A higher value corresponds
+to a higher quality.
+</p>
+</dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Enable VBR mode when set to a non-negative value, and set constant
+quality value as a double floating point value in QP units.
+</p>
+<p>The value is clipped in the [0-10] range, and then multiplied by 6.3
+to get a value in the native libtheora range [0-63].
+</p>
+<p>This option is valid only using the <code>ffmpeg</code> command-line
+tool. For library interface users, use ‘<samp>global_quality</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Examples">9.1.2 Examples</a></h3>
+
+<ul>
+<li>
+Set maximum constant quality (VBR) encoding with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to convert a CBR 1000 kbps Theora video stream:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
+</pre></td></tr></table>
+</li></ul>
+
+<a name="libvpx"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libvpx">9.2 libvpx</a></h2>
+
+<p>VP8 format supported through libvpx.
+</p>
+<p>Requires the presence of the libvpx headers and library during configuration.
+You need to explicitly configure the build with <code>--enable-libvpx</code>.
+</p>
+<a name="Options-20"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-20">9.2.1 Options</a></h3>
+
+<p>Mapping from FFmpeg to libvpx options with conversion notes in parentheses.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>threads</samp>’</dt>
+<dd><p>g_threads
+</p>
+</dd>
+<dt> ‘<samp>profile</samp>’</dt>
+<dd><p>g_profile
+</p>
+</dd>
+<dt> ‘<samp>vb</samp>’</dt>
+<dd><p>rc_target_bitrate
+</p>
+</dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>kf_max_dist
+</p>
+</dd>
+<dt> ‘<samp>keyint_min</samp>’</dt>
+<dd><p>kf_min_dist
+</p>
+</dd>
+<dt> ‘<samp>qmin</samp>’</dt>
+<dd><p>rc_min_quantizer
+</p>
+</dd>
+<dt> ‘<samp>qmax</samp>’</dt>
+<dd><p>rc_max_quantizer
+</p>
+</dd>
+<dt> ‘<samp>bufsize, vb</samp>’</dt>
+<dd><p>rc_buf_sz
+<code>(bufsize * 1000 / vb)</code>
+</p>
+<p>rc_buf_optimal_sz
+<code>(bufsize * 1000 / vb * 5 / 6)</code>
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy, vb</samp>’</dt>
+<dd><p>rc_buf_initial_sz
+<code>(rc_init_occupancy * 1000 / vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>rc_buffer_aggressivity</samp>’</dt>
+<dd><p>rc_undershoot_pct
+</p>
+</dd>
+<dt> ‘<samp>skip_threshold</samp>’</dt>
+<dd><p>rc_dropframe_thresh
+</p>
+</dd>
+<dt> ‘<samp>qcomp</samp>’</dt>
+<dd><p>rc_2pass_vbr_bias_pct
+</p>
+</dd>
+<dt> ‘<samp>maxrate, vb</samp>’</dt>
+<dd><p>rc_2pass_vbr_maxsection_pct
+<code>(maxrate * 100 / vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>minrate, vb</samp>’</dt>
+<dd><p>rc_2pass_vbr_minsection_pct
+<code>(minrate * 100 / vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>minrate, maxrate, vb</samp>’</dt>
+<dd><p><code>VPX_CBR</code>
+<code>(minrate == maxrate == vb)</code>
+</p>
+</dd>
+<dt> ‘<samp>crf</samp>’</dt>
+<dd><p><code>VPX_CQ</code>, <code>VP8E_SET_CQ_LEVEL</code>
+</p>
+</dd>
+<dt> ‘<samp>quality</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp><var>best</var></samp>’</dt>
+<dd><p><code>VPX_DL_BEST_QUALITY</code>
+</p></dd>
+<dt> ‘<samp><var>good</var></samp>’</dt>
+<dd><p><code>VPX_DL_GOOD_QUALITY</code>
+</p></dd>
+<dt> ‘<samp><var>realtime</var></samp>’</dt>
+<dd><p><code>VPX_DL_REALTIME</code>
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>speed</samp>’</dt>
+<dd><p><code>VP8E_SET_CPUUSED</code>
+</p>
+</dd>
+<dt> ‘<samp>nr</samp>’</dt>
+<dd><p><code>VP8E_SET_NOISE_SENSITIVITY</code>
+</p>
+</dd>
+<dt> ‘<samp>mb_threshold</samp>’</dt>
+<dd><p><code>VP8E_SET_STATIC_THRESHOLD</code>
+</p>
+</dd>
+<dt> ‘<samp>slices</samp>’</dt>
+<dd><p><code>VP8E_SET_TOKEN_PARTITIONS</code>
+</p>
+</dd>
+<dt> ‘<samp>max-intra-rate</samp>’</dt>
+<dd><p><code>VP8E_SET_MAX_INTRA_BITRATE_PCT</code>
+</p>
+</dd>
+<dt> ‘<samp>force_key_frames</samp>’</dt>
+<dd><p><code>VPX_EFLAG_FORCE_KF</code>
+</p>
+</dd>
+<dt> ‘<samp>Alternate reference frame related</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>vp8flags altref</samp>’</dt>
+<dd><p><code>VP8E_SET_ENABLEAUTOALTREF</code>
+</p></dd>
+<dt> ‘<samp><var>arnr_max_frames</var></samp>’</dt>
+<dd><p><code>VP8E_SET_ARNR_MAXFRAMES</code>
+</p></dd>
+<dt> ‘<samp><var>arnr_type</var></samp>’</dt>
+<dd><p><code>VP8E_SET_ARNR_TYPE</code>
+</p></dd>
+<dt> ‘<samp><var>arnr_strength</var></samp>’</dt>
+<dd><p><code>VP8E_SET_ARNR_STRENGTH</code>
+</p></dd>
+<dt> ‘<samp><var>rc_lookahead</var></samp>’</dt>
+<dd><p>g_lag_in_frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vp8flags error_resilient</samp>’</dt>
+<dd><p>g_error_resilient
+</p>
+</dd>
+</dl>
+
+<p>For more information about libvpx see:
+<a href="http://www.webmproject.org/">http://www.webmproject.org/</a>
+</p>
+
+<a name="libwebp"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libwebp">9.3 libwebp</a></h2>
+
+<p>libwebp WebP Image encoder wrapper
+</p>
+<p>libwebp is Google’s official encoder for WebP images. It can encode in either
+lossy or lossless mode. Lossy images are essentially a wrapper around a VP8
+frame. Lossless images are a separate codec developed by Google.
+</p>
+<a name="Pixel-Format"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Pixel-Format">9.3.1 Pixel Format</a></h3>
+
+<p>Currently, libwebp only supports YUV420 for lossy and RGB for lossless due
+to limitations of the format and libwebp. Alpha is supported for either mode.
+Because of API limitations, if RGB is passed in when encoding lossy or YUV is
+passed in for encoding lossless, the pixel format will automatically be
+converted using functions from libwebp. This is not ideal and is done only for
+convenience.
+</p>
+<a name="Options-7"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-7">9.3.2 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-lossless <var>boolean</var></samp>’</dt>
+<dd><p>Enables/Disables use of lossless mode. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>-compression_level <var>integer</var></samp>’</dt>
+<dd><p>For lossy, this is a quality/speed tradeoff. Higher values give better quality
+for a given size at the cost of increased encoding time. For lossless, this is
+a size/speed tradeoff. Higher values give smaller size at the cost of increased
+encoding time. More specifically, it controls the number of extra algorithms
+and compression tools used, and varies the combination of these tools. This
+maps to the <var>method</var> option in libwebp. The valid range is 0 to 6.
+Default is 4.
+</p>
+</dd>
+<dt> ‘<samp>-qscale <var>float</var></samp>’</dt>
+<dd><p>For lossy encoding, this controls image quality, 0 to 100. For lossless
+encoding, this controls the effort and time spent at compressing more. The
+default value is 75. Note that for usage via libavcodec, this option is called
+<var>global_quality</var> and must be multiplied by <var>FF_QP2LAMBDA</var>.
+</p>
+</dd>
+<dt> ‘<samp>-preset <var>type</var></samp>’</dt>
+<dd><p>Configuration preset. This does some automatic settings based on the general
+type of the image.
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do not use a preset.
+</p></dd>
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Use the encoder default.
+</p></dd>
+<dt> ‘<samp>picture</samp>’</dt>
+<dd><p>Digital picture, like portrait, inner shot
+</p></dd>
+<dt> ‘<samp>photo</samp>’</dt>
+<dd><p>Outdoor photograph, with natural lighting
+</p></dd>
+<dt> ‘<samp>drawing</samp>’</dt>
+<dd><p>Hand or line drawing, with high-contrast details
+</p></dd>
+<dt> ‘<samp>icon</samp>’</dt>
+<dd><p>Small-sized colorful images
+</p></dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>Text-like
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="libx264_002c-libx264rgb"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libx264_002c-libx264rgb">9.4 libx264, libx264rgb</a></h2>
+
+<p>x264 H.264/MPEG-4 AVC encoder wrapper.
+</p>
+<p>This encoder requires the presence of the libx264 headers and library
+during configuration. You need to explicitly configure the build with
+<code>--enable-libx264</code>.
+</p>
+<p>libx264 supports an impressive number of features, including 8x8 and
+4x4 adaptive spatial transform, adaptive B-frame placement, CAVLC/CABAC
+entropy coding, interlacing (MBAFF), lossless mode, psy optimizations
+for detail retention (adaptive quantization, psy-RD, psy-trellis).
+</p>
+<p>Many libx264 encoder options are mapped to FFmpeg global codec
+options, while unique encoder options are provided through private
+options. Additionally the ‘<samp>x264opts</samp>’ and ‘<samp>x264-params</samp>’
+private options allows one to pass a list of key=value tuples as accepted
+by the libx264 <code>x264_param_parse</code> function.
+</p>
+<p>The x264 project website is at
+<a href="http://www.videolan.org/developers/x264.html">http://www.videolan.org/developers/x264.html</a>.
+</p>
+<p>The libx264rgb encoder is the same as libx264, except it accepts packed RGB
+pixel formats as input instead of YUV.
+</p>
+<a name="Supported-Pixel-Formats"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Supported-Pixel-Formats">9.4.1 Supported Pixel Formats</a></h3>
+
+<p>x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at
+x264’s configure time. FFmpeg only supports one bit depth in one particular
+build. In other words, it is not possible to build one FFmpeg with multiple
+versions of x264 with different bit depths.
+</p>
+<a name="Options-19"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-19">9.4.2 Options</a></h3>
+
+<p>The following options are supported by the libx264 wrapper. The
+<code>x264</code>-equivalent options or values are listed in parentheses
+for easy migration.
+</p>
+<p>To reduce the duplication of documentation, only the private options
+and some others requiring special attention are documented here. For
+the documentation of the undocumented generic options, see
+<a href="#codec_002doptions">the Codec Options chapter</a>.
+</p>
+<p>To get a more accurate and extensive documentation of the libx264
+options, invoke the command <code>x264 --full-help</code> or consult
+the libx264 documentation.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b (<em>bitrate</em>)</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Note that FFmpeg’s ‘<samp>b</samp>’ option is
+expressed in bits/s, while <code>x264</code>’s ‘<samp>bitrate</samp>’ is in
+kilobits/s.
+</p>
+</dd>
+<dt> ‘<samp>bf (<em>bframes</em>)</samp>’</dt>
+<dt> ‘<samp>g (<em>keyint</em>)</samp>’</dt>
+<dt> ‘<samp>qmax (<em>qpmax</em>)</samp>’</dt>
+<dt> ‘<samp>qmin (<em>qpmin</em>)</samp>’</dt>
+<dt> ‘<samp>qdiff (<em>qpstep</em>)</samp>’</dt>
+<dt> ‘<samp>qblur (<em>qblur</em>)</samp>’</dt>
+<dt> ‘<samp>qcomp (<em>qcomp</em>)</samp>’</dt>
+<dt> ‘<samp>refs (<em>ref</em>)</samp>’</dt>
+<dt> ‘<samp>sc_threshold (<em>scenecut</em>)</samp>’</dt>
+<dt> ‘<samp>trellis (<em>trellis</em>)</samp>’</dt>
+<dt> ‘<samp>nr (<em>nr</em>)</samp>’</dt>
+<dt> ‘<samp>me_range (<em>merange</em>)</samp>’</dt>
+<dt> ‘<samp>me_method (<em>me</em>)</samp>’</dt>
+<dd><p>Set motion estimation method. Possible values in the decreasing order
+of speed:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dia (<em>dia</em>)</samp>’</dt>
+<dt> ‘<samp>epzs (<em>dia</em>)</samp>’</dt>
+<dd><p>Diamond search with radius 1 (fastest). ‘<samp>epzs</samp>’ is an alias for
+‘<samp>dia</samp>’.
+</p></dd>
+<dt> ‘<samp>hex (<em>hex</em>)</samp>’</dt>
+<dd><p>Hexagonal search with radius 2.
+</p></dd>
+<dt> ‘<samp>umh (<em>umh</em>)</samp>’</dt>
+<dd><p>Uneven multi-hexagon search.
+</p></dd>
+<dt> ‘<samp>esa (<em>esa</em>)</samp>’</dt>
+<dd><p>Exhaustive search.
+</p></dd>
+<dt> ‘<samp>tesa (<em>tesa</em>)</samp>’</dt>
+<dd><p>Hadamard exhaustive search (slowest).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>subq (<em>subme</em>)</samp>’</dt>
+<dt> ‘<samp>b_strategy (<em>b-adapt</em>)</samp>’</dt>
+<dt> ‘<samp>keyint_min (<em>min-keyint</em>)</samp>’</dt>
+<dt> ‘<samp>coder</samp>’</dt>
+<dd><p>Set entropy encoder. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>Enable CABAC.
+</p>
+</dd>
+<dt> ‘<samp>vlc</samp>’</dt>
+<dd><p>Enable CAVLC and disable CABAC. It generates the same effect as
+<code>x264</code>’s ‘<samp>--no-cabac</samp>’ option.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cmp</samp>’</dt>
+<dd><p>Set full pixel motion estimation comparation algorithm. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Enable chroma in motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>Ignore chroma in motion estimation. It generates the same effect as
+<code>x264</code>’s ‘<samp>--no-chroma-me</samp>’ option.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>threads (<em>threads</em>)</samp>’</dt>
+<dt> ‘<samp>thread_type</samp>’</dt>
+<dd><p>Set multithreading technique. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>slice</samp>’</dt>
+<dd><p>Slice-based multithreading. It generates the same effect as
+<code>x264</code>’s ‘<samp>--sliced-threads</samp>’ option.
+</p></dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Frame-based multithreading.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set encoding flags. It can be used to disable closed GOP and enable
+open GOP by setting it to <code>-cgop</code>. The result is similar to
+the behavior of <code>x264</code>’s ‘<samp>--open-gop</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy (<em>vbv-init</em>)</samp>’</dt>
+<dt> ‘<samp>preset (<em>preset</em>)</samp>’</dt>
+<dd><p>Set the encoding preset.
+</p>
+</dd>
+<dt> ‘<samp>tune (<em>tune</em>)</samp>’</dt>
+<dd><p>Set tuning of the encoding params.
+</p>
+</dd>
+<dt> ‘<samp>profile (<em>profile</em>)</samp>’</dt>
+<dd><p>Set profile restrictions.
+</p>
+</dd>
+<dt> ‘<samp>fastfirstpass</samp>’</dt>
+<dd><p>Enable fast settings when encoding first pass, when set to 1. When set
+to 0, it has the same effect of <code>x264</code>’s
+‘<samp>--slow-firstpass</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>crf (<em>crf</em>)</samp>’</dt>
+<dd><p>Set the quality for constant quality mode.
+</p>
+</dd>
+<dt> ‘<samp>crf_max (<em>crf-max</em>)</samp>’</dt>
+<dd><p>In CRF mode, prevents VBV from lowering quality beyond this point.
+</p>
+</dd>
+<dt> ‘<samp>qp (<em>qp</em>)</samp>’</dt>
+<dd><p>Set constant quantization rate control method parameter.
+</p>
+</dd>
+<dt> ‘<samp>aq-mode (<em>aq-mode</em>)</samp>’</dt>
+<dd><p>Set AQ method. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>0</em>)</samp>’</dt>
+<dd><p>Disabled.
+</p>
+</dd>
+<dt> ‘<samp>variance (<em>1</em>)</samp>’</dt>
+<dd><p>Variance AQ (complexity mask).
+</p>
+</dd>
+<dt> ‘<samp>autovariance (<em>2</em>)</samp>’</dt>
+<dd><p>Auto-variance AQ (experimental).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>aq-strength (<em>aq-strength</em>)</samp>’</dt>
+<dd><p>Set AQ strength, reduce blocking and blurring in flat and textured areas.
+</p>
+</dd>
+<dt> ‘<samp>psy</samp>’</dt>
+<dd><p>Use psychovisual optimizations when set to 1. When set to 0, it has the
+same effect as <code>x264</code>’s ‘<samp>--no-psy</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>psy-rd (<em>psy-rd</em>)</samp>’</dt>
+<dd><p>Set strength of psychovisual optimization, in
+<var>psy-rd</var>:<var>psy-trellis</var> format.
+</p>
+</dd>
+<dt> ‘<samp>rc-lookahead (<em>rc-lookahead</em>)</samp>’</dt>
+<dd><p>Set number of frames to look ahead for frametype and ratecontrol.
+</p>
+</dd>
+<dt> ‘<samp>weightb</samp>’</dt>
+<dd><p>Enable weighted prediction for B-frames when set to 1. When set to 0,
+it has the same effect as <code>x264</code>’s ‘<samp>--no-weightb</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>weightp (<em>weightp</em>)</samp>’</dt>
+<dd><p>Set weighted prediction method for P-frames. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>0</em>)</samp>’</dt>
+<dd><p>Disabled
+</p></dd>
+<dt> ‘<samp>simple (<em>1</em>)</samp>’</dt>
+<dd><p>Enable only weighted refs
+</p></dd>
+<dt> ‘<samp>smart (<em>2</em>)</samp>’</dt>
+<dd><p>Enable both weighted refs and duplicates
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ssim (<em>ssim</em>)</samp>’</dt>
+<dd><p>Enable calculation and printing SSIM stats after the encoding.
+</p>
+</dd>
+<dt> ‘<samp>intra-refresh (<em>intra-refresh</em>)</samp>’</dt>
+<dd><p>Enable the use of Periodic Intra Refresh instead of IDR frames when set
+to 1.
+</p>
+</dd>
+<dt> ‘<samp>bluray-compat (<em>bluray-compat</em>)</samp>’</dt>
+<dd><p>Configure the encoder to be compatible with the bluray standard.
+It is a shorthand for setting "bluray-compat=1 force-cfr=1".
+</p>
+</dd>
+<dt> ‘<samp>b-bias (<em>b-bias</em>)</samp>’</dt>
+<dd><p>Set the influence on how often B-frames are used.
+</p>
+</dd>
+<dt> ‘<samp>b-pyramid (<em>b-pyramid</em>)</samp>’</dt>
+<dd><p>Set method for keeping of some B-frames as references. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Disabled.
+</p></dd>
+<dt> ‘<samp>strict (<em>strict</em>)</samp>’</dt>
+<dd><p>Strictly hierarchical pyramid.
+</p></dd>
+<dt> ‘<samp>normal (<em>normal</em>)</samp>’</dt>
+<dd><p>Non-strict (not Blu-ray compatible).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>mixed-refs</samp>’</dt>
+<dd><p>Enable the use of one reference per partition, as opposed to one
+reference per macroblock when set to 1. When set to 0, it has the
+same effect as <code>x264</code>’s ‘<samp>--no-mixed-refs</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>8x8dct</samp>’</dt>
+<dd><p>Enable adaptive spatial transform (high profile 8x8 transform)
+when set to 1. When set to 0, it has the same effect as
+<code>x264</code>’s ‘<samp>--no-8x8dct</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>fast-pskip</samp>’</dt>
+<dd><p>Enable early SKIP detection on P-frames when set to 1. When set
+to 0, it has the same effect as <code>x264</code>’s
+‘<samp>--no-fast-pskip</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>aud (<em>aud</em>)</samp>’</dt>
+<dd><p>Enable use of access unit delimiters when set to 1.
+</p>
+</dd>
+<dt> ‘<samp>mbtree</samp>’</dt>
+<dd><p>Enable use macroblock tree ratecontrol when set to 1. When set
+to 0, it has the same effect as <code>x264</code>’s
+‘<samp>--no-mbtree</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>deblock (<em>deblock</em>)</samp>’</dt>
+<dd><p>Set loop filter parameters, in <var>alpha</var>:<var>beta</var> form.
+</p>
+</dd>
+<dt> ‘<samp>cplxblur (<em>cplxblur</em>)</samp>’</dt>
+<dd><p>Set fluctuations reduction in QP (before curve compression).
+</p>
+</dd>
+<dt> ‘<samp>partitions (<em>partitions</em>)</samp>’</dt>
+<dd><p>Set partitions to consider as a comma-separated list of. Possible
+values in the list:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>p8x8</samp>’</dt>
+<dd><p>8x8 P-frame partition.
+</p></dd>
+<dt> ‘<samp>p4x4</samp>’</dt>
+<dd><p>4x4 P-frame partition.
+</p></dd>
+<dt> ‘<samp>b8x8</samp>’</dt>
+<dd><p>4x4 B-frame partition.
+</p></dd>
+<dt> ‘<samp>i8x8</samp>’</dt>
+<dd><p>8x8 I-frame partition.
+</p></dd>
+<dt> ‘<samp>i4x4</samp>’</dt>
+<dd><p>4x4 I-frame partition.
+(Enabling ‘<samp>p4x4</samp>’ requires ‘<samp>p8x8</samp>’ to be enabled. Enabling
+‘<samp>i8x8</samp>’ requires adaptive spatial transform (‘<samp>8x8dct</samp>’
+option) to be enabled.)
+</p></dd>
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Do not consider any partitions.
+</p></dd>
+<dt> ‘<samp>all (<em>all</em>)</samp>’</dt>
+<dd><p>Consider every partition.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>direct-pred (<em>direct</em>)</samp>’</dt>
+<dd><p>Set direct MV prediction mode. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Disable MV prediction.
+</p></dd>
+<dt> ‘<samp>spatial (<em>spatial</em>)</samp>’</dt>
+<dd><p>Enable spatial predicting.
+</p></dd>
+<dt> ‘<samp>temporal (<em>temporal</em>)</samp>’</dt>
+<dd><p>Enable temporal predicting.
+</p></dd>
+<dt> ‘<samp>auto (<em>auto</em>)</samp>’</dt>
+<dd><p>Automatically decided.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>slice-max-size (<em>slice-max-size</em>)</samp>’</dt>
+<dd><p>Set the limit of the size of each slice in bytes. If not specified
+but RTP payload size (‘<samp>ps</samp>’) is specified, that is used.
+</p>
+</dd>
+<dt> ‘<samp>stats (<em>stats</em>)</samp>’</dt>
+<dd><p>Set the file name for multi-pass stats.
+</p>
+</dd>
+<dt> ‘<samp>nal-hrd (<em>nal-hrd</em>)</samp>’</dt>
+<dd><p>Set signal HRD information (requires ‘<samp>vbv-bufsize</samp>’ to be set).
+Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none (<em>none</em>)</samp>’</dt>
+<dd><p>Disable HRD information signaling.
+</p></dd>
+<dt> ‘<samp>vbr (<em>vbr</em>)</samp>’</dt>
+<dd><p>Variable bit rate.
+</p></dd>
+<dt> ‘<samp>cbr (<em>cbr</em>)</samp>’</dt>
+<dd><p>Constant bit rate (not allowed in MP4 container).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>x264opts (N.A.)</samp>’</dt>
+<dd><p>Set any x264 option, see <code>x264 --fullhelp</code> for a list.
+</p>
+<p>Argument is a list of <var>key</var>=<var>value</var> couples separated by
+":". In <var>filter</var> and <var>psy-rd</var> options that use ":" as a separator
+themselves, use "," instead. They accept it as well since long ago but this
+is kept undocumented for some reason.
+</p>
+<p>For example to specify libx264 encoding options with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>x264-params (N.A.)</samp>’</dt>
+<dd><p>Override the x264 configuration using a :-separated list of key=value
+parameters.
+</p>
+<p>This option is functionally the same as the ‘<samp>x264opts</samp>’, but is
+duplicated for compatibility with the Libav fork.
+</p>
+<p>For example to specify libx264 encoding options with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:v libx264 -x264-params level=30:bframes=0:weightp=0:\
+cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:\
+no-fast-pskip=1:subq=6:8x8dct=0:trellis=0 OUTPUT
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>Encoding ffpresets for common usages are provided so they can be used with the
+general presets system (e.g. passing the ‘<samp>pre</samp>’ option).
+</p>
+<a name="libxvid"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-libxvid">9.5 libxvid</a></h2>
+
+<p>Xvid MPEG-4 Part 2 encoder wrapper.
+</p>
+<p>This encoder requires the presence of the libxvidcore headers and library
+during configuration. You need to explicitly configure the build with
+<code>--enable-libxvid --enable-gpl</code>.
+</p>
+<p>The native <code>mpeg4</code> encoder supports the MPEG-4 Part 2 format, so
+users can encode to this format without this library.
+</p>
+<a name="Options-9"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Options-9">9.5.1 Options</a></h3>
+
+<p>The following options are supported by the libxvid wrapper. Some of
+the following options are listed but are not documented, and
+correspond to shared codec options. See <a href="#codec_002doptions">the Codec Options chapter</a> for their documentation. The other shared options
+which are not listed have no effect for the libxvid encoder.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dt> ‘<samp>g</samp>’</dt>
+<dt> ‘<samp>qmin</samp>’</dt>
+<dt> ‘<samp>qmax</samp>’</dt>
+<dt> ‘<samp>mpeg_quant</samp>’</dt>
+<dt> ‘<samp>threads</samp>’</dt>
+<dt> ‘<samp>bf</samp>’</dt>
+<dt> ‘<samp>b_qfactor</samp>’</dt>
+<dt> ‘<samp>b_qoffset</samp>’</dt>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set specific encoding flags. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mv4</samp>’</dt>
+<dd><p>Use four motion vector by macroblock.
+</p>
+</dd>
+<dt> ‘<samp>aic</samp>’</dt>
+<dd><p>Enable high quality AC prediction.
+</p>
+</dd>
+<dt> ‘<samp>gray</samp>’</dt>
+<dd><p>Only encode grayscale.
+</p>
+</dd>
+<dt> ‘<samp>gmc</samp>’</dt>
+<dd><p>Enable the use of global motion compensation (GMC).
+</p>
+</dd>
+<dt> ‘<samp>qpel</samp>’</dt>
+<dd><p>Enable quarter-pixel motion compensation.
+</p>
+</dd>
+<dt> ‘<samp>cgop</samp>’</dt>
+<dd><p>Enable closed GOP.
+</p>
+</dd>
+<dt> ‘<samp>global_header</samp>’</dt>
+<dd><p>Place global headers in extradata instead of every keyframe.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>trellis</samp>’</dt>
+<dt> ‘<samp>me_method</samp>’</dt>
+<dd><p>Set motion estimation method. Possible values in decreasing order of
+speed and increasing order of quality:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>Use no motion estimation (default).
+</p>
+</dd>
+<dt> ‘<samp>phods</samp>’</dt>
+<dt> ‘<samp>x1</samp>’</dt>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>Enable advanced diamond zonal search for 16x16 blocks and half-pixel
+refinement for 16x16 blocks. ‘<samp>x1</samp>’ and ‘<samp>log</samp>’ are aliases for
+‘<samp>phods</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>epzs</samp>’</dt>
+<dd><p>Enable all of the things described above, plus advanced diamond zonal
+search for 8x8 blocks, half-pixel refinement for 8x8 blocks, and motion
+estimation on chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Enable all of the things described above, plus extended 16x16 and 8x8
+blocks search.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>mbd</samp>’</dt>
+<dd><p>Set macroblock decision algorithm. Possible values in the increasing
+order of quality:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>Use macroblock comparing function algorithm (default).
+</p>
+</dd>
+<dt> ‘<samp>bits</samp>’</dt>
+<dd><p>Enable rate distortion-based half pixel and quarter pixel refinement for
+16x16 blocks.
+</p>
+</dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>Enable all of the things described above, plus rate distortion-based
+half pixel and quarter pixel refinement for 8x8 blocks, and rate
+distortion-based search using square pattern.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lumi_aq</samp>’</dt>
+<dd><p>Enable lumi masking adaptive quantization when set to 1. Default is 0
+(disabled).
+</p>
+</dd>
+<dt> ‘<samp>variance_aq</samp>’</dt>
+<dd><p>Enable variance adaptive quantization when set to 1. Default is 0
+(disabled).
+</p>
+<p>When combined with ‘<samp>lumi_aq</samp>’, the resulting quality will not
+be better than any of the two specified individually. In other
+words, the resulting quality will be the worse one of the two
+effects.
+</p>
+</dd>
+<dt> ‘<samp>ssim</samp>’</dt>
+<dd><p>Set structural similarity (SSIM) displaying method. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>off</samp>’</dt>
+<dd><p>Disable displaying of SSIM information.
+</p>
+</dd>
+<dt> ‘<samp>avg</samp>’</dt>
+<dd><p>Output average SSIM at the end of encoding to stdout. The format of
+showing the average SSIM is:
+</p>
+<table><tr><td> </td><td><pre class="example">Average SSIM: %f
+</pre></td></tr></table>
+
+<p>For users who are not familiar with C, %f means a float number, or
+a decimal (e.g. 0.939232).
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Output both per-frame SSIM data during encoding and average SSIM at
+the end of encoding to stdout. The format of per-frame information
+is:
+</p>
+<table><tr><td> </td><td><pre class="example"> SSIM: avg: %1.3f min: %1.3f max: %1.3f
+</pre></td></tr></table>
+
+<p>For users who are not familiar with C, %1.3f means a float number
+rounded to 3 digits after the dot (e.g. 0.932).
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ssim_acc</samp>’</dt>
+<dd><p>Set SSIM accuracy. Valid options are integers within the range of
+0-4, while 0 gives the most accurate result and 4 computes the
+fastest.
+</p>
+</dd>
+</dl>
+
+<a name="png"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-png">9.6 png</a></h2>
+
+<p>PNG image encoder.
+</p>
+<a name="Private-options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Private-options-1">9.6.1 Private options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>dpi <var>integer</var></samp>’</dt>
+<dd><p>Set physical density of pixels, in dots per inch, unset by default
+</p></dd>
+<dt> ‘<samp>dpm <var>integer</var></samp>’</dt>
+<dd><p>Set physical density of pixels, in dots per meter, unset by default
+</p></dd>
+</dl>
+
+<a name="ProRes"></a>
+<h2 class="section"><a href="ffmpeg-codecs.html#toc-ProRes">9.7 ProRes</a></h2>
+
+<p>Apple ProRes encoder.
+</p>
+<p>FFmpeg contains 2 ProRes encoders, the prores-aw and prores-ks encoder.
+The used encoder can be chosen with the <code>-vcodec</code> option.
+</p>
+<a name="Private-Options-for-prores_002dks"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Private-Options-for-prores_002dks">9.7.1 Private Options for prores-ks</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>profile <var>integer</var></samp>’</dt>
+<dd><p>Select the ProRes profile to encode
+</p><dl compact="compact">
+<dt> ‘<samp>proxy</samp>’</dt>
+<dt> ‘<samp>lt</samp>’</dt>
+<dt> ‘<samp>standard</samp>’</dt>
+<dt> ‘<samp>hq</samp>’</dt>
+<dt> ‘<samp>4444</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>quant_mat <var>integer</var></samp>’</dt>
+<dd><p>Select quantization matrix.
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dt> ‘<samp>default</samp>’</dt>
+<dt> ‘<samp>proxy</samp>’</dt>
+<dt> ‘<samp>lt</samp>’</dt>
+<dt> ‘<samp>standard</samp>’</dt>
+<dt> ‘<samp>hq</samp>’</dt>
+</dl>
+<p>If set to <var>auto</var>, the matrix matching the profile will be picked.
+If not set, the matrix providing the highest quality, <var>default</var>, will be
+picked.
+</p>
+</dd>
+<dt> ‘<samp>bits_per_mb <var>integer</var></samp>’</dt>
+<dd><p>How many bits to allot for coding one macroblock. Different profiles use
+between 200 and 2400 bits per macroblock, the maximum is 8000.
+</p>
+</dd>
+<dt> ‘<samp>mbs_per_slice <var>integer</var></samp>’</dt>
+<dd><p>Number of macroblocks in each slice (1-8); the default value (8)
+should be good in almost all situations.
+</p>
+</dd>
+<dt> ‘<samp>vendor <var>string</var></samp>’</dt>
+<dd><p>Override the 4-byte vendor ID.
+A custom vendor ID like <var>apl0</var> would claim the stream was produced by
+the Apple encoder.
+</p>
+</dd>
+<dt> ‘<samp>alpha_bits <var>integer</var></samp>’</dt>
+<dd><p>Specify number of bits for alpha component.
+Possible values are <var>0</var>, <var>8</var> and <var>16</var>.
+Use <var>0</var> to disable alpha plane coding.
+</p>
+</dd>
+</dl>
+
+<a name="Speed-considerations"></a>
+<h3 class="subsection"><a href="ffmpeg-codecs.html#toc-Speed-considerations">9.7.2 Speed considerations</a></h3>
+
+<p>In the default mode of operation the encoder has to honor frame constraints
+(i.e. not produc frames with size bigger than requested) while still making
+output picture as good as possible.
+A frame containing a lot of small details is harder to compress and the encoder
+would spend more time searching for appropriate quantizers for each slice.
+</p>
+<p>Setting a higher ‘<samp>bits_per_mb</samp>’ limit will improve the speed.
+</p>
+<p>For the fastest encoding speed set the ‘<samp>qscale</samp>’ parameter (4 is the
+recommended value) and do not set a size constraint.
+</p>
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-See-Also">10. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavcodec.html">libavcodec</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-codecs.html#toc-Authors">11. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Devices </title>
+
+<meta name="description" content="FFmpeg Devices Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Devices ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Devices Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Device-Options" href="#Device-Options">2. Device Options</a></li>
+ <li><a name="toc-Input-Devices" href="#Input-Devices">3. Input Devices</a>
+ <ul class="toc">
+ <li><a name="toc-alsa-1" href="#alsa-1">3.1 alsa</a></li>
+ <li><a name="toc-bktr" href="#bktr">3.2 bktr</a></li>
+ <li><a name="toc-dshow" href="#dshow">3.3 dshow</a>
+ <ul class="toc">
+ <li><a name="toc-Options-11" href="#Options-11">3.3.1 Options</a></li>
+ <li><a name="toc-Examples-8" href="#Examples-8">3.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dv1394" href="#dv1394">3.4 dv1394</a></li>
+ <li><a name="toc-fbdev-1" href="#fbdev-1">3.5 fbdev</a></li>
+ <li><a name="toc-iec61883" href="#iec61883">3.6 iec61883</a>
+ <ul class="toc">
+ <li><a name="toc-Options-2" href="#Options-2">3.6.1 Options</a></li>
+ <li><a name="toc-Examples-10" href="#Examples-10">3.6.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-jack" href="#jack">3.7 jack</a></li>
+ <li><a name="toc-lavfi" href="#lavfi">3.8 lavfi</a>
+ <ul class="toc">
+ <li><a name="toc-Options-13" href="#Options-13">3.8.1 Options</a></li>
+ <li><a name="toc-Examples-6" href="#Examples-6">3.8.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libdc1394" href="#libdc1394">3.9 libdc1394</a></li>
+ <li><a name="toc-openal" href="#openal">3.10 openal</a>
+ <ul class="toc">
+ <li><a name="toc-Options-4" href="#Options-4">3.10.1 Options</a></li>
+ <li><a name="toc-Examples-5" href="#Examples-5">3.10.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-oss" href="#oss">3.11 oss</a></li>
+ <li><a name="toc-pulse-1" href="#pulse-1">3.12 pulse</a>
+ <ul class="toc">
+ <li><a name="toc-Options-12" href="#Options-12">3.12.1 Options</a></li>
+ <li><a name="toc-Examples-1" href="#Examples-1">3.12.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sndio" href="#sndio">3.13 sndio</a></li>
+ <li><a name="toc-video4linux2_002c-v4l2" href="#video4linux2_002c-v4l2">3.14 video4linux2, v4l2</a>
+ <ul class="toc">
+ <li><a name="toc-Options-7" href="#Options-7">3.14.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-vfwcap" href="#vfwcap">3.15 vfwcap</a></li>
+ <li><a name="toc-x11grab" href="#x11grab">3.16 x11grab</a>
+ <ul class="toc">
+ <li><a name="toc-Options-5" href="#Options-5">3.16.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Output-Devices" href="#Output-Devices">4. Output Devices</a>
+ <ul class="toc">
+ <li><a name="toc-alsa" href="#alsa">4.1 alsa</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-9" href="#Examples-9">4.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-caca" href="#caca">4.2 caca</a>
+ <ul class="toc">
+ <li><a name="toc-Options" href="#Options">4.2.1 Options</a></li>
+ <li><a name="toc-Examples-4" href="#Examples-4">4.2.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-decklink" href="#decklink">4.3 decklink</a>
+ <ul class="toc">
+ <li><a name="toc-Options-9" href="#Options-9">4.3.1 Options</a></li>
+ <li><a name="toc-Examples-11" href="#Examples-11">4.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fbdev" href="#fbdev">4.4 fbdev</a>
+ <ul class="toc">
+ <li><a name="toc-Options-6" href="#Options-6">4.4.1 Options</a></li>
+ <li><a name="toc-Examples" href="#Examples">4.4.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-opengl" href="#opengl">4.5 opengl</a>
+ <ul class="toc">
+ <li><a name="toc-Options-8" href="#Options-8">4.5.1 Options</a></li>
+ <li><a name="toc-Examples-7" href="#Examples-7">4.5.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-oss-1" href="#oss-1">4.6 oss</a></li>
+ <li><a name="toc-pulse" href="#pulse">4.7 pulse</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">4.7.1 Options</a></li>
+ <li><a name="toc-Examples-3" href="#Examples-3">4.7.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sdl" href="#sdl">4.8 sdl</a>
+ <ul class="toc">
+ <li><a name="toc-Options-3" href="#Options-3">4.8.1 Options</a></li>
+ <li><a name="toc-Interactive-commands" href="#Interactive-commands">4.8.2 Interactive commands</a></li>
+ <li><a name="toc-Examples-12" href="#Examples-12">4.8.3 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sndio-1" href="#sndio-1">4.9 sndio</a></li>
+ <li><a name="toc-xv" href="#xv">4.10 xv</a>
+ <ul class="toc">
+ <li><a name="toc-Options-10" href="#Options-10">4.10.1 Options</a></li>
+ <li><a name="toc-Examples-2" href="#Examples-2">4.10.2 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">5. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">6. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-devices.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes the input and output devices provided by the
+libavdevice library.
+</p>
+
+<a name="Device-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-devices.html#toc-Device-Options">2. Device Options</a></h1>
+
+<p>The libavdevice library provides the same interface as
+libavformat. Namely, an input device is considered like a demuxer, and
+an output device like a muxer, and the interface and generic device
+options are the same provided by libavformat (see the ffmpeg-formats
+manual).
+</p>
+<p>In addition each input or output device may support so-called private
+options, which are specific for that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the device
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+
+<a name="Input-Devices"></a>
+<h1 class="chapter"><a href="ffmpeg-devices.html#toc-Input-Devices">3. Input Devices</a></h1>
+
+<p>Input devices are configured elements in FFmpeg which allow to access
+the data coming from a multimedia device attached to your system.
+</p>
+<p>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".
+</p>
+<p>You can disable all the input devices using the configure option
+"–disable-indevs", and selectively enable an input device using the
+option "–enable-indev=<var>INDEV</var>", or you can disable a particular
+input device using the option "–disable-indev=<var>INDEV</var>".
+</p>
+<p>The option "-formats" of the ff* tools will display the list of
+supported input devices (amongst the demuxers).
+</p>
+<p>A description of the currently available input devices follows.
+</p>
+<a name="alsa-1"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-alsa-1">3.1 alsa</a></h2>
+
+<p>ALSA (Advanced Linux Sound Architecture) input device.
+</p>
+<p>To enable this input device during configuration you need libasound
+installed on your system.
+</p>
+<p>This device allows capturing from an ALSA device. The name of the
+device to capture has to be an ALSA card identifier.
+</p>
+<p>An ALSA identifier has the syntax:
+</p><table><tr><td> </td><td><pre class="example">hw:<var>CARD</var>[,<var>DEV</var>[,<var>SUBDEV</var>]]
+</pre></td></tr></table>
+
+<p>where the <var>DEV</var> and <var>SUBDEV</var> components are optional.
+</p>
+<p>The three arguments (in order: <var>CARD</var>,<var>DEV</var>,<var>SUBDEV</var>)
+specify card number or identifier, device number and subdevice number
+(-1 means any).
+</p>
+<p>To see the list of cards currently recognized by your system check the
+files ‘<tt>/proc/asound/cards</tt>’ and ‘<tt>/proc/asound/devices</tt>’.
+</p>
+<p>For example to capture with <code>ffmpeg</code> from an ALSA device with
+card id 0, you may run the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f alsa -i hw:0 alsaout.wav
+</pre></td></tr></table>
+
+<p>For more information see:
+<a href="http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html">http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html</a>
+</p>
+<a name="bktr"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-bktr">3.2 bktr</a></h2>
+
+<p>BSD video input device.
+</p>
+<a name="dshow"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-dshow">3.3 dshow</a></h2>
+
+<p>Windows DirectShow input device.
+</p>
+<p>DirectShow support is enabled when FFmpeg is built with the mingw-w64 project.
+Currently only audio and video devices are supported.
+</p>
+<p>Multiple devices may be opened as separate inputs, but they may also be
+opened on the same input, which should improve synchronism between them.
+</p>
+<p>The input name should be in the format:
+</p>
+<table><tr><td> </td><td><pre class="example"><var>TYPE</var>=<var>NAME</var>[:<var>TYPE</var>=<var>NAME</var>]
+</pre></td></tr></table>
+
+<p>where <var>TYPE</var> can be either <var>audio</var> or <var>video</var>,
+and <var>NAME</var> is the device’s name.
+</p>
+<a name="Options-11"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-11">3.3.1 Options</a></h3>
+
+<p>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.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+</p>
+</dd>
+<dt> ‘<samp>list_options</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of selected device’s options
+and exit.
+</p>
+</dd>
+<dt> ‘<samp>video_device_number</samp>’</dt>
+<dd><p>Set video device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>audio_device_number</samp>’</dt>
+<dd><p>Set audio device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select pixel format to be used by DirectShow. This may only be set when
+the video codec is not set or set to rawvideo.
+</p>
+</dd>
+<dt> ‘<samp>audio_buffer_size</samp>’</dt>
+<dd><p>Set audio device buffer size in milliseconds (which can directly
+impact latency, depending on the device).
+Defaults to using the audio device’s
+default buffer size (typically some multiple of 500ms).
+Setting this value too low can degrade performance.
+See also
+<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx</a>
+</p>
+</dd>
+</dl>
+
+<a name="Examples-8"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-8">3.3.2 Examples</a></h3>
+
+<ul>
+<li>
+Print the list of DirectShow supported devices and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f dshow -i dummy
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open second video device with name <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var> and audio device <var>Microphone</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
+</pre></td></tr></table>
+
+</li><li>
+Print the list of supported options in selected device and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_options true -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="dv1394"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-dv1394">3.4 dv1394</a></h2>
+
+<p>Linux DV 1394 input device.
+</p>
+<a name="fbdev-1"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-fbdev-1">3.5 fbdev</a></h2>
+
+<p>Linux framebuffer input device.
+</p>
+<p>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
+‘<tt>/dev/fb0</tt>’.
+</p>
+<p>For more detailed information read the file
+Documentation/fb/framebuffer.txt included in the Linux source tree.
+</p>
+<p>To record from the framebuffer device ‘<tt>/dev/fb0</tt>’ with
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
+</pre></td></tr></table>
+
+<p>You can take a single screenshot image with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
+</pre></td></tr></table>
+
+<p>See also <a href="http://linux-fbdev.sourceforge.net/">http://linux-fbdev.sourceforge.net/</a>, and fbset(1).
+</p>
+<a name="iec61883"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-iec61883">3.6 iec61883</a></h2>
+
+<p>FireWire DV/HDV input device using libiec61883.
+</p>
+<p>To enable this input device, you need libiec61883, libraw1394 and
+libavc1394 installed on your system. Use the configure option
+<code>--enable-libiec61883</code> to compile with the device enabled.
+</p>
+<p>The iec61883 capture device supports capturing from a video device
+connected via IEEE1394 (FireWire), using libiec61883 and the new Linux
+FireWire stack (juju). This is the default DV/HDV input method in Linux
+Kernel 2.6.37 and later, since the old FireWire stack was removed.
+</p>
+<p>Specify the FireWire port to be used as input file, or "auto"
+to choose the first port connected.
+</p>
+<a name="Options-2"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-2">3.6.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>dvtype</samp>’</dt>
+<dd><p>Override autodetection of DV/HDV. This should only be used if auto
+detection does not work, or if usage of a different device type
+should be prohibited. Treating a DV device as HDV (or vice versa) will
+not work and result in undefined behavior.
+The values ‘<samp>auto</samp>’, ‘<samp>dv</samp>’ and ‘<samp>hdv</samp>’ are supported.
+</p>
+</dd>
+<dt> ‘<samp>dvbuffer</samp>’</dt>
+<dd><p>Set maxiumum size of buffer for incoming data, in frames. For DV, this
+is an exact value. For HDV, it is not frame exact, since HDV does
+not have a fixed frame size.
+</p>
+</dd>
+<dt> ‘<samp>dvguid</samp>’</dt>
+<dd><p>Select the capture device by specifying it’s GUID. Capturing will only
+be performed from the specified device and fails if no device with the
+given GUID is found. This is useful to select the input if multiple
+devices are connected at the same time.
+Look at /sys/bus/firewire/devices to find out the GUIDs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-10"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-10">3.6.2 Examples</a></h3>
+
+<ul>
+<li>
+Grab and show the input of a FireWire DV/HDV device.
+<table><tr><td> </td><td><pre class="example">ffplay -f iec61883 -i auto
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a FireWire DV/HDV device,
+using a packet buffer of 100000 packets if the source is HDV.
+<table><tr><td> </td><td><pre class="example">ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="jack"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-jack">3.7 jack</a></h2>
+
+<p>JACK input device.
+</p>
+<p>To enable this input device during configuration you need libjack
+installed on your system.
+</p>
+<p>A JACK input device creates one or more JACK writable clients, one for
+each audio channel, with name <var>client_name</var>:input_<var>N</var>, where
+<var>client_name</var> is the name provided by the application, and <var>N</var>
+is a number which identifies the channel.
+Each writable client will send the acquired data to the FFmpeg input
+device.
+</p>
+<p>Once you have created one or more JACK readable clients, you need to
+connect them to one or more JACK writable clients.
+</p>
+<p>To connect or disconnect JACK clients you can use the <code>jack_connect</code>
+and <code>jack_disconnect</code> programs, or do it through a graphical interface,
+for example with <code>qjackctl</code>.
+</p>
+<p>To list the JACK clients and their properties you can invoke the command
+<code>jack_lsp</code>.
+</p>
+<p>Follows an example which shows how to capture a JACK readable client
+with <code>ffmpeg</code>.
+</p><table><tr><td> </td><td><pre class="example"># 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
+</pre></td></tr></table>
+
+<p>For more information read:
+<a href="http://jackaudio.org/">http://jackaudio.org/</a>
+</p>
+<a name="lavfi"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-lavfi">3.8 lavfi</a></h2>
+
+<p>Libavfilter input virtual device.
+</p>
+<p>This input device reads data from the open output pads of a libavfilter
+filtergraph.
+</p>
+<p>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 ‘<samp>graph</samp>’.
+</p>
+<a name="Options-13"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-13">3.8.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>graph</samp>’</dt>
+<dd><p>Specify the filtergraph to use as input. Each video open output must be
+labelled by a unique string of the form "out<var>N</var>", where <var>N</var> 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.
+</p>
+<p>If not specified defaults to the filename specified for the input
+device.
+</p>
+</dd>
+<dt> ‘<samp>graph_file</samp>’</dt>
+<dd><p>Set the filename of the filtergraph to be read and sent to the other
+filters. Syntax of the filtergraph is the same as the one specified by
+the option <var>graph</var>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-6"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-6">3.8.2 Examples</a></h3>
+
+<ul>
+<li>
+Create a color video stream and play it back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "color=c=pink [out0]" dummy
+</pre></td></tr></table>
+
+</li><li>
+As the previous example, but use filename for specifying the graph
+description, and omit the "out0" label:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi color=c=pink
+</pre></td></tr></table>
+
+</li><li>
+Create three different video test filtered sources and play them:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream from a file using the amovie source and play it
+back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "amovie=test.wav"
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream and a video stream and play it back with
+<code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="libdc1394"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-libdc1394">3.9 libdc1394</a></h2>
+
+<p>IIDC1394 input device, based on libdc1394 and libraw1394.
+</p>
+<a name="openal"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-openal">3.10 openal</a></h2>
+
+<p>The OpenAL input device provides audio capture on all systems with a
+working OpenAL 1.1 implementation.
+</p>
+<p>To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with <code>--enable-openal</code>.
+</p>
+<p>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
+<code>--extra-cflags</code> and <code>--extra-ldflags</code> for allowing the build
+system to locate the OpenAL headers and libraries.
+</p>
+<p>An incomplete list of OpenAL implementations follows:
+</p>
+<dl compact="compact">
+<dt> <strong>Creative</strong></dt>
+<dd><p>The official Windows implementation, providing hardware acceleration
+with supported devices and software fallback.
+See <a href="http://openal.org/">http://openal.org/</a>.
+</p></dd>
+<dt> <strong>OpenAL Soft</strong></dt>
+<dd><p>Portable, open source (LGPL) software implementation. Includes
+backends for the most common sound APIs on the Windows, Linux,
+Solaris, and BSD operating systems.
+See <a href="http://kcat.strangesoft.net/openal.html">http://kcat.strangesoft.net/openal.html</a>.
+</p></dd>
+<dt> <strong>Apple</strong></dt>
+<dd><p>OpenAL is part of Core Audio, the official Mac OS X Audio interface.
+See <a href="http://developer.apple.com/technologies/mac/audio-and-video.html">http://developer.apple.com/technologies/mac/audio-and-video.html</a>
+</p></dd>
+</dl>
+
+<p>This device allows one to capture from an audio input device handled
+through OpenAL.
+</p>
+<p>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 <var>list_devices</var>.
+</p>
+<a name="Options-4"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-4">3.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio. Only the values
+‘<samp>1</samp>’ (monaural) and ‘<samp>2</samp>’ (stereo) are currently supported.
+Defaults to ‘<samp>2</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio. Only the values
+‘<samp>8</samp>’ and ‘<samp>16</samp>’ are currently supported. Defaults to
+‘<samp>16</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+Defaults to ‘<samp>44.1k</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-5"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-5">3.10.2 Examples</a></h3>
+
+<p>Print the list of OpenAL supported devices and exit:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f openal -i dummy out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the OpenAL device ‘<tt>DR-BT101 via PulseAudio</tt>’:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the default device (note the empty string ” as filename):
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i '' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from two devices simultaneously, writing to two different files,
+within the same <code>ffmpeg</code> command:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
+</pre></td></tr></table>
+<p>Note: not all OpenAL implementations support multiple simultaneous capture -
+try the latest OpenAL Soft if the above does not work.
+</p>
+<a name="oss"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-oss">3.11 oss</a></h2>
+
+<p>Open Sound System input device.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the OSS input device, and is usually set to
+‘<tt>/dev/dsp</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/dsp</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
+</pre></td></tr></table>
+
+<p>For more information about OSS see:
+<a href="http://manuals.opensound.com/usersguide/dsp.html">http://manuals.opensound.com/usersguide/dsp.html</a>
+</p>
+<a name="pulse-1"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-pulse-1">3.12 pulse</a></h2>
+
+<p>PulseAudio input device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-libpulse</code>.
+</p>
+<p>The filename to provide to the input device is a source device or the
+string "default"
+</p>
+<p>To list the PulseAudio source devices and their properties you can invoke
+the command <code>pactl list sources</code>.
+</p>
+<p>More information about PulseAudio can be found on <a href="http://www.pulseaudio.org">http://www.pulseaudio.org</a>.
+</p>
+<a name="Options-12"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-12">3.12.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>Connect to a specific PulseAudio server, specified by an IP address.
+Default server is used when not provided.
+</p>
+</dd>
+<dt> ‘<samp>name</samp>’</dt>
+<dd><p>Specify the application name PulseAudio will use when showing active clients,
+by default it is the <code>LIBAVFORMAT_IDENT</code> string.
+</p>
+</dd>
+<dt> ‘<samp>stream_name</samp>’</dt>
+<dd><p>Specify the stream name PulseAudio will use when showing active streams,
+by default it is "record".
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Specify the samplerate in Hz, by default 48kHz is used.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Specify the channels in use, by default 2 (stereo) is set.
+</p>
+</dd>
+<dt> ‘<samp>frame_size</samp>’</dt>
+<dd><p>Specify the number of bytes per frame, by default it is set to 1024.
+</p>
+</dd>
+<dt> ‘<samp>fragment_size</samp>’</dt>
+<dd><p>Specify the minimal buffering fragment in PulseAudio, it will affect the
+audio latency. By default it is unset.
+</p></dd>
+</dl>
+
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-1">3.12.2 Examples</a></h3>
+<p>Record a stream from default device:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f pulse -i default /tmp/pulse.wav
+</pre></td></tr></table>
+
+<a name="sndio"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-sndio">3.13 sndio</a></h2>
+
+<p>sndio input device.
+</p>
+<p>To enable this input device during configuration you need libsndio
+installed on your system.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the sndio input device, and is usually set to
+‘<tt>/dev/audio0</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/audio0</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
+</pre></td></tr></table>
+
+<a name="video4linux2_002c-v4l2"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-video4linux2_002c-v4l2">3.14 video4linux2, v4l2</a></h2>
+
+<p>Video4Linux2 input video device.
+</p>
+<p>"v4l2" can be used as alias for "video4linux2".
+</p>
+<p>If FFmpeg is built with v4l-utils support (by using the
+<code>--enable-libv4l2</code> configure option), it is possible to use it with the
+<code>-use_libv4l2</code> input device option.
+</p>
+<p>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 ‘<tt>/dev/video<var>N</var></tt>’, where <var>N</var> is a number associated to
+the device.
+</p>
+<p>Video4Linux2 devices usually support a limited set of
+<var>width</var>x<var>height</var> sizes and frame rates. You can check which are
+supported using <code>-list_formats all</code> for Video4Linux2 devices.
+Some devices, like TV cards, support one or more standards. It is possible
+to list all the supported standards using <code>-list_standards all</code>.
+</p>
+<p>The time base for the timestamps is 1 microsecond. Depending on the kernel
+version and configuration, the timestamps may be derived from the real time
+clock (origin at the Unix Epoch) or the monotonic clock (origin usually at
+boot time, unaffected by NTP or manual changes to the clock). The
+‘<samp>-timestamps abs</samp>’ or ‘<samp>-ts abs</samp>’ option can be used to force
+conversion into the real time clock.
+</p>
+<p>Some usage examples of the video4linux2 device with <code>ffmpeg</code>
+and <code>ffplay</code>:
+</p><ul>
+<li>
+Grab and show the input of a video4linux2 device:
+<table><tr><td> </td><td><pre class="example">ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a video4linux2 device, leave the
+frame rate and size as previously set:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about Video4Linux, check <a href="http://linuxtv.org/">http://linuxtv.org/</a>.
+</p>
+<a name="Options-7"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-7">3.14.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>standard</samp>’</dt>
+<dd><p>Set the standard. Must be the name of a supported standard. To get a
+list of the supported standards, use the ‘<samp>list_standards</samp>’
+option.
+</p>
+</dd>
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>Set the input channel number. Default to -1, which means using the
+previously selected channel.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. The argument must be a string in the form
+<var>WIDTH</var>x<var>HEIGHT</var> or a valid size abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select the pixel format (only valid for raw video input).
+</p>
+</dd>
+<dt> ‘<samp>input_format</samp>’</dt>
+<dd><p>Set the preferred pixel format (for raw video) or a codec name.
+This option allows one to select the input format, when several are
+available.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the preferred video frame rate.
+</p>
+</dd>
+<dt> ‘<samp>list_formats</samp>’</dt>
+<dd><p>List available formats (supported pixel formats, codecs, and frame
+sizes) and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all available (compressed and non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>Show only raw video (non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>compressed</samp>’</dt>
+<dd><p>Show only compressed formats.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>list_standards</samp>’</dt>
+<dd><p>List supported standards and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all supported standards.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>timestamps, ts</samp>’</dt>
+<dd><p>Set type of timestamps for grabbed frames.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Use timestamps from the kernel.
+</p>
+</dd>
+<dt> ‘<samp>abs</samp>’</dt>
+<dd><p>Use absolute timestamps (wall clock).
+</p>
+</dd>
+<dt> ‘<samp>mono2abs</samp>’</dt>
+<dd><p>Force conversion from monotonic to absolute timestamps.
+</p></dd>
+</dl>
+
+<p>Default value is <code>default</code>.
+</p></dd>
+</dl>
+
+<a name="vfwcap"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-vfwcap">3.15 vfwcap</a></h2>
+
+<p>VfW (Video for Windows) capture input device.
+</p>
+<p>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.
+</p>
+<a name="x11grab"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-x11grab">3.16 x11grab</a></h2>
+
+<p>X11 video input device.
+</p>
+<p>This device allows one to capture a region of an X11 display.
+</p>
+<p>The filename passed as input has the syntax:
+</p><table><tr><td> </td><td><pre class="example">[<var>hostname</var>]:<var>display_number</var>.<var>screen_number</var>[+<var>x_offset</var>,<var>y_offset</var>]
+</pre></td></tr></table>
+
+<p><var>hostname</var>:<var>display_number</var>.<var>screen_number</var> specifies the
+X11 display name of the screen to grab from. <var>hostname</var> can be
+omitted, and defaults to "localhost". The environment variable
+<code>DISPLAY</code> contains the default display name.
+</p>
+<p><var>x_offset</var> and <var>y_offset</var> specify the offsets of the grabbed
+area with respect to the top-left border of the X11 screen. They
+default to 0.
+</p>
+<p>Check the X11 documentation (e.g. man X) for more detailed information.
+</p>
+<p>Use the <code>dpyinfo</code> program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+</p>
+<p>For example to grab from ‘<tt>:0.0</tt>’ using <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>Grab at position <code>10,20</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<a name="Options-5"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-5">3.16.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>draw_mouse</samp>’</dt>
+<dd><p>Specify whether to draw the mouse pointer. A value of <code>0</code> specify
+not to draw the pointer. Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>follow_mouse</samp>’</dt>
+<dd><p>Make the grabbed area follow the mouse. The argument can be
+<code>centered</code> or a number of pixels <var>PIXELS</var>.
+</p>
+<p>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 <var>PIXELS</var> (greater than
+zero) to the edge of region.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>To follow only when the mouse pointer reaches within 100 pixels to edge:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the grabbing frame rate. Default value is <code>ntsc</code>,
+corresponding to a frame rate of <code>30000/1001</code>.
+</p>
+</dd>
+<dt> ‘<samp>show_region</samp>’</dt>
+<dd><p>Show grabbed region on screen.
+</p>
+<p>If <var>show_region</var> is specified with <code>1</code>, then the grabbing
+region will be indicated on screen. With this option, it is easy to
+know what is being grabbed if only a portion of the screen is grabbed.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<p>With <var>follow_mouse</var>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. Default value is <code>vga</code>.
+</p></dd>
+</dl>
+
+<a name="Output-Devices"></a>
+<h1 class="chapter"><a href="ffmpeg-devices.html#toc-Output-Devices">4. Output Devices</a></h1>
+
+<p>Output devices are configured elements in FFmpeg that can write
+multimedia data to an output device attached to your system.
+</p>
+<p>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".
+</p>
+<p>You can disable all the output devices using the configure option
+"–disable-outdevs", and selectively enable an output device using the
+option "–enable-outdev=<var>OUTDEV</var>", or you can disable a particular
+input device using the option "–disable-outdev=<var>OUTDEV</var>".
+</p>
+<p>The option "-formats" of the ff* tools will display the list of
+enabled output devices (amongst the muxers).
+</p>
+<p>A description of the currently available output devices follows.
+</p>
+<a name="alsa"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-alsa">4.1 alsa</a></h2>
+
+<p>ALSA (Advanced Linux Sound Architecture) output device.
+</p>
+<a name="Examples-9"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-9">4.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Play a file on default ALSA device:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f alsa default
+</pre></td></tr></table>
+
+</li><li>
+Play a file on soundcard 1, audio device 7:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f alsa hw:1,7
+</pre></td></tr></table>
+</li></ul>
+
+<a name="caca"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-caca">4.2 caca</a></h2>
+
+<p>CACA output device.
+</p>
+<p>This output device allows one to show a video stream in CACA window.
+Only one CACA window is allowed per application, so you can
+have only one instance of this output device in an application.
+</p>
+<p>To enable this output device you need to configure FFmpeg with
+<code>--enable-libcaca</code>.
+libcaca is a graphics library that outputs text instead of pixels.
+</p>
+<p>For more information about libcaca, check:
+<a href="http://caca.zoy.org/wiki/libcaca">http://caca.zoy.org/wiki/libcaca</a>
+</p>
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options">4.2.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the CACA window title, if not specified default to the filename
+specified for the output device.
+</p>
+</dd>
+<dt> ‘<samp>window_size</samp>’</dt>
+<dd><p>Set the CACA window size, can be a string of the form
+<var>width</var>x<var>height</var> or a video size abbreviation.
+If not specified it defaults to the size of the input video.
+</p>
+</dd>
+<dt> ‘<samp>driver</samp>’</dt>
+<dd><p>Set display driver.
+</p>
+</dd>
+<dt> ‘<samp>algorithm</samp>’</dt>
+<dd><p>Set dithering algorithm. Dithering is necessary
+because the picture being rendered has usually far more colours than
+the available palette.
+The accepted values are listed with <code>-list_dither algorithms</code>.
+</p>
+</dd>
+<dt> ‘<samp>antialias</samp>’</dt>
+<dd><p>Set antialias method. Antialiasing smoothens the rendered
+image and avoids the commonly seen staircase effect.
+The accepted values are listed with <code>-list_dither antialiases</code>.
+</p>
+</dd>
+<dt> ‘<samp>charset</samp>’</dt>
+<dd><p>Set which characters are going to be used when rendering text.
+The accepted values are listed with <code>-list_dither charsets</code>.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Set color to be used when rendering text.
+The accepted values are listed with <code>-list_dither colors</code>.
+</p>
+</dd>
+<dt> ‘<samp>list_drivers</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of available drivers and exit.
+</p>
+</dd>
+<dt> ‘<samp>list_dither</samp>’</dt>
+<dd><p>List available dither options related to the argument.
+The argument must be one of <code>algorithms</code>, <code>antialiases</code>,
+<code>charsets</code>, <code>colors</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-4"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-4">4.2.2 Examples</a></h3>
+
+<ul>
+<li>
+The following command shows the <code>ffmpeg</code> output is an
+CACA window, forcing its size to 80x25:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vcodec rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
+</pre></td></tr></table>
+
+</li><li>
+Show the list of available drivers and exit:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
+</pre></td></tr></table>
+
+</li><li>
+Show the list of available dither colors and exit:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="decklink"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-decklink">4.3 decklink</a></h2>
+
+<p>The decklink output device provides playback capabilities for Blackmagic
+DeckLink devices.
+</p>
+<p>To enable this output device, you need the Blackmagic DeckLink SDK and you
+need to configure with the appropriate <code>--extra-cflags</code>
+and <code>--extra-ldflags</code>.
+On Windows, you need to run the IDL files through <code>widl</code>.
+</p>
+<p>DeckLink is very picky about the formats it supports. Pixel format is always
+uyvy422, framerate and video size must be determined for your device with
+<code>-list_formats 1</code>. Audio sample rate is always 48 kHz.
+</p>
+<a name="Options-9"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-9">4.3.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>list_formats</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of supported formats and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>preroll</samp>’</dt>
+<dd><p>Amount of time to preroll video in seconds.
+Defaults to ‘<samp>0.5</samp>’.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-11"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-11">4.3.2 Examples</a></h3>
+
+<ul>
+<li>
+List output devices:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -list_devices 1 dummy
+</pre></td></tr></table>
+
+</li><li>
+List supported formats:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
+</pre></td></tr></table>
+
+</li><li>
+Play video clip:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
+</pre></td></tr></table>
+
+</li><li>
+Play video clip with non-standard framerate or video size:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="fbdev"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-fbdev">4.4 fbdev</a></h2>
+
+<p>Linux framebuffer output device.
+</p>
+<p>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
+‘<tt>/dev/fb0</tt>’.
+</p>
+<p>For more detailed information read the file
+‘<tt>Documentation/fb/framebuffer.txt</tt>’ included in the Linux source tree.
+</p>
+<a name="Options-6"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-6">4.4.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>xoffset</samp>’</dt>
+<dt> ‘<samp>yoffset</samp>’</dt>
+<dd><p>Set x/y coordinate of top left corner. Default is 0.
+</p></dd>
+</dl>
+
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples">4.4.2 Examples</a></h3>
+<p>Play a file on framebuffer device ‘<tt>/dev/fb0</tt>’.
+Required pixel format depends on current framebuffer settings.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i INPUT -vcodec rawvideo -pix_fmt bgra -f fbdev /dev/fb0
+</pre></td></tr></table>
+
+<p>See also <a href="http://linux-fbdev.sourceforge.net/">http://linux-fbdev.sourceforge.net/</a>, and fbset(1).
+</p>
+<a name="opengl"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-opengl">4.5 opengl</a></h2>
+<p>OpenGL output device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-opengl</code>.
+</p>
+<p>This output device allows one to render to OpenGL context.
+Context may be provided by application or default SDL window is created.
+</p>
+<p>When device renders to external context, application must implement handlers for following messages:
+<code>AV_CTL_MESSAGE_CREATE_WINDOW_BUFFER</code> - create OpenGL context on current thread.
+<code>AV_CTL_MESSAGE_PREPARE_WINDOW_BUFFER</code> - make OpenGL context current.
+<code>AV_CTL_MESSAGE_DISPLAY_WINDOW_BUFFER</code> - swap buffers.
+<code>AV_CTL_MESSAGE_DESTROY_WINDOW_BUFFER</code> - destroy OpenGL context.
+Application is also required to inform a device about current resolution by sending <code>AV_DEVICE_WINDOW_RESIZED</code> message.
+</p>
+<a name="Options-8"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-8">4.5.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>background</samp>’</dt>
+<dd><p>Set background color. Black is a default.
+</p></dd>
+<dt> ‘<samp>no_window</samp>’</dt>
+<dd><p>Disables default SDL window when set to non-zero value.
+Application must provide OpenGL context and both <code>window_size_cb</code> and <code>window_swap_buffers_cb</code> callbacks when set.
+</p></dd>
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the SDL window title, if not specified default to the filename specified for the output device.
+Ignored when ‘<samp>no_window</samp>’ is set.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-7"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-7">4.5.2 Examples</a></h3>
+<p>Play a file on SDL window using OpenGL rendering:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f opengl "window title"
+</pre></td></tr></table>
+
+<a name="oss-1"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-oss-1">4.6 oss</a></h2>
+
+<p>OSS (Open Sound System) output device.
+</p>
+<a name="pulse"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-pulse">4.7 pulse</a></h2>
+
+<p>PulseAudio output device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-libpulse</code>.
+</p>
+<p>More information about PulseAudio can be found on <a href="http://www.pulseaudio.org">http://www.pulseaudio.org</a>
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-1">4.7.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>Connect to a specific PulseAudio server, specified by an IP address.
+Default server is used when not provided.
+</p>
+</dd>
+<dt> ‘<samp>name</samp>’</dt>
+<dd><p>Specify the application name PulseAudio will use when showing active clients,
+by default it is the <code>LIBAVFORMAT_IDENT</code> string.
+</p>
+</dd>
+<dt> ‘<samp>stream_name</samp>’</dt>
+<dd><p>Specify the stream name PulseAudio will use when showing active streams,
+by default it is set to the specified output name.
+</p>
+</dd>
+<dt> ‘<samp>device</samp>’</dt>
+<dd><p>Specify the device to use. Default device is used when not provided.
+List of output devices can be obtained with command <code>pactl list sinks</code>.
+</p>
+</dd>
+<dt> ‘<samp>buffer_size</samp>’</dt>
+<dt> ‘<samp>buffer_duration</samp>’</dt>
+<dd><p>Control the size and duration of the PulseAudio buffer. A small buffer
+gives more control, but requires more frequent updates.
+</p>
+<p>‘<samp>buffer_size</samp>’ specifies size in bytes while
+‘<samp>buffer_duration</samp>’ specifies duration in milliseconds.
+</p>
+<p>When both options are provided then the highest value is used
+(duration is recalculated to bytes using stream parameters). If they
+are set to 0 (which is default), the device will use the default
+PulseAudio duration value. By default PulseAudio set buffer duration
+to around 2 seconds.
+</p></dd>
+</dl>
+
+<a name="Examples-3"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-3">4.7.2 Examples</a></h3>
+<p>Play a file on default device on default server:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f pulse "stream name"
+</pre></td></tr></table>
+
+<a name="sdl"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-sdl">4.8 sdl</a></h2>
+
+<p>SDL (Simple DirectMedia Layer) output device.
+</p>
+<p>This output device allows one 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.
+</p>
+<p>To enable this output device you need libsdl installed on your system
+when configuring your build.
+</p>
+<p>For more information about SDL, check:
+<a href="http://www.libsdl.org/">http://www.libsdl.org/</a>
+</p>
+<a name="Options-3"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-3">4.8.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the SDL window title, if not specified default to the filename
+specified for the output device.
+</p>
+</dd>
+<dt> ‘<samp>icon_title</samp>’</dt>
+<dd><p>Set the name of the iconified SDL window, if not specified it is set
+to the same value of <var>window_title</var>.
+</p>
+</dd>
+<dt> ‘<samp>window_size</samp>’</dt>
+<dd><p>Set the SDL window size, can be a string of the form
+<var>width</var>x<var>height</var> or a video size abbreviation.
+If not specified it defaults to the size of the input video,
+downscaled according to the aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>window_fullscreen</samp>’</dt>
+<dd><p>Set fullscreen mode when non-zero value is provided.
+Default value is zero.
+</p></dd>
+</dl>
+
+<a name="Interactive-commands"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Interactive-commands">4.8.2 Interactive commands</a></h3>
+
+<p>The window created by the device can be controlled through the
+following interactive commands.
+</p>
+<dl compact="compact">
+<dt> <q, ESC></dt>
+<dd><p>Quit the device immediately.
+</p></dd>
+</dl>
+
+<a name="Examples-12"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-12">4.8.3 Examples</a></h3>
+
+<p>The following command shows the <code>ffmpeg</code> output is an
+SDL window, forcing its size to the qcif format:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
+</pre></td></tr></table>
+
+<a name="sndio-1"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-sndio-1">4.9 sndio</a></h2>
+
+<p>sndio audio output device.
+</p>
+<a name="xv"></a>
+<h2 class="section"><a href="ffmpeg-devices.html#toc-xv">4.10 xv</a></h2>
+
+<p>XV (XVideo) output device.
+</p>
+<p>This output device allows one to show a video stream in a X Window System
+window.
+</p>
+<a name="Options-10"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Options-10">4.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>display_name</samp>’</dt>
+<dd><p>Specify the hardware display name, which determines the display and
+communications domain to be used.
+</p>
+<p>The display name or DISPLAY environment variable can be a string in
+the format <var>hostname</var>[:<var>number</var>[.<var>screen_number</var>]].
+</p>
+<p><var>hostname</var> specifies the name of the host machine on which the
+display is physically attached. <var>number</var> specifies the number of
+the display server on that host machine. <var>screen_number</var> specifies
+the screen to be used on that server.
+</p>
+<p>If unspecified, it defaults to the value of the DISPLAY environment
+variable.
+</p>
+<p>For example, <code>dual-headed:0.1</code> would specify screen 1 of display
+0 on the machine named “dual-headed”.
+</p>
+<p>Check the X11 specification for more detailed information about the
+display name format.
+</p>
+</dd>
+<dt> ‘<samp>window_size</samp>’</dt>
+<dd><p>Set the created window size, can be a string of the form
+<var>width</var>x<var>height</var> or a video size abbreviation. If not
+specified it defaults to the size of the input video.
+</p>
+</dd>
+<dt> ‘<samp>window_x</samp>’</dt>
+<dt> ‘<samp>window_y</samp>’</dt>
+<dd><p>Set the X and Y window offsets for the created window. They are both
+set to 0 by default. The values may be ignored by the window manager.
+</p>
+</dd>
+<dt> ‘<samp>window_title</samp>’</dt>
+<dd><p>Set the window title, if not specified default to the filename
+specified for the output device.
+</p></dd>
+</dl>
+
+<p>For more information about XVideo see <a href="http://www.x.org/">http://www.x.org/</a>.
+</p>
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffmpeg-devices.html#toc-Examples-2">4.10.2 Examples</a></h3>
+
+<ul>
+<li>
+Decode, display and encode video input with <code>ffmpeg</code> at the
+same time:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT OUTPUT -f xv display
+</pre></td></tr></table>
+
+</li><li>
+Decode and display the input video to multiple X11 windows:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
+</pre></td></tr></table>
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-devices.html#toc-See-Also">5. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavdevice.html">libavdevice</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-devices.html#toc-Authors">6. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Filters </title>
+
+<meta name="description" content="FFmpeg Filters Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Filters ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Filters Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Filtering-Introduction" href="#Filtering-Introduction">2. Filtering Introduction</a></li>
+ <li><a name="toc-graph2dot" href="#graph2dot">3. graph2dot</a></li>
+ <li><a name="toc-Filtergraph-description" href="#Filtergraph-description">4. Filtergraph description</a>
+ <ul class="toc">
+ <li><a name="toc-Filtergraph-syntax-1" href="#Filtergraph-syntax-1">4.1 Filtergraph syntax</a></li>
+ <li><a name="toc-Notes-on-filtergraph-escaping" href="#Notes-on-filtergraph-escaping">4.2 Notes on filtergraph escaping</a></li>
+ </ul></li>
+ <li><a name="toc-Timeline-editing" href="#Timeline-editing">5. Timeline editing</a></li>
+ <li><a name="toc-Audio-Filters" href="#Audio-Filters">6. Audio Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aconvert" href="#aconvert">6.1 aconvert</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-37" href="#Examples-37">6.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-adelay" href="#adelay">6.2 adelay</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-32" href="#Examples-32">6.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aecho" href="#aecho">6.3 aecho</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-20" href="#Examples-20">6.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aeval" href="#aeval">6.4 aeval</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-64" href="#Examples-64">6.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-afade" href="#afade">6.5 afade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-28" href="#Examples-28">6.5.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aformat-1" href="#aformat-1">6.6 aformat</a></li>
+ <li><a name="toc-allpass" href="#allpass">6.7 allpass</a></li>
+ <li><a name="toc-amerge" href="#amerge">6.8 amerge</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-38" href="#Examples-38">6.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-amix" href="#amix">6.9 amix</a></li>
+ <li><a name="toc-anull" href="#anull">6.10 anull</a></li>
+ <li><a name="toc-apad" href="#apad">6.11 apad</a></li>
+ <li><a name="toc-aphaser" href="#aphaser">6.12 aphaser</a></li>
+ <li><a name="toc-aresample-1" href="#aresample-1">6.13 aresample</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-5" href="#Examples-5">6.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asetnsamples" href="#asetnsamples">6.14 asetnsamples</a></li>
+ <li><a name="toc-asetrate" href="#asetrate">6.15 asetrate</a></li>
+ <li><a name="toc-ashowinfo" href="#ashowinfo">6.16 ashowinfo</a></li>
+ <li><a name="toc-astats" href="#astats">6.17 astats</a></li>
+ <li><a name="toc-astreamsync" href="#astreamsync">6.18 astreamsync</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-45" href="#Examples-45">6.18.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asyncts" href="#asyncts">6.19 asyncts</a></li>
+ <li><a name="toc-atempo" href="#atempo">6.20 atempo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-23" href="#Examples-23">6.20.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-atrim" href="#atrim">6.21 atrim</a></li>
+ <li><a name="toc-bandpass" href="#bandpass">6.22 bandpass</a></li>
+ <li><a name="toc-bandreject" href="#bandreject">6.23 bandreject</a></li>
+ <li><a name="toc-bass" href="#bass">6.24 bass</a></li>
+ <li><a name="toc-biquad" href="#biquad">6.25 biquad</a></li>
+ <li><a name="toc-channelmap" href="#channelmap">6.26 channelmap</a></li>
+ <li><a name="toc-channelsplit" href="#channelsplit">6.27 channelsplit</a></li>
+ <li><a name="toc-compand" href="#compand">6.28 compand</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-65" href="#Examples-65">6.28.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-earwax" href="#earwax">6.29 earwax</a></li>
+ <li><a name="toc-equalizer" href="#equalizer">6.30 equalizer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-14" href="#Examples-14">6.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-highpass" href="#highpass">6.31 highpass</a></li>
+ <li><a name="toc-join" href="#join">6.32 join</a></li>
+ <li><a name="toc-ladspa" href="#ladspa">6.33 ladspa</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-35" href="#Examples-35">6.33.1 Examples</a></li>
+ <li><a name="toc-Commands" href="#Commands">6.33.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-lowpass" href="#lowpass">6.34 lowpass</a></li>
+ <li><a name="toc-pan" href="#pan">6.35 pan</a>
+ <ul class="toc">
+ <li><a name="toc-Mixing-examples" href="#Mixing-examples">6.35.1 Mixing examples</a></li>
+ <li><a name="toc-Remapping-examples" href="#Remapping-examples">6.35.2 Remapping examples</a></li>
+ </ul></li>
+ <li><a name="toc-replaygain" href="#replaygain">6.36 replaygain</a></li>
+ <li><a name="toc-resample" href="#resample">6.37 resample</a></li>
+ <li><a name="toc-silencedetect" href="#silencedetect">6.38 silencedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-3" href="#Examples-3">6.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-treble" href="#treble">6.39 treble</a></li>
+ <li><a name="toc-volume" href="#volume">6.40 volume</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-5" href="#Commands-5">6.40.1 Commands</a></li>
+ <li><a name="toc-Examples-55" href="#Examples-55">6.40.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-volumedetect" href="#volumedetect">6.41 volumedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-17" href="#Examples-17">6.41.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sources" href="#Audio-Sources">7. Audio Sources</a>
+ <ul class="toc">
+ <li><a name="toc-abuffer" href="#abuffer">7.1 abuffer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-44" href="#Examples-44">7.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aevalsrc" href="#aevalsrc">7.2 aevalsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-9" href="#Examples-9">7.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-anullsrc" href="#anullsrc">7.3 anullsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-72" href="#Examples-72">7.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-flite" href="#flite">7.4 flite</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-74" href="#Examples-74">7.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sine" href="#sine">7.5 sine</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-58" href="#Examples-58">7.5.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sinks" href="#Audio-Sinks">8. Audio Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-abuffersink" href="#abuffersink">8.1 abuffersink</a></li>
+ <li><a name="toc-anullsink" href="#anullsink">8.2 anullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Filters" href="#Video-Filters">9. Video Filters</a>
+ <ul class="toc">
+ <li><a name="toc-alphaextract" href="#alphaextract">9.1 alphaextract</a></li>
+ <li><a name="toc-alphamerge" href="#alphamerge">9.2 alphamerge</a></li>
+ <li><a name="toc-ass" href="#ass">9.3 ass</a></li>
+ <li><a name="toc-bbox" href="#bbox">9.4 bbox</a></li>
+ <li><a name="toc-blackdetect" href="#blackdetect">9.5 blackdetect</a></li>
+ <li><a name="toc-blackframe" href="#blackframe">9.6 blackframe</a></li>
+ <li><a name="toc-blend" href="#blend">9.7 blend</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-73" href="#Examples-73">9.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-boxblur" href="#boxblur">9.8 boxblur</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-15" href="#Examples-15">9.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorbalance" href="#colorbalance">9.9 colorbalance</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-21" href="#Examples-21">9.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorchannelmixer" href="#colorchannelmixer">9.10 colorchannelmixer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-12" href="#Examples-12">9.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colormatrix" href="#colormatrix">9.11 colormatrix</a></li>
+ <li><a name="toc-copy" href="#copy">9.12 copy</a></li>
+ <li><a name="toc-crop" href="#crop">9.13 crop</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-8" href="#Examples-8">9.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-cropdetect" href="#cropdetect">9.14 cropdetect</a></li>
+ <li><a name="toc-curves-1" href="#curves-1">9.15 curves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">9.15.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dctdnoiz" href="#dctdnoiz">9.16 dctdnoiz</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-70" href="#Examples-70">9.16.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-decimate-1" href="#decimate-1">9.17 decimate</a></li>
+ <li><a name="toc-dejudder" href="#dejudder">9.18 dejudder</a></li>
+ <li><a name="toc-delogo" href="#delogo">9.19 delogo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-27" href="#Examples-27">9.19.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-deshake" href="#deshake">9.20 deshake</a></li>
+ <li><a name="toc-drawbox" href="#drawbox">9.21 drawbox</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-46" href="#Examples-46">9.21.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawgrid" href="#drawgrid">9.22 drawgrid</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-18" href="#Examples-18">9.22.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawtext-1" href="#drawtext-1">9.23 drawtext</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax" href="#Syntax">9.23.1 Syntax</a></li>
+ <li><a name="toc-Text-expansion" href="#Text-expansion">9.23.2 Text expansion</a></li>
+ <li><a name="toc-Examples-34" href="#Examples-34">9.23.3 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-edgedetect" href="#edgedetect">9.24 edgedetect</a></li>
+ <li><a name="toc-extractplanes" href="#extractplanes">9.25 extractplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-54" href="#Examples-54">9.25.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-elbg" href="#elbg">9.26 elbg</a></li>
+ <li><a name="toc-fade" href="#fade">9.27 fade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-22" href="#Examples-22">9.27.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-field" href="#field">9.28 field</a></li>
+ <li><a name="toc-fieldmatch" href="#fieldmatch">9.29 fieldmatch</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn_002fu_002fb-meaning-1" href="#p_002fc_002fn_002fu_002fb-meaning-1">9.29.1 p/c/n/u/b meaning</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn" href="#p_002fc_002fn">9.29.1.1 p/c/n</a></li>
+ <li><a name="toc-u_002fb" href="#u_002fb">9.29.1.2 u/b</a></li>
+ </ul></li>
+ <li><a name="toc-Examples-30" href="#Examples-30">9.29.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fieldorder" href="#fieldorder">9.30 fieldorder</a></li>
+ <li><a name="toc-fifo" href="#fifo">9.31 fifo</a></li>
+ <li><a name="toc-format-1" href="#format-1">9.32 format</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-71" href="#Examples-71">9.32.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fps-1" href="#fps-1">9.33 fps</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-31" href="#Examples-31">9.33.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framepack" href="#framepack">9.34 framepack</a></li>
+ <li><a name="toc-framestep" href="#framestep">9.35 framestep</a></li>
+ <li><a name="toc-frei0r-1" href="#frei0r-1">9.36 frei0r</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-49" href="#Examples-49">9.36.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-geq" href="#geq">9.37 geq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-29" href="#Examples-29">9.37.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-gradfun" href="#gradfun">9.38 gradfun</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-41" href="#Examples-41">9.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-haldclut-1" href="#haldclut-1">9.39 haldclut</a>
+ <ul class="toc">
+ <li><a name="toc-Workflow-examples" href="#Workflow-examples">9.39.1 Workflow examples</a>
+ <ul class="toc">
+ <li><a name="toc-Hald-CLUT-video-stream" href="#Hald-CLUT-video-stream">9.39.1.1 Hald CLUT video stream</a></li>
+ <li><a name="toc-Hald-CLUT-with-preview" href="#Hald-CLUT-with-preview">9.39.1.2 Hald CLUT with preview</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-hflip" href="#hflip">9.40 hflip</a></li>
+ <li><a name="toc-histeq" href="#histeq">9.41 histeq</a></li>
+ <li><a name="toc-histogram" href="#histogram">9.42 histogram</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-52" href="#Examples-52">9.42.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-hqdn3d-1" href="#hqdn3d-1">9.43 hqdn3d</a></li>
+ <li><a name="toc-hue" href="#hue">9.44 hue</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-42" href="#Examples-42">9.44.1 Examples</a></li>
+ <li><a name="toc-Commands-3" href="#Commands-3">9.44.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-idet" href="#idet">9.45 idet</a></li>
+ <li><a name="toc-il" href="#il">9.46 il</a></li>
+ <li><a name="toc-interlace" href="#interlace">9.47 interlace</a></li>
+ <li><a name="toc-kerndeint" href="#kerndeint">9.48 kerndeint</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-26" href="#Examples-26">9.48.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-lut3d-1" href="#lut3d-1">9.49 lut3d</a></li>
+ <li><a name="toc-lut_002c-lutrgb_002c-lutyuv" href="#lut_002c-lutrgb_002c-lutyuv">9.50 lut, lutrgb, lutyuv</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-4" href="#Examples-4">9.50.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mergeplanes" href="#mergeplanes">9.51 mergeplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-56" href="#Examples-56">9.51.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mcdeint" href="#mcdeint">9.52 mcdeint</a></li>
+ <li><a name="toc-mp" href="#mp">9.53 mp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-50" href="#Examples-50">9.53.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpdecimate" href="#mpdecimate">9.54 mpdecimate</a></li>
+ <li><a name="toc-negate" href="#negate">9.55 negate</a></li>
+ <li><a name="toc-noformat" href="#noformat">9.56 noformat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-25" href="#Examples-25">9.56.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-noise" href="#noise">9.57 noise</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-53" href="#Examples-53">9.57.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-null" href="#null">9.58 null</a></li>
+ <li><a name="toc-ocv" href="#ocv">9.59 ocv</a>
+ <ul class="toc">
+ <li><a name="toc-dilate-1" href="#dilate-1">9.59.1 dilate</a></li>
+ <li><a name="toc-erode" href="#erode">9.59.2 erode</a></li>
+ <li><a name="toc-smooth" href="#smooth">9.59.3 smooth</a></li>
+ </ul></li>
+ <li><a name="toc-overlay-1" href="#overlay-1">9.60 overlay</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-2" href="#Commands-2">9.60.1 Commands</a></li>
+ <li><a name="toc-Examples-33" href="#Examples-33">9.60.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-owdenoise" href="#owdenoise">9.61 owdenoise</a></li>
+ <li><a name="toc-pad" href="#pad">9.62 pad</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-39" href="#Examples-39">9.62.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perspective" href="#perspective">9.63 perspective</a></li>
+ <li><a name="toc-phase" href="#phase">9.64 phase</a></li>
+ <li><a name="toc-pixdesctest" href="#pixdesctest">9.65 pixdesctest</a></li>
+ <li><a name="toc-pp" href="#pp">9.66 pp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-43" href="#Examples-43">9.66.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-psnr" href="#psnr">9.67 psnr</a></li>
+ <li><a name="toc-pullup-1" href="#pullup-1">9.68 pullup</a></li>
+ <li><a name="toc-removelogo" href="#removelogo">9.69 removelogo</a></li>
+ <li><a name="toc-rotate" href="#rotate">9.70 rotate</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-62" href="#Examples-62">9.70.1 Examples</a></li>
+ <li><a name="toc-Commands-4" href="#Commands-4">9.70.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-sab" href="#sab">9.71 sab</a></li>
+ <li><a name="toc-scale-1" href="#scale-1">9.72 scale</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">9.72.1 Options</a></li>
+ <li><a name="toc-Examples-24" href="#Examples-24">9.72.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-separatefields" href="#separatefields">9.73 separatefields</a></li>
+ <li><a name="toc-setdar_002c-setsar" href="#setdar_002c-setsar">9.74 setdar, setsar</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-66" href="#Examples-66">9.74.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setfield-1" href="#setfield-1">9.75 setfield</a></li>
+ <li><a name="toc-showinfo" href="#showinfo">9.76 showinfo</a></li>
+ <li><a name="toc-smartblur-1" href="#smartblur-1">9.77 smartblur</a></li>
+ <li><a name="toc-stereo3d" href="#stereo3d">9.78 stereo3d</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-16" href="#Examples-16">9.78.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-spp" href="#spp">9.79 spp</a></li>
+ <li><a name="toc-subtitles-1" href="#subtitles-1">9.80 subtitles</a></li>
+ <li><a name="toc-super2xsai" href="#super2xsai">9.81 super2xsai</a></li>
+ <li><a name="toc-swapuv" href="#swapuv">9.82 swapuv</a></li>
+ <li><a name="toc-telecine" href="#telecine">9.83 telecine</a></li>
+ <li><a name="toc-thumbnail" href="#thumbnail">9.84 thumbnail</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-51" href="#Examples-51">9.84.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tile" href="#tile">9.85 tile</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-2" href="#Examples-2">9.85.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tinterlace" href="#tinterlace">9.86 tinterlace</a></li>
+ <li><a name="toc-transpose" href="#transpose">9.87 transpose</a></li>
+ <li><a name="toc-trim" href="#trim">9.88 trim</a></li>
+ <li><a name="toc-unsharp" href="#unsharp">9.89 unsharp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-19" href="#Examples-19">9.89.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabdetect-1" href="#vidstabdetect-1">9.90 vidstabdetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-59" href="#Examples-59">9.90.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabtransform-1" href="#vidstabtransform-1">9.91 vidstabtransform</a>
+ <ul class="toc">
+ <li><a name="toc-Options" href="#Options">9.91.1 Options</a></li>
+ <li><a name="toc-Examples-13" href="#Examples-13">9.91.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vflip" href="#vflip">9.92 vflip</a></li>
+ <li><a name="toc-vignette" href="#vignette">9.93 vignette</a>
+ <ul class="toc">
+ <li><a name="toc-Expressions" href="#Expressions">9.93.1 Expressions</a></li>
+ <li><a name="toc-Examples-48" href="#Examples-48">9.93.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-w3fdif" href="#w3fdif">9.94 w3fdif</a></li>
+ <li><a name="toc-yadif-1" href="#yadif-1">9.95 yadif</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Sources" href="#Video-Sources">10. Video Sources</a>
+ <ul class="toc">
+ <li><a name="toc-buffer" href="#buffer">10.1 buffer</a></li>
+ <li><a name="toc-cellauto" href="#cellauto">10.2 cellauto</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-36" href="#Examples-36">10.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mandelbrot" href="#mandelbrot">10.3 mandelbrot</a></li>
+ <li><a name="toc-mptestsrc" href="#mptestsrc">10.4 mptestsrc</a></li>
+ <li><a name="toc-frei0r_005fsrc" href="#frei0r_005fsrc">10.5 frei0r_src</a></li>
+ <li><a name="toc-life" href="#life">10.6 life</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-11" href="#Examples-11">10.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc" href="#color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">10.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-1" href="#Commands-1">10.7.1 Commands</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Video-Sinks" href="#Video-Sinks">11. Video Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-buffersink" href="#buffersink">11.1 buffersink</a></li>
+ <li><a name="toc-nullsink" href="#nullsink">11.2 nullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Filters" href="#Multimedia-Filters">12. Multimedia Filters</a>
+ <ul class="toc">
+ <li><a name="toc-avectorscope" href="#avectorscope">12.1 avectorscope</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-57" href="#Examples-57">12.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-concat" href="#concat">12.2 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-10" href="#Examples-10">12.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-ebur128" href="#ebur128">12.3 ebur128</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-6" href="#Examples-6">12.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-interleave_002c-ainterleave" href="#interleave_002c-ainterleave">12.4 interleave, ainterleave</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-60" href="#Examples-60">12.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perms_002c-aperms" href="#perms_002c-aperms">12.5 perms, aperms</a></li>
+ <li><a name="toc-select_002c-aselect" href="#select_002c-aselect">12.6 select, aselect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-40" href="#Examples-40">12.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sendcmd_002c-asendcmd" href="#sendcmd_002c-asendcmd">12.7 sendcmd, asendcmd</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-syntax" href="#Commands-syntax">12.7.1 Commands syntax</a></li>
+ <li><a name="toc-Examples-7" href="#Examples-7">12.7.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setpts_002c-asetpts" href="#setpts_002c-asetpts">12.8 setpts, asetpts</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">12.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-settb_002c-asettb" href="#settb_002c-asettb">12.9 settb, asettb</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-67" href="#Examples-67">12.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showspectrum" href="#showspectrum">12.10 showspectrum</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-68" href="#Examples-68">12.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showwaves" href="#showwaves">12.11 showwaves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-47" href="#Examples-47">12.11.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-split_002c-asplit" href="#split_002c-asplit">12.12 split, asplit</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-63" href="#Examples-63">12.12.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-zmq_002c-azmq" href="#zmq_002c-azmq">12.13 zmq, azmq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-61" href="#Examples-61">12.13.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Sources" href="#Multimedia-Sources">13. Multimedia Sources</a>
+ <ul class="toc">
+ <li><a name="toc-amovie" href="#amovie">13.1 amovie</a></li>
+ <li><a name="toc-movie-1" href="#movie-1">13.2 movie</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-69" href="#Examples-69">13.2.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">14. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">15. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes filters, sources, and sinks provided by the
+libavfilter library.
+</p>
+
+<a name="Filtering-Introduction"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Filtering-Introduction">2. Filtering Introduction</a></h1>
+
+<p>Filtering in FFmpeg is enabled through the libavfilter library.
+</p>
+<p>In libavfilter, a filter can have multiple inputs and multiple
+outputs.
+To illustrate the sorts of things that are possible, we consider the
+following filtergraph.
+</p>
+<table><tr><td> </td><td><pre class="example"> [main]
+input --> split ---------------------> overlay --> output
+ | ^
+ |[tmp] [flip]|
+ +-----> crop --> vflip -------+
+</pre></td></tr></table>
+
+<p>This filtergraph splits the input 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:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
+</pre></td></tr></table>
+
+<p>The result will be that in output the top half of the video is mirrored
+onto the bottom half.
+</p>
+<p>Filters in the same linear chain are separated by commas, and distinct
+linear chains of filters are separated by semicolons. In our example,
+<var>crop,vflip</var> are in one linear chain, <var>split</var> and
+<var>overlay</var> are separately in another. The points where the linear
+chains join are labelled by names enclosed in square brackets. In the
+example, the split filter generates two outputs that are associated to
+the labels <var>[main]</var> and <var>[tmp]</var>.
+</p>
+<p>The stream sent to the second output of <var>split</var>, labelled as
+<var>[tmp]</var>, is processed through the <var>crop</var> filter, which crops
+away the lower half part of the video, and then vertically flipped. The
+<var>overlay</var> filter takes in input the first unchanged output of the
+split filter (which was labelled as <var>[main]</var>), and overlay on its
+lower half the output generated by the <var>crop,vflip</var> filterchain.
+</p>
+<p>Some filters take in input a list of parameters: they are specified
+after the filter name and an equal sign, and are separated from each other
+by a colon.
+</p>
+<p>There exist so-called <var>source filters</var> that do not have an
+audio/video input, and <var>sink filters</var> that will not have audio/video
+output.
+</p>
+
+<a name="graph2dot"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-graph2dot">3. graph2dot</a></h1>
+
+<p>The ‘<tt>graph2dot</tt>’ program included in the FFmpeg ‘<tt>tools</tt>’
+directory can be used to parse a filtergraph description and issue a
+corresponding textual representation in the dot language.
+</p>
+<p>Invoke the command:
+</p><table><tr><td> </td><td><pre class="example">graph2dot -h
+</pre></td></tr></table>
+
+<p>to see how to use ‘<tt>graph2dot</tt>’.
+</p>
+<p>You can then pass the dot description to the ‘<tt>dot</tt>’ program (from
+the graphviz suite of programs) and obtain a graphical representation
+of the filtergraph.
+</p>
+<p>For example the sequence of commands:
+</p><table><tr><td> </td><td><pre class="example">echo <var>GRAPH_DESCRIPTION</var> | \
+tools/graph2dot -o graph.tmp && \
+dot -Tpng graph.tmp -o graph.png && \
+display graph.png
+</pre></td></tr></table>
+
+<p>can be used to create and display an image representing the graph
+described by the <var>GRAPH_DESCRIPTION</var> string. Note that this string must be
+a complete self-contained graph, with its inputs and outputs explicitly defined.
+For example if your command line is of the form:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i infile -vf scale=640:360 outfile
+</pre></td></tr></table>
+<p>your <var>GRAPH_DESCRIPTION</var> string will need to be of the form:
+</p><table><tr><td> </td><td><pre class="example">nullsrc,scale=640:360,nullsink
+</pre></td></tr></table>
+<p>you may also need to set the <var>nullsrc</var> parameters and add a <var>format</var>
+filter in order to simulate a specific input file.
+</p>
+
+<a name="Filtergraph-description"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Filtergraph-description">4. Filtergraph description</a></h1>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>A filter with no input pads is called a "source", a filter with no
+output pads is called a "sink".
+</p>
+<p><a name="Filtergraph-syntax"></a>
+</p><a name="Filtergraph-syntax-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-Filtergraph-syntax-1">4.1 Filtergraph syntax</a></h2>
+
+<p>A filtergraph can be represented using a textual representation, which is
+recognized by the ‘<samp>-filter</samp>’/‘<samp>-vf</samp>’ and ‘<samp>-filter_complex</samp>’
+options in <code>ffmpeg</code> and ‘<samp>-vf</samp>’ in <code>ffplay</code>, and by the
+<code>avfilter_graph_parse()</code>/<code>avfilter_graph_parse2()</code> function defined in
+‘<tt>libavfilter/avfilter.h</tt>’.
+</p>
+<p>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.
+</p>
+<p>A filtergraph consists of a sequence of filterchains. A sequence of
+filterchains is represented by a list of ";"-separated filterchain
+descriptions.
+</p>
+<p>A filter is represented by a string of the form:
+[<var>in_link_1</var>]...[<var>in_link_N</var>]<var>filter_name</var>=<var>arguments</var>[<var>out_link_1</var>]...[<var>out_link_M</var>]
+</p>
+<p><var>filter_name</var> 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
+"=<var>arguments</var>".
+</p>
+<p><var>arguments</var> is a string which contains the parameters used to
+initialize the filter instance. It may have one of the following forms:
+</p><ul>
+<li>
+A ’:’-separated list of <var>key=value</var> pairs.
+
+</li><li>
+A ’:’-separated list of <var>value</var>. In this case, the keys are assumed to be
+the option names in the order they are declared. E.g. the <code>fade</code> filter
+declares three options in this order – ‘<samp>type</samp>’, ‘<samp>start_frame</samp>’ and
+‘<samp>nb_frames</samp>’. Then the parameter list <var>in:0:30</var> means that the value
+<var>in</var> is assigned to the option ‘<samp>type</samp>’, <var>0</var> to
+‘<samp>start_frame</samp>’ and <var>30</var> to ‘<samp>nb_frames</samp>’.
+
+</li><li>
+A ’:’-separated list of mixed direct <var>value</var> and long <var>key=value</var>
+pairs. The direct <var>value</var> must precede the <var>key=value</var> pairs, and
+follow the same constraints order of the previous point. The following
+<var>key=value</var> pairs can be set in any preferred order.
+
+</li></ul>
+
+<p>If the option value itself is a list of items (e.g. the <code>format</code> filter
+takes a list of pixel formats), the items in the list are usually separated by
+’|’.
+</p>
+<p>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.
+</p>
+<p>The name and arguments of the filter are optionally preceded and
+followed by a list of link labels.
+A link label allows one to name a link and associate it to a filter output
+or input pad. The preceding labels <var>in_link_1</var>
+... <var>in_link_N</var>, are associated to the filter input pads,
+the following labels <var>out_link_1</var> ... <var>out_link_M</var>, are
+associated to the output pads.
+</p>
+<p>When two link labels with the same name are found in the
+filtergraph, a link between the corresponding input and output pad is
+created.
+</p>
+<p>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:
+</p><table><tr><td> </td><td><pre class="example">nullsrc, split[L1], [L2]overlay, nullsink
+</pre></td></tr></table>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>Libavfilter will automatically insert <a href="#scale">scale</a> filters where format
+conversion is required. It is possible to specify swscale flags
+for those automatically inserted scalers by prepending
+<code>sws_flags=<var>flags</var>;</code>
+to the filtergraph description.
+</p>
+<p>Follows a BNF description for the filtergraph syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>NAME</var> ::= sequence of alphanumeric characters and '_'
+<var>LINKLABEL</var> ::= "[" <var>NAME</var> "]"
+<var>LINKLABELS</var> ::= <var>LINKLABEL</var> [<var>LINKLABELS</var>]
+<var>FILTER_ARGUMENTS</var> ::= sequence of chars (eventually quoted)
+<var>FILTER</var> ::= [<var>LINKLABELS</var>] <var>NAME</var> ["=" <var>FILTER_ARGUMENTS</var>] [<var>LINKLABELS</var>]
+<var>FILTERCHAIN</var> ::= <var>FILTER</var> [,<var>FILTERCHAIN</var>]
+<var>FILTERGRAPH</var> ::= [sws_flags=<var>flags</var>;] <var>FILTERCHAIN</var> [;<var>FILTERGRAPH</var>]
+</pre></td></tr></table>
+
+<a name="Notes-on-filtergraph-escaping"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-Notes-on-filtergraph-escaping">4.2 Notes on filtergraph escaping</a></h2>
+
+<p>Filtergraph description composition entails several levels of
+escaping. See <a href="ffmpeg-utils.html#quoting_005fand_005fescaping">(ffmpeg-utils)quoting_and_escaping</a> for more
+information about the employed escaping procedure.
+</p>
+<p>A first level escaping affects the content of each filter option
+value, which may contain the special character <code>:</code> used to
+separate values, or one of the escaping characters <code>\'</code>.
+</p>
+<p>A second level escaping affects the whole filter description, which
+may contain the escaping characters <code>\'</code> or the special
+characters <code>[],;</code> used by the filtergraph description.
+</p>
+<p>Finally, when you specify a filtergraph on a shell commandline, you
+need to perform a third level escaping for the shell special
+characters contained within it.
+</p>
+<p>For example, consider the following string to be embedded in
+the <a href="#drawtext">drawtext</a> filter description ‘<samp>text</samp>’ value:
+</p><table><tr><td> </td><td><pre class="example">this is a 'string': may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>This string contains the <code>'</code> special escaping character, and the
+<code>:</code> special character, so it needs to be escaped in this way:
+</p><table><tr><td> </td><td><pre class="example">text=this is a \'string\'\: may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>A second level of escaping is required when embedding the filter
+description in a filtergraph description, in order to escape all the
+filtergraph special characters. Thus the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
+</pre></td></tr></table>
+<p>(note that in addition to the <code>\'</code> escaping special characters,
+also <code>,</code> needs to be escaped).
+</p>
+<p>Finally an additional level of escaping is needed when writing the
+filtergraph description in a shell command, which depends on the
+escaping rules of the adopted shell. For example, assuming that
+<code>\</code> is special and needs to be escaped with another <code>\</code>, the
+previous string will finally result in:
+</p><table><tr><td> </td><td><pre class="example">-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
+</pre></td></tr></table>
+
+<a name="Timeline-editing"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Timeline-editing">5. Timeline editing</a></h1>
+
+<p>Some filters support a generic ‘<samp>enable</samp>’ option. For the filters
+supporting timeline editing, this option can be set to an expression which is
+evaluated before sending a frame to the filter. If the evaluation is non-zero,
+the filter will be enabled, otherwise the frame will be sent unchanged to the
+next filter in the filtergraph.
+</p>
+<p>The expression accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p></dd>
+</dl>
+
+<p>Additionally, these filters support an ‘<samp>enable</samp>’ command that can be used
+to re-define the expression.
+</p>
+<p>Like any other filtering option, the ‘<samp>enable</samp>’ option follows the same
+rules.
+</p>
+<p>For example, to enable a blur filter (<a href="#smartblur">smartblur</a>) from 10 seconds to 3
+minutes, and a <a href="#curves">curves</a> filter starting at 3 seconds:
+</p><table><tr><td> </td><td><pre class="example">smartblur = enable='between(t,10,3*60)',
+curves = enable='gte(t,3)' : preset=cross_process
+</pre></td></tr></table>
+
+
+<a name="Audio-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Audio-Filters">6. Audio Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the audio filters included in your
+build.
+</p>
+<p>Below is a description of the currently available audio filters.
+</p>
+<a name="aconvert"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aconvert">6.1 aconvert</a></h2>
+
+<p>Convert the input audio format to the specified formats.
+</p>
+<p><em>This filter is deprecated. Use <a href="#aformat">aformat</a> instead.</em>
+</p>
+<p>The filter accepts a string of the form:
+"<var>sample_format</var>:<var>channel_layout</var>".
+</p>
+<p><var>sample_format</var> specifies the sample format, and can be a string or the
+corresponding numeric value defined in ‘<tt>libavutil/samplefmt.h</tt>’. Use ’p’
+suffix for a planar sample format.
+</p>
+<p><var>channel_layout</var> specifies the channel layout, and can be a string
+or the corresponding number value defined in ‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<p>The special parameter "auto", signifies that the filter will
+automatically select the output format depending on the output filter.
+</p>
+<a name="Examples-37"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-37">6.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input to float, planar, stereo:
+<table><tr><td> </td><td><pre class="example">aconvert=fltp:stereo
+</pre></td></tr></table>
+
+</li><li>
+Convert input to unsigned 8-bit, automatically select out channel layout:
+<table><tr><td> </td><td><pre class="example">aconvert=u8:auto
+</pre></td></tr></table>
+</li></ul>
+
+<a name="adelay"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-adelay">6.2 adelay</a></h2>
+
+<p>Delay one or more audio channels.
+</p>
+<p>Samples in delayed channel are filled with silence.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of delays in milliseconds for each channel separated by ’|’.
+At least one delay greater than 0 should be provided.
+Unused delays will be silently ignored. If number of given delays is
+smaller than number of channels all remaining channels will not be delayed.
+</p></dd>
+</dl>
+
+<a name="Examples-32"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-32">6.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Delay first channel by 1.5 seconds, the third channel by 0.5 seconds and leave
+the second channel (and any other channels that may be present) unchanged.
+<table><tr><td> </td><td><pre class="example">adelay=1500|0|500
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aecho"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aecho">6.3 aecho</a></h2>
+
+<p>Apply echoing to the input audio.
+</p>
+<p>Echoes are reflected sound and can occur naturally amongst mountains
+(and sometimes large buildings) when talking or shouting; digital echo
+effects emulate this behaviour and are often used to help fill out the
+sound of a single instrument or vocal. The time difference between the
+original signal and the reflection is the <code>delay</code>, and the
+loudness of the reflected signal is the <code>decay</code>.
+Multiple echoes can have different delays and decays.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain of reflected signal. Default is <code>0.6</code>.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain of reflected signal. Default is <code>0.3</code>.
+</p>
+</dd>
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of time intervals in milliseconds between original signal and reflections
+separated by ’|’. Allowed range for each <code>delay</code> is <code>(0 - 90000.0]</code>.
+Default is <code>1000</code>.
+</p>
+</dd>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of loudnesses of reflected signals separated by ’|’.
+Allowed range for each <code>decay</code> is <code>(0 - 1.0]</code>.
+Default is <code>0.5</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-20"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-20">6.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Make it sound as if there are twice as many instruments as are actually playing:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:60:0.4
+</pre></td></tr></table>
+
+</li><li>
+If delay is very short, then it sound like a (metallic) robot playing music:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:6:0.4
+</pre></td></tr></table>
+
+</li><li>
+A longer delay will sound like an open air concert in the mountains:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000:0.3
+</pre></td></tr></table>
+
+</li><li>
+Same as above but with one more mountain:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000|1800:0.3|0.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aeval"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aeval">6.4 aeval</a></h2>
+
+<p>Modify an audio signal according to the specified expressions.
+</p>
+<p>This filter accepts one or more expressions (one for each channel),
+which are evaluated and used to modify a corresponding audio signal.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. If
+the number of input channels is greater than the number of
+expressions, the last specified expression is used for the remaining
+output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set output channel layout. If not specified, the channel layout is
+specified by the number of expressions. If set to ‘<samp>same</samp>’, it will
+use by default the same input channel layout.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>channel number of the current expression
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds
+</p>
+</dd>
+<dt> ‘<samp>nb_in_channels</samp>’</dt>
+<dt> ‘<samp>nb_out_channels</samp>’</dt>
+<dd><p>input and output number of channels
+</p>
+</dd>
+<dt> ‘<samp>val(CH)</samp>’</dt>
+<dd><p>the value of input channel with number <var>CH</var>
+</p></dd>
+</dl>
+
+<p>Note: this filter is slow. For faster processing you should use a
+dedicated filter.
+</p>
+<a name="Examples-64"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-64">6.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Half volume:
+<table><tr><td> </td><td><pre class="example">aeval=val(ch)/2:c=same
+</pre></td></tr></table>
+
+</li><li>
+Invert phase of the second channel:
+<table><tr><td> </td><td><pre class="example">eval=val(0)|-val(1)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="afade"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-afade">6.5 afade</a></h2>
+
+<p>Apply fade-in/out effect to input audio.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>Specify the effect type, can be either <code>in</code> for fade-in, or
+<code>out</code> for a fade-out effect. Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_sample, ss</samp>’</dt>
+<dd><p>Specify the number of the start sample for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, ns</samp>’</dt>
+<dd><p>Specify the number of samples for which the fade effect has to last. At
+the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence. Default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify time for starting to apply the fade effect. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+If set this option is used instead of <var>start_sample</var> one.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration for which the fade effect has to last. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+At the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence.
+If set this option is used instead of <var>nb_samples</var> one.
+</p>
+</dd>
+<dt> ‘<samp>curve</samp>’</dt>
+<dd><p>Set curve for fade transition.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>tri</samp>’</dt>
+<dd><p>select triangular, linear slope (default)
+</p></dd>
+<dt> ‘<samp>qsin</samp>’</dt>
+<dd><p>select quarter of sine wave
+</p></dd>
+<dt> ‘<samp>hsin</samp>’</dt>
+<dd><p>select half of sine wave
+</p></dd>
+<dt> ‘<samp>esin</samp>’</dt>
+<dd><p>select exponential sine wave
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>select logarithmic
+</p></dd>
+<dt> ‘<samp>par</samp>’</dt>
+<dd><p>select inverted parabola
+</p></dd>
+<dt> ‘<samp>qua</samp>’</dt>
+<dd><p>select quadratic
+</p></dd>
+<dt> ‘<samp>cub</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>squ</samp>’</dt>
+<dd><p>select square root
+</p></dd>
+<dt> ‘<samp>cbr</samp>’</dt>
+<dd><p>select cubic root
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-28"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-28">6.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 15 seconds of audio:
+<table><tr><td> </td><td><pre class="example">afade=t=in:ss=0:d=15
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 25 seconds of a 900 seconds audio:
+<table><tr><td> </td><td><pre class="example">afade=t=out:st=875:d=25
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="aformat"></a>
+</p><a name="aformat-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aformat-1">6.6 aformat</a></h2>
+
+<p>Set output format constraints for the input audio. The framework will
+negotiate the most appropriate format to minimize conversions.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>sample_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample formats.
+</p>
+</dd>
+<dt> ‘<samp>sample_rates</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample rates.
+</p>
+</dd>
+<dt> ‘<samp>channel_layouts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested channel layouts.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p></dd>
+</dl>
+
+<p>If a parameter is omitted, all values are allowed.
+</p>
+<p>For example to force the output to either unsigned 8-bit or signed 16-bit stereo:
+</p><table><tr><td> </td><td><pre class="example">aformat=sample_fmts=u8|s16:channel_layouts=stereo
+</pre></td></tr></table>
+
+<a name="allpass"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-allpass">6.7 allpass</a></h2>
+
+<p>Apply a two-pole all-pass filter with central frequency (in Hz)
+<var>frequency</var>, and filter-width <var>width</var>.
+An all-pass filter changes the audio’s frequency to phase relationship
+without changing its frequency to amplitude relationship.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="amerge"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-amerge">6.8 amerge</a></h2>
+
+<p>Merge two or more audio streams into a single multi-channel stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Set the number of inputs. Default is 2.
+</p>
+</dd>
+</dl>
+
+<p>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.
+</p>
+<p>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).
+</p>
+<p>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.
+</p>
+<p>All inputs must have the same sample rate, and format.
+</p>
+<p>If inputs do not have the same duration, the output will stop with the
+shortest.
+</p>
+<a name="Examples-38"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-38">6.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge two mono files into a stereo stream:
+<table><tr><td> </td><td><pre class="example">amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
+</pre></td></tr></table>
+
+</li><li>
+Multiple merges assuming 1 video stream and 6 audio streams in ‘<tt>input.mkv</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="amix"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-amix">6.9 amix</a></h2>
+
+<p>Mixes multiple audio inputs into a single output.
+</p>
+<p>For example
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
+</pre></td></tr></table>
+<p>will mix 3 input audio streams to a single output with the same duration as the
+first input and a dropout transition time of 3 seconds.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of inputs. If unspecified, it defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>How to determine the end-of-stream.
+</p><dl compact="compact">
+<dt> ‘<samp>longest</samp>’</dt>
+<dd><p>Duration of longest input. (default)
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Duration of shortest input.
+</p>
+</dd>
+<dt> ‘<samp>first</samp>’</dt>
+<dd><p>Duration of first input.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dropout_transition</samp>’</dt>
+<dd><p>Transition time, in seconds, for volume renormalization when an input
+stream ends. The default value is 2 seconds.
+</p>
+</dd>
+</dl>
+
+<a name="anull"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-anull">6.10 anull</a></h2>
+
+<p>Pass the audio source unchanged to the output.
+</p>
+<a name="apad"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-apad">6.11 apad</a></h2>
+
+<p>Pad the end of a audio stream with silence, this can be used together with
+-shortest to extend audio streams to the same length as the video stream.
+</p>
+<a name="aphaser"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aphaser">6.12 aphaser</a></h2>
+<p>Add a phasing effect to the input audio.
+</p>
+<p>A phaser filter creates series of peaks and troughs in the frequency spectrum.
+The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain. Default is 0.74
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in milliseconds. Default is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>decay</samp>’</dt>
+<dd><p>Set decay. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>speed</samp>’</dt>
+<dd><p>Set modulation speed in Hz. Default is 0.5.
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Set modulation type. Default is triangular.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>triangular, t</samp>’</dt>
+<dt> ‘<samp>sinusoidal, s</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+<p><a name="aresample"></a>
+</p><a name="aresample-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aresample-1">6.13 aresample</a></h2>
+
+<p>Resample the input audio to the specified parameters, using the
+libswresample library. If none are specified then the filter will
+automatically convert between its input and output.
+</p>
+<p>This filter is also able to stretch/squeeze the audio data to make it match
+the timestamps or to inject silence / cut out audio to make it match the
+timestamps, do a combination of both or do neither.
+</p>
+<p>The filter accepts the syntax
+[<var>sample_rate</var>:]<var>resampler_options</var>, where <var>sample_rate</var>
+expresses a sample rate and <var>resampler_options</var> is a list of
+<var>key</var>=<var>value</var> pairs, separated by ":". See the
+ffmpeg-resampler manual for the complete list of supported options.
+</p>
+<a name="Examples-5"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-5">6.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Resample the input audio to 44100Hz:
+<table><tr><td> </td><td><pre class="example">aresample=44100
+</pre></td></tr></table>
+
+</li><li>
+Stretch/squeeze samples to the given timestamps, with a maximum of 1000
+samples per second compensation:
+<table><tr><td> </td><td><pre class="example">aresample=async=1000
+</pre></td></tr></table>
+</li></ul>
+
+<a name="asetnsamples"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-asetnsamples">6.14 asetnsamples</a></h2>
+
+<p>Set the number of samples per each output audio frame.
+</p>
+<p>The last output packet may contain a different number of samples, as
+the filter will flush all the remaining samples when the input audio
+signal its end.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_out_samples, n</samp>’</dt>
+<dd><p>Set the number of frames per each output audio frame. The number is
+intended as the number of samples <em>per each channel</em>.
+Default value is 1024.
+</p>
+</dd>
+<dt> ‘<samp>pad, p</samp>’</dt>
+<dd><p>If set to 1, the filter will pad the last audio frame with zeroes, so
+that the last frame will contain the same number of samples as the
+previous ones. Default value is 1.
+</p></dd>
+</dl>
+
+<p>For example, to set the number of per-frame samples to 1234 and
+disable padding for the last frame, use:
+</p><table><tr><td> </td><td><pre class="example">asetnsamples=n=1234:p=0
+</pre></td></tr></table>
+
+<a name="asetrate"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-asetrate">6.15 asetrate</a></h2>
+
+<p>Set the sample rate without altering the PCM data.
+This will result in a change of speed and pitch.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Set the output sample rate. Default is 44100 Hz.
+</p></dd>
+</dl>
+
+<a name="ashowinfo"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-ashowinfo">6.16 ashowinfo</a></h2>
+
+<p>Show a line containing various information for each input audio frame.
+The input audio is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation timestamp of the input frame, in time base units; the time base
+depends on the filter input pad, and is usually 1/<var>sample_rate</var>.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>presentation timestamp of the input frame in seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic audio)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>sample format
+</p>
+</dd>
+<dt> ‘<samp>chlayout</samp>’</dt>
+<dd><p>channel layout
+</p>
+</dd>
+<dt> ‘<samp>rate</samp>’</dt>
+<dd><p>sample rate for the audio frame
+</p>
+</dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples (per channel) in the frame
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio
+the data is treated as if all the planes were concatenated.
+</p>
+</dd>
+<dt> ‘<samp>plane_checksums</samp>’</dt>
+<dd><p>A list of Adler-32 checksums for each data plane.
+</p></dd>
+</dl>
+
+<a name="astats"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-astats">6.17 astats</a></h2>
+
+<p>Display time domain statistical information about the audio channels.
+Statistics are calculated and displayed for each audio channel and,
+where applicable, an overall figure is also given.
+</p>
+<p>The filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>length</samp>’</dt>
+<dd><p>Short window length in seconds, used for peak and trough RMS measurement.
+Default is <code>0.05</code> (50 miliseconds). Allowed range is <code>[0.1 - 10]</code>.
+</p></dd>
+</dl>
+
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>DC offset</samp>’</dt>
+<dd><p>Mean amplitude displacement from zero.
+</p>
+</dd>
+<dt> ‘<samp>Min level</samp>’</dt>
+<dd><p>Minimal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Max level</samp>’</dt>
+<dd><p>Maximal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Peak level dB</samp>’</dt>
+<dt> ‘<samp>RMS level dB</samp>’</dt>
+<dd><p>Standard peak and RMS level measured in dBFS.
+</p>
+</dd>
+<dt> ‘<samp>RMS peak dB</samp>’</dt>
+<dt> ‘<samp>RMS trough dB</samp>’</dt>
+<dd><p>Peak and trough values for RMS level measured over a short window.
+</p>
+</dd>
+<dt> ‘<samp>Crest factor</samp>’</dt>
+<dd><p>Standard ratio of peak to RMS level (note: not in dB).
+</p>
+</dd>
+<dt> ‘<samp>Flat factor</samp>’</dt>
+<dd><p>Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels
+(i.e. either <var>Min level</var> or <var>Max level</var>).
+</p>
+</dd>
+<dt> ‘<samp>Peak count</samp>’</dt>
+<dd><p>Number of occasions (not the number of samples) that the signal attained either
+<var>Min level</var> or <var>Max level</var>.
+</p></dd>
+</dl>
+
+<a name="astreamsync"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-astreamsync">6.18 astreamsync</a></h2>
+
+<p>Forward two audio streams and control the order the buffers are forwarded.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the 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:
+</p>
+<dl compact="compact">
+<dt> <var>b1 b2</var></dt>
+<dd><p>number of buffers forwarded so far on each stream
+</p></dd>
+<dt> <var>s1 s2</var></dt>
+<dd><p>number of samples forwarded so far on each stream
+</p></dd>
+<dt> <var>t1 t2</var></dt>
+<dd><p>current timestamp of each stream
+</p></dd>
+</dl>
+
+<p>The default value is <code>t1-t2</code>, which means to always forward the stream
+that has a smaller timestamp.
+</p></dd>
+</dl>
+
+<a name="Examples-45"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-45">6.18.1 Examples</a></h3>
+
+<p>Stress-test <code>amerge</code> by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+</p><table><tr><td> </td><td><pre class="example">amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
+[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
+[a2] [b2] amerge
+</pre></td></tr></table>
+
+<a name="asyncts"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-asyncts">6.19 asyncts</a></h2>
+
+<p>Synchronize audio data with timestamps by squeezing/stretching it and/or
+dropping samples/adding silence when needed.
+</p>
+<p>This filter is not built by default, please use <a href="#aresample">aresample</a> to do squeezing/stretching.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>compensate</samp>’</dt>
+<dd><p>Enable stretching/squeezing the data to make it match the timestamps. Disabled
+by default. When disabled, time gaps are covered with silence.
+</p>
+</dd>
+<dt> ‘<samp>min_delta</samp>’</dt>
+<dd><p>Minimum difference between timestamps and audio data (in seconds) to trigger
+adding/dropping samples. Default value is 0.1. If you get non-perfect sync with
+this filter, try setting this parameter to 0.
+</p>
+</dd>
+<dt> ‘<samp>max_comp</samp>’</dt>
+<dd><p>Maximum compensation in samples per second. Relevant only with compensate=1.
+Default value 500.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>Assume the first pts should be this value. The time base is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+</dl>
+
+<a name="atempo"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-atempo">6.20 atempo</a></h2>
+
+<p>Adjust audio tempo.
+</p>
+<p>The filter accepts exactly one parameter, the audio tempo. If not
+specified then the filter will assume nominal 1.0 tempo. Tempo must
+be in the [0.5, 2.0] range.
+</p>
+<a name="Examples-23"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-23">6.20.1 Examples</a></h3>
+
+<ul>
+<li>
+Slow down audio to 80% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=0.8
+</pre></td></tr></table>
+
+</li><li>
+To speed up audio to 125% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=1.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="atrim"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-atrim">6.21 atrim</a></h2>
+
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the audio sample
+with the timestamp <var>start</var> will be the first sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first audio sample that will be dropped, i.e. the
+audio sample immediately preceding the one with the timestamp <var>end</var> will be
+the last sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in samples
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in samples instead
+of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _sample options simply count the
+samples that pass through the filter. So start/end_pts and start/end_sample will
+give different results when the timestamps are wrong, inexact or do not start at
+zero. Also note that this filter does not modify the timestamps. If you wish
+that the output timestamps start at zero, insert the asetpts filter after the
+atrim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all samples that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple atrim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first 1000 samples
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=end_sample=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="bandpass"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-bandpass">6.22 bandpass</a></h2>
+
+<p>Apply a two-pole Butterworth band-pass filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width width.
+The <var>csg</var> option selects a constant skirt gain (peak gain = Q)
+instead of the default: constant 0dB peak gain.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>csg</samp>’</dt>
+<dd><p>Constant skirt gain if set to 1. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bandreject"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-bandreject">6.23 bandreject</a></h2>
+
+<p>Apply a two-pole Butterworth band-reject filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width <var>width</var>.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bass"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-bass">6.24 bass</a></h2>
+
+<p>Boost or cut the bass (lower) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at 0 Hz. Its useful range is about -20
+(for a large cut) to +20 (for a large boost).
+Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>100</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="biquad"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-biquad">6.25 biquad</a></h2>
+
+<p>Apply a biquad IIR filter with the given coefficients.
+Where <var>b0</var>, <var>b1</var>, <var>b2</var> and <var>a0</var>, <var>a1</var>, <var>a2</var>
+are the numerator and denominator coefficients respectively.
+</p>
+<a name="channelmap"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-channelmap">6.26 channelmap</a></h2>
+
+<p>Remap input channels to new locations.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the output stream.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from input to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>in_channel</var>-<var>out_channel</var></code> or
+<var>in_channel</var> form. <var>in_channel</var> can be either the name of the input
+channel (e.g. FL for front left) or its index in the input channel layout.
+<var>out_channel</var> is the name of the output channel or its index in the output
+channel layout. If <var>out_channel</var> is not given then it is implicitly an
+index, starting with zero and increasing by one for each mapping.
+</p></dd>
+</dl>
+
+<p>If no mapping is present, the filter will implicitly map input channels to
+output channels preserving index.
+</p>
+<p>For example, assuming a 5.1+downmix input MOV file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
+</pre></td></tr></table>
+<p>will create an output WAV file tagged as stereo from the downmix channels of
+the input.
+</p>
+<p>To fix a 5.1 WAV improperly encoded in AAC’s native channel order
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
+</pre></td></tr></table>
+
+<a name="channelsplit"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-channelsplit">6.27 channelsplit</a></h2>
+
+<p>Split each channel in input audio stream into a separate output stream.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the input stream. Default is "stereo".
+</p></dd>
+</dl>
+
+<p>For example, assuming a stereo input MP3 file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
+</pre></td></tr></table>
+<p>will create an output Matroska file with two audio streams, one containing only
+the left channel and the other the right channel.
+</p>
+<p>To split a 5.1 WAV file into per-channel files
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter_complex
+'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
+-map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
+front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
+side_right.wav
+</pre></td></tr></table>
+
+<a name="compand"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-compand">6.28 compand</a></h2>
+<p>Compress or expand audio dynamic range.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>attacks</samp>’</dt>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of times in seconds for each channel over which the instantaneous level
+of the input signal is averaged to determine its volume. <var>attacks</var> refers to
+increase of volume and <var>decays</var> refers to decrease of volume. For most
+situations, the attack time (response to the audio getting louder) should be
+shorter than the decay time because the human ear is more sensitive to sudden
+loud audio than sudden soft audio. A typical value for attack is 0.3 seconds and
+a typical value for decay is 0.8 seconds.
+</p>
+</dd>
+<dt> ‘<samp>points</samp>’</dt>
+<dd><p>Set list of points for the transfer function, specified in dB relative to the
+maximum possible signal amplitude. Each key points list must be defined using
+the following syntax: <code>x0/y0|x1/y1|x2/y2|....</code> or
+<code>x0/y0 x1/y1 x2/y2 ....</code>
+</p>
+<p>The input values must be in strictly increasing order but the transfer function
+does not have to be monotonically rising. The point <code>0/0</code> is assumed but
+may be overridden (by <code>0/out-dBn</code>). Typical values for the transfer
+function are <code>-70/-70|-60/-20</code>.
+</p>
+</dd>
+<dt> ‘<samp>soft-knee</samp>’</dt>
+<dd><p>Set the curve radius in dB for all joints. Defaults to 0.01.
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>Set additional gain in dB to be applied at all points on the transfer function.
+This allows easy adjustment of the overall gain. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set initial volume in dB to be assumed for each channel when filtering starts.
+This permits the user to supply a nominal level initially, so that, for
+example, a very large gain is not applied to initial signal levels before the
+companding has begun to operate. A typical value for audio which is initially
+quiet is -90 dB. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in seconds. The input audio is analyzed immediately, but audio is
+delayed before being fed to the volume adjuster. Specifying a delay
+approximately equal to the attack/decay times allows the filter to effectively
+operate in predictive rather than reactive mode. Defaults to 0.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-65"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-65">6.28.1 Examples</a></h3>
+
+<ul>
+<li>
+Make music with both quiet and loud passages suitable for listening in a noisy
+environment:
+<table><tr><td> </td><td><pre class="example">compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
+</pre></td></tr></table>
+
+</li><li>
+Noise gate for when the noise is at a lower level than the signal:
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
+</pre></td></tr></table>
+
+</li><li>
+Here is another noise gate, this time for when the noise is at a higher level
+than the signal (making it, in some ways, similar to squelch):
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="earwax"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-earwax">6.29 earwax</a></h2>
+
+<p>Make audio easier to listen to on headphones.
+</p>
+<p>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).
+</p>
+<p>Ported from SoX.
+</p>
+<a name="equalizer"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-equalizer">6.30 equalizer</a></h2>
+
+<p>Apply a two-pole peaking equalisation (EQ) filter. With this
+filter, the signal-level at and around a selected frequency can
+be increased or decreased, whilst (unlike bandpass and bandreject
+filters) that at all other frequencies is unchanged.
+</p>
+<p>In order to produce complex equalisation curves, this filter can
+be given several times, each with a different central frequency.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p>
+</dd>
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Set the required gain or attenuation in dB.
+Beware of clipping when using a positive gain.
+</p></dd>
+</dl>
+
+<a name="Examples-14"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-14">6.30.1 Examples</a></h3>
+<ul>
+<li>
+Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=h:width=200:g=-10
+</pre></td></tr></table>
+
+</li><li>
+Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=q:width=1:g=2,equalizer=f=100:width_type=q:width=2:g=-5
+</pre></td></tr></table>
+</li></ul>
+
+<a name="highpass"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-highpass">6.31 highpass</a></h2>
+
+<p>Apply a high-pass filter with 3dB point frequency.
+The filter can be either single-pole, or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="join"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-join">6.32 join</a></h2>
+
+<p>Join multiple input streams into one multi-channel stream.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of input streams. Defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Desired output channel layout. Defaults to stereo.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from inputs to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>input_idx</var>.<var>in_channel</var>-<var>out_channel</var></code>
+form. <var>input_idx</var> is the 0-based index of the input stream. <var>in_channel</var>
+can be either the name of the input channel (e.g. FL for front left) or its
+index in the specified input stream. <var>out_channel</var> is the name of the output
+channel.
+</p></dd>
+</dl>
+
+<p>The filter will attempt to guess the mappings when those are not specified
+explicitly. It does so by first trying to find an unused matching input channel
+and if that fails it picks the first unused input channel.
+</p>
+<p>E.g. to join 3 inputs (with properly set channel layouts)
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
+</pre></td></tr></table>
+
+<p>To build a 5.1 output from 6 single-channel streams:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
+'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
+out
+</pre></td></tr></table>
+
+<a name="ladspa"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-ladspa">6.33 ladspa</a></h2>
+
+<p>Load a LADSPA (Linux Audio Developer’s Simple Plugin API) plugin.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-ladspa</code>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file, f</samp>’</dt>
+<dd><p>Specifies the name of LADSPA plugin library to load. If the environment
+variable <code>LADSPA_PATH</code> is defined, the LADSPA plugin is searched in
+each one of the directories specified by the colon separated list in
+<code>LADSPA_PATH</code>, otherwise in the standard LADSPA paths, which are in
+this order: ‘<tt>HOME/.ladspa/lib/</tt>’, ‘<tt>/usr/local/lib/ladspa/</tt>’,
+‘<tt>/usr/lib/ladspa/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>plugin, p</samp>’</dt>
+<dd><p>Specifies the plugin within the library. Some libraries contain only
+one plugin, but others contain many of them. If this is not set filter
+will list all available plugins within the specified library.
+</p>
+</dd>
+<dt> ‘<samp>controls, c</samp>’</dt>
+<dd><p>Set the ’|’ separated list of controls which are zero or more floating point
+values that determine the behavior of the loaded plugin (for example delay,
+threshold or gain).
+Controls need to be defined using the following syntax:
+c0=<var>value0</var>|c1=<var>value1</var>|c2=<var>value2</var>|..., where
+<var>valuei</var> is the value set on the <var>i</var>-th control.
+If ‘<samp>controls</samp>’ is set to <code>help</code>, all available controls and
+their valid ranges are printed.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100. Only used if plugin have
+zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame, default
+is 1024. Only used if plugin have zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> for the accepted format, also check the "Time duration"
+section in the ffmpeg-utils manual.
+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.
+Only used if plugin have zero inputs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-35"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-35">6.33.1 Examples</a></h3>
+
+<ul>
+<li>
+List all available plugins within amp (LADSPA example plugin) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=amp
+</pre></td></tr></table>
+
+</li><li>
+List all available controls and their valid ranges for <code>vcf_notch</code>
+plugin from <code>VCF</code> library:
+<table><tr><td> </td><td><pre class="example">ladspa=f=vcf:p=vcf_notch:c=help
+</pre></td></tr></table>
+
+</li><li>
+Simulate low quality audio equipment using <code>Computer Music Toolkit</code> (CMT)
+plugin library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
+</pre></td></tr></table>
+
+</li><li>
+Add reverberation to the audio using TAP-plugins
+(Tom’s Audio Processing plugins):
+<table><tr><td> </td><td><pre class="example">ladspa=file=tap_reverb:tap_reverb
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise, with 0.2 amplitude:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:noise_source_white:c=c0=.2
+</pre></td></tr></table>
+
+</li><li>
+Generate 20 bpm clicks using plugin <code>C* Click - Metronome</code> from the
+<code>C* Audio Plugin Suite</code> (CAPS) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=caps:Click:c=c1=20'
+</pre></td></tr></table>
+
+</li><li>
+Apply <code>C* Eq10X2 - Stereo 10-band equaliser</code> effect:
+<table><tr><td> </td><td><pre class="example">ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands">6.33.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>cN</samp>’</dt>
+<dd><p>Modify the <var>N</var>-th control value.
+</p>
+<p>If the specified value is not valid, it is ignored and prior one is kept.
+</p></dd>
+</dl>
+
+<a name="lowpass"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-lowpass">6.34 lowpass</a></h2>
+
+<p>Apply a low-pass filter with 3dB point frequency.
+The filter can be either single-pole or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 500.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="pan"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-pan">6.35 pan</a></h2>
+
+<p>Mix channels with specific gain levels. The filter accepts the output
+channel layout followed by a set of channels definitions.
+</p>
+<p>This filter is also designed to remap efficiently the channels of an audio
+stream.
+</p>
+<p>The filter accepts parameters of the form:
+"<var>l</var>:<var>outdef</var>:<var>outdef</var>:..."
+</p>
+<dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>output channel layout or number of channels
+</p>
+</dd>
+<dt> ‘<samp>outdef</samp>’</dt>
+<dd><p>output channel specification, of the form:
+"<var>out_name</var>=[<var>gain</var>*]<var>in_name</var>[+[<var>gain</var>*]<var>in_name</var>...]"
+</p>
+</dd>
+<dt> ‘<samp>out_name</samp>’</dt>
+<dd><p>output channel to define, either a channel name (FL, FR, etc.) or a channel
+number (c0, c1, etc.)
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>multiplicative coefficient for the channel, 1 leaving the volume unchanged
+</p>
+</dd>
+<dt> ‘<samp>in_name</samp>’</dt>
+<dd><p>input channel to use, see out_name for details; it is not possible to mix
+named and numbered input channels
+</p></dd>
+</dl>
+
+<p>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.
+</p>
+<a name="Mixing-examples"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Mixing-examples">6.35.1 Mixing examples</a></h3>
+
+<p>For example, if you want to down-mix from stereo to mono, but with a bigger
+factor for the left channel:
+</p><table><tr><td> </td><td><pre class="example">pan=1:c0=0.9*c0+0.1*c1
+</pre></td></tr></table>
+
+<p>A customized down-mix to stereo that works automatically for 3-, 4-, 5- and
+7-channels surround:
+</p><table><tr><td> </td><td><pre class="example">pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
+</pre></td></tr></table>
+
+<p>Note that <code>ffmpeg</code> integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+</p>
+<a name="Remapping-examples"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Remapping-examples">6.35.2 Remapping examples</a></h3>
+
+<p>The channel remapping will be effective if, and only if:
+</p>
+<ul>
+<li> gain coefficients are zeroes or ones,
+</li><li> only one input per channel output,
+</li></ul>
+
+<p>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.
+</p>
+<p>For example, if you have a 5.1 source and want a stereo audio stream by
+dropping the extra channels:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FL : c1=FR"
+</pre></td></tr></table>
+
+<p>Given the same source, you can also switch front left and front right channels
+and keep the input channel layout:
+</p><table><tr><td> </td><td><pre class="example">pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
+</pre></td></tr></table>
+
+<p>If the input is a stereo audio stream, you can mute the front left channel (and
+still keep the stereo channel layout) with:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo:c1=c1"
+</pre></td></tr></table>
+
+<p>Still with a stereo audio stream input, you can copy the right channel in both
+front left and right:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FR : c1=FR"
+</pre></td></tr></table>
+
+<a name="replaygain"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-replaygain">6.36 replaygain</a></h2>
+
+<p>ReplayGain scanner filter. This filter takes an audio stream as an input and
+outputs it unchanged.
+At end of filtering it displays <code>track_gain</code> and <code>track_peak</code>.
+</p>
+<a name="resample"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-resample">6.37 resample</a></h2>
+
+<p>Convert the audio sample format, sample rate and channel layout. This filter is
+not meant to be used directly.
+</p>
+<a name="silencedetect"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-silencedetect">6.38 silencedetect</a></h2>
+
+<p>Detect silence in an audio stream.
+</p>
+<p>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.
+</p>
+<p>The printed times and duration are expressed in seconds.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set silence duration until notification (default is 2 seconds).
+</p>
+</dd>
+<dt> ‘<samp>noise, n</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<a name="Examples-3"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-3">6.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Detect 5 seconds of silence with -50dB noise tolerance:
+<table><tr><td> </td><td><pre class="example">silencedetect=n=-50dB:d=5
+</pre></td></tr></table>
+
+</li><li>
+Complete example with <code>ffmpeg</code> to detect silence with 0.0001 noise
+tolerance in ‘<tt>silence.mp3</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="treble"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-treble">6.39 treble</a></h2>
+
+<p>Boost or cut treble (upper) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at whichever is the lower of ~22 kHz and the
+Nyquist frequency. Its useful range is about -20 (for a large cut)
+to +20 (for a large boost). Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>3000</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="volume"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-volume">6.40 volume</a></h2>
+
+<p>Adjust the input audio volume.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set audio volume expression.
+</p>
+<p>Output values are clipped to the maximum value.
+</p>
+<p>The output audio volume is given by the relation:
+</p><table><tr><td> </td><td><pre class="example"><var>output_volume</var> = <var>volume</var> * <var>input_volume</var>
+</pre></td></tr></table>
+
+<p>Default value for <var>volume</var> is "1.0".
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>Set the mathematical precision.
+</p>
+<p>This determines which input sample formats will be allowed, which affects the
+precision of the volume scaling.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fixed</samp>’</dt>
+<dd><p>8-bit fixed-point; limits input sample format to U8, S16, and S32.
+</p></dd>
+<dt> ‘<samp>float</samp>’</dt>
+<dd><p>32-bit floating-point; limits input sample format to FLT. (default)
+</p></dd>
+<dt> ‘<samp>double</samp>’</dt>
+<dd><p>64-bit floating-point; limits input sample format to DBL.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the volume expression is evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>once</samp>’</dt>
+<dd><p>only evaluate expression once during the filter initialization, or
+when the ‘<samp>volume</samp>’ command is sent
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expression for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>once</samp>’.
+</p></dd>
+</dl>
+
+<p>The volume expression can contain the following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame number (starting at zero)
+</p></dd>
+<dt> ‘<samp>nb_channels</samp>’</dt>
+<dd><p>number of channels
+</p></dd>
+<dt> ‘<samp>nb_consumed_samples</samp>’</dt>
+<dd><p>number of samples consumed by the filter
+</p></dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples in the current frame
+</p></dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>original frame position in the file
+</p></dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>frame PTS
+</p></dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>sample rate
+</p></dd>
+<dt> ‘<samp>startpts</samp>’</dt>
+<dd><p>PTS at start of stream
+</p></dd>
+<dt> ‘<samp>startt</samp>’</dt>
+<dd><p>time at start of stream
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>frame time
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>timestamp timebase
+</p></dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>last set volume value
+</p></dd>
+</dl>
+
+<p>Note that when ‘<samp>eval</samp>’ is set to ‘<samp>once</samp>’ only the
+<var>sample_rate</var> and <var>tb</var> variables are available, all other
+variables will evaluate to NAN.
+</p>
+<a name="Commands-5"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands-5">6.40.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Modify the volume expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-55"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-55">6.40.2 Examples</a></h3>
+
+<ul>
+<li>
+Halve the input audio volume:
+<table><tr><td> </td><td><pre class="example">volume=volume=0.5
+volume=volume=1/2
+volume=volume=-6.0206dB
+</pre></td></tr></table>
+
+<p>In all the above example the named key for ‘<samp>volume</samp>’ can be
+omitted, for example like in:
+</p><table><tr><td> </td><td><pre class="example">volume=0.5
+</pre></td></tr></table>
+
+</li><li>
+Increase input audio power by 6 decibels using fixed-point precision:
+<table><tr><td> </td><td><pre class="example">volume=volume=6dB:precision=fixed
+</pre></td></tr></table>
+
+</li><li>
+Fade volume after time 10 with an annihilation period of 5 seconds:
+<table><tr><td> </td><td><pre class="example">volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
+</pre></td></tr></table>
+</li></ul>
+
+<a name="volumedetect"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-volumedetect">6.41 volumedetect</a></h2>
+
+<p>Detect the volume of the input video.
+</p>
+<p>The filter has no parameters. The input is not modified. Statistics about
+the volume will be printed in the log when the input stream end is reached.
+</p>
+<p>In particular it will show the mean volume (root mean square), maximum
+volume (on a per-sample basis), and the beginning of a histogram of the
+registered volume values (from the maximum value to a cumulated 1/1000 of
+the samples).
+</p>
+<p>All volumes are in decibels relative to the maximum PCM value.
+</p>
+<a name="Examples-17"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-17">6.41.1 Examples</a></h3>
+
+<p>Here is an excerpt of the output:
+</p><table><tr><td> </td><td><pre class="example">[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB
+[Parsed_volumedetect_0 0xa23120] max_volume: -4 dB
+[Parsed_volumedetect_0 0xa23120] histogram_4db: 6
+[Parsed_volumedetect_0 0xa23120] histogram_5db: 62
+[Parsed_volumedetect_0 0xa23120] histogram_6db: 286
+[Parsed_volumedetect_0 0xa23120] histogram_7db: 1042
+[Parsed_volumedetect_0 0xa23120] histogram_8db: 2551
+[Parsed_volumedetect_0 0xa23120] histogram_9db: 4609
+[Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
+</pre></td></tr></table>
+
+<p>It means that:
+</p><ul>
+<li>
+The mean square energy is approximately -27 dB, or 10^-2.7.
+</li><li>
+The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB.
+</li><li>
+There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc.
+</li></ul>
+
+<p>In other words, raising the volume by +4 dB does not cause any clipping,
+raising it by +5 dB causes clipping for 6 samples, etc.
+</p>
+
+<a name="Audio-Sources"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Audio-Sources">7. Audio Sources</a></h1>
+
+<p>Below is a description of the currently available audio sources.
+</p>
+<a name="abuffer"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-abuffer">7.1 abuffer</a></h2>
+
+<p>Buffer audio frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/asrc_abuffer.h</tt>’.
+</p>
+<p>It accepts the following named parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Timebase which will be used for timestamps of submitted frames. It must be
+either a floating-point number or in <var>numerator</var>/<var>denominator</var> form.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>The sample rate of the incoming audio buffers.
+</p>
+</dd>
+<dt> ‘<samp>sample_fmt</samp>’</dt>
+<dd><p>The sample format of the incoming audio buffers.
+Either a sample format name or its corresponging integer representation from
+the enum AVSampleFormat in ‘<tt>libavutil/samplefmt.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>The channel layout of the incoming audio buffers.
+Either a channel layout name from channel_layout_map in
+‘<tt>libavutil/channel_layout.c</tt>’ or its corresponding integer representation
+from the AV_CH_LAYOUT_* macros in ‘<tt>libavutil/channel_layout.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>The number of channels of the incoming audio buffers.
+If both <var>channels</var> and <var>channel_layout</var> are specified, then they
+must be consistent.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-44"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-44">7.1.1 Examples</a></h3>
+
+<table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
+</pre></td></tr></table>
+
+<p>will instruct the source to accept planar 16bit signed stereo at 44100Hz.
+Since the sample format with name "s16p" corresponds to the number
+6 and the "stereo" channel layout corresponds to the value 0x3, this is
+equivalent to:
+</p><table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
+</pre></td></tr></table>
+
+<a name="aevalsrc"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-aevalsrc">7.2 aevalsrc</a></h2>
+
+<p>Generate an audio signal specified by an expression.
+</p>
+<p>This source accepts in input one or more expressions (one for each
+channel), which are evaluated and used to generate a corresponding
+audio signal.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. In case the
+‘<samp>channel_layout</samp>’ option is not specified, the selected channel layout
+depends on the number of provided expressions. Otherwise the last
+specified expression is applied to the remaining output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set the channel layout. The number of channels in the specified layout
+must be equal to the number of specified expressions.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> 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.
+</p>
+<p>If not specified, or the expressed duration is negative, the audio is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame,
+default to 1024.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+</dl>
+
+<a name="Examples-9"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-9">7.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate silence:
+<table><tr><td> </td><td><pre class="example">aevalsrc=0
+</pre></td></tr></table>
+
+</li><li>
+Generate a sin signal with frequency of 440 Hz, set sample rate to
+8000 Hz:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(440*2*PI*t):s=8000"
+</pre></td></tr></table>
+
+</li><li>
+Generate a two channels signal, specify the channel layout (Front
+Center + Back Center) explicitly:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise:
+<table><tr><td> </td><td><pre class="example">aevalsrc="-2+random(0)"
+</pre></td></tr></table>
+
+</li><li>
+Generate an amplitude modulated signal:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
+</pre></td></tr></table>
+
+</li><li>
+Generate 2.5 Hz binaural beats on a 360 Hz carrier:
+<table><tr><td> </td><td><pre class="example">aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="anullsrc"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-anullsrc">7.3 anullsrc</a></h2>
+
+<p>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).
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>channel_layout, cl</samp>’</dt>
+<dd>
+<p>Specify the channel layout, and can be either an integer or a string
+representing a channel layout. The default value of <var>channel_layout</var>
+is "stereo".
+</p>
+<p>Check the channel_layout_map definition in
+‘<tt>libavutil/channel_layout.c</tt>’ for the mapping between strings and
+channel layout values.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, and defaults to 44100.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per requested frames.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-72"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-72">7.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=4
+</pre></td></tr></table>
+
+</li><li>
+Do the same operation with a more obvious syntax:
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=mono
+</pre></td></tr></table>
+</li></ul>
+
+<p>All the parameters need to be explicitly defined.
+</p>
+<a name="flite"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-flite">7.4 flite</a></h2>
+
+<p>Synthesize a voice utterance using the libflite library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libflite</code>.
+</p>
+<p>Note that the flite library is not thread-safe.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>list_voices</samp>’</dt>
+<dd><p>If set to 1, list the names of the available voices and exit
+immediately. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the maximum number of samples per frame. Default value is 512.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>Set the filename containing the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>Set the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>voice, v</samp>’</dt>
+<dd><p>Set the voice to use for the speech synthesis. Default value is
+<code>kal</code>. See also the <var>list_voices</var> option.
+</p></dd>
+</dl>
+
+<a name="Examples-74"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-74">7.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Read from file ‘<tt>speech.txt</tt>’, and synthetize the text using the
+standard flite voice:
+<table><tr><td> </td><td><pre class="example">flite=textfile=speech.txt
+</pre></td></tr></table>
+
+</li><li>
+Read the specified text selecting the <code>slt</code> voice:
+<table><tr><td> </td><td><pre class="example">flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Input text to ffmpeg:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Make ‘<tt>ffplay</tt>’ speak the specified text, using <code>flite</code> and
+the <code>lavfi</code> device:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about libflite, check:
+<a href="http://www.speech.cs.cmu.edu/flite/">http://www.speech.cs.cmu.edu/flite/</a>
+</p>
+<a name="sine"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-sine">7.5 sine</a></h2>
+
+<p>Generate an audio signal made of a sine wave with amplitude 1/8.
+</p>
+<p>The audio signal is bit-exact.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the carrier frequency. Default is 440 Hz.
+</p>
+</dd>
+<dt> ‘<samp>beep_factor, b</samp>’</dt>
+<dd><p>Enable a periodic beep every second with frequency <var>beep_factor</var> times
+the carrier frequency. Default is 0, meaning the beep is disabled.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration of the generated audio stream.
+</p>
+</dd>
+<dt> ‘<samp>samples_per_frame</samp>’</dt>
+<dd><p>Set the number of samples per output frame, default is 1024.
+</p></dd>
+</dl>
+
+<a name="Examples-58"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-58">7.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate a simple 440 Hz sine wave:
+<table><tr><td> </td><td><pre class="example">sine
+</pre></td></tr></table>
+
+</li><li>
+Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds:
+<table><tr><td> </td><td><pre class="example">sine=220:4:d=5
+sine=f=220:b=4:d=5
+sine=frequency=220:beep_factor=4:duration=5
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="Audio-Sinks"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Audio-Sinks">8. Audio Sinks</a></h1>
+
+<p>Below is a description of the currently available audio sinks.
+</p>
+<a name="abuffersink"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-abuffersink">8.1 abuffersink</a></h2>
+
+<p>Buffer audio frames, and make them available to the end of filter chain.
+</p>
+<p>This sink is mainly intended for programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="anullsink"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-anullsink">8.2 anullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Video-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Video-Filters">9. Video Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the video filters included in your
+build.
+</p>
+<p>Below is a description of the currently available video filters.
+</p>
+<a name="alphaextract"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-alphaextract">9.1 alphaextract</a></h2>
+
+<p>Extract the alpha component from the input as a grayscale video. This
+is especially useful with the <var>alphamerge</var> filter.
+</p>
+<a name="alphamerge"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-alphamerge">9.2 alphamerge</a></h2>
+
+<p>Add or replace the alpha component of the primary input with the
+grayscale value of a second input. This is intended for use with
+<var>alphaextract</var> to allow the transmission or storage of frame
+sequences that have alpha in a format that doesn’t support an alpha
+channel.
+</p>
+<p>For example, to reconstruct full frames from a normal YUV-encoded video
+and a separate video created with <var>alphaextract</var>, you might use:
+</p><table><tr><td> </td><td><pre class="example">movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
+</pre></td></tr></table>
+
+<p>Since this filter is designed for reconstruction, it operates on frame
+sequences without considering timestamps, and terminates when either
+input reaches end of stream. This will cause problems if your encoding
+pipeline drops frames. If you’re trying to apply an image as an
+overlay to a video stream, consider the <var>overlay</var> filter instead.
+</p>
+<a name="ass"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-ass">9.3 ass</a></h2>
+
+<p>Same as the <a href="#subtitles">subtitles</a> filter, except that it doesn’t require libavcodec
+and libavformat to work. On the other hand, it is limited to ASS (Advanced
+Substation Alpha) subtitles files.
+</p>
+<a name="bbox"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-bbox">9.4 bbox</a></h2>
+
+<p>Compute the bounding box for the non-black pixels in the input frame
+luminance plane.
+</p>
+<p>This filter computes the bounding box containing all the pixels with a
+luminance value greater than the minimum allowed value.
+The parameters describing the bounding box are printed on the filter
+log.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>min_val</samp>’</dt>
+<dd><p>Set the minimal luminance value. Default is <code>16</code>.
+</p></dd>
+</dl>
+
+<a name="blackdetect"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-blackdetect">9.5 blackdetect</a></h2>
+
+<p>Detect video intervals that are (almost) completely black. Can be
+useful to detect chapter transitions, commercials, or invalid
+recordings. Output lines contains the time for the start, end and
+duration of the detected black interval expressed in seconds.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>black_min_duration, d</samp>’</dt>
+<dd><p>Set the minimum detected black duration expressed in seconds. It must
+be a non-negative floating point number.
+</p>
+<p>Default value is 2.0.
+</p>
+</dd>
+<dt> ‘<samp>picture_black_ratio_th, pic_th</samp>’</dt>
+<dd><p>Set the threshold for considering a picture "black".
+Express the minimum value for the ratio:
+</p><table><tr><td> </td><td><pre class="example"><var>nb_black_pixels</var> / <var>nb_pixels</var>
+</pre></td></tr></table>
+
+<p>for which a picture is considered black.
+Default value is 0.98.
+</p>
+</dd>
+<dt> ‘<samp>pixel_black_th, pix_th</samp>’</dt>
+<dd><p>Set the threshold for considering a pixel "black".
+</p>
+<p>The threshold expresses the maximum pixel luminance value for which a
+pixel is considered "black". The provided value is scaled according to
+the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>absolute_threshold</var> = <var>luminance_minimum_value</var> + <var>pixel_black_th</var> * <var>luminance_range_size</var>
+</pre></td></tr></table>
+
+<p><var>luminance_range_size</var> and <var>luminance_minimum_value</var> depend on
+the input video format, the range is [0-255] for YUV full-range
+formats and [16-235] for YUV non full-range formats.
+</p>
+<p>Default value is 0.10.
+</p></dd>
+</dl>
+
+<p>The following example sets the maximum pixel threshold to the minimum
+value, and detects only black intervals of 2 or more seconds:
+</p><table><tr><td> </td><td><pre class="example">blackdetect=d=2:pix_th=0.00
+</pre></td></tr></table>
+
+<a name="blackframe"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-blackframe">9.6 blackframe</a></h2>
+
+<p>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.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>amount</samp>’</dt>
+<dd><p>Set the percentage of the pixels that have to be below the threshold, defaults
+to <code>98</code>.
+</p>
+</dd>
+<dt> ‘<samp>threshold, thresh</samp>’</dt>
+<dd><p>Set the threshold below which a pixel value is considered black, defaults to
+<code>32</code>.
+</p>
+</dd>
+</dl>
+
+<a name="blend"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-blend">9.7 blend</a></h2>
+
+<p>Blend two video frames into each other.
+</p>
+<p>It takes two input streams and outputs one stream, the first input is the
+"top" layer and second input is "bottom" layer.
+Output terminates when shortest input terminates.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c0_mode</samp>’</dt>
+<dt> ‘<samp>c1_mode</samp>’</dt>
+<dt> ‘<samp>c2_mode</samp>’</dt>
+<dt> ‘<samp>c3_mode</samp>’</dt>
+<dt> ‘<samp>all_mode</samp>’</dt>
+<dd><p>Set blend mode for specific pixel component or all pixel components in case
+of <var>all_mode</var>. Default value is <code>normal</code>.
+</p>
+<p>Available values for component modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>addition</samp>’</dt>
+<dt> ‘<samp>and</samp>’</dt>
+<dt> ‘<samp>average</samp>’</dt>
+<dt> ‘<samp>burn</samp>’</dt>
+<dt> ‘<samp>darken</samp>’</dt>
+<dt> ‘<samp>difference</samp>’</dt>
+<dt> ‘<samp>divide</samp>’</dt>
+<dt> ‘<samp>dodge</samp>’</dt>
+<dt> ‘<samp>exclusion</samp>’</dt>
+<dt> ‘<samp>hardlight</samp>’</dt>
+<dt> ‘<samp>lighten</samp>’</dt>
+<dt> ‘<samp>multiply</samp>’</dt>
+<dt> ‘<samp>negation</samp>’</dt>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>or</samp>’</dt>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dt> ‘<samp>phoenix</samp>’</dt>
+<dt> ‘<samp>pinlight</samp>’</dt>
+<dt> ‘<samp>reflect</samp>’</dt>
+<dt> ‘<samp>screen</samp>’</dt>
+<dt> ‘<samp>softlight</samp>’</dt>
+<dt> ‘<samp>subtract</samp>’</dt>
+<dt> ‘<samp>vividlight</samp>’</dt>
+<dt> ‘<samp>xor</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>c0_opacity</samp>’</dt>
+<dt> ‘<samp>c1_opacity</samp>’</dt>
+<dt> ‘<samp>c2_opacity</samp>’</dt>
+<dt> ‘<samp>c3_opacity</samp>’</dt>
+<dt> ‘<samp>all_opacity</samp>’</dt>
+<dd><p>Set blend opacity for specific pixel component or all pixel components in case
+of <var>all_opacity</var>. Only used in combination with pixel component blend modes.
+</p>
+</dd>
+<dt> ‘<samp>c0_expr</samp>’</dt>
+<dt> ‘<samp>c1_expr</samp>’</dt>
+<dt> ‘<samp>c2_expr</samp>’</dt>
+<dt> ‘<samp>c3_expr</samp>’</dt>
+<dt> ‘<samp>all_expr</samp>’</dt>
+<dd><p>Set blend expression for specific pixel component or all pixel components in case
+of <var>all_expr</var>. Note that related mode options will be ignored if those are set.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>the coordinates of the current sample
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of currently filtered plane
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>TOP, A</samp>’</dt>
+<dd><p>Value of pixel component at current location for first video frame (top layer).
+</p>
+</dd>
+<dt> ‘<samp>BOTTOM, B</samp>’</dt>
+<dd><p>Value of pixel component at current location for second video frame (bottom layer).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last bottom frame after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the bottom layer is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-73"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-73">9.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply transition from bottom layer to top layer in first 10 seconds:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
+</pre></td></tr></table>
+
+</li><li>
+Apply 1x1 checkerboard effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(N*SW+X,W),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover down effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(Y-N*SH,0),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover up-left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="boxblur"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-boxblur">9.8 boxblur</a></h2>
+
+<p>Apply boxblur algorithm to the input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+</dl>
+
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dd><p>Set an expression for the box radius in pixels used for blurring the
+corresponding input plane.
+</p>
+<p>The radius value must be a non-negative number, and must not be
+greater than the value of the expression <code>min(w,h)/2</code> for the
+luma and alpha planes, and of <code>min(cw,ch)/2</code> for the chroma
+planes.
+</p>
+<p>Default value for ‘<samp>luma_radius</samp>’ is "2". If not specified,
+‘<samp>chroma_radius</samp>’ and ‘<samp>alpha_radius</samp>’ default to the
+corresponding value set for ‘<samp>luma_radius</samp>’.
+</p>
+<p>The expressions can contain the following constants:
+</p><dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>cw</samp>’</dt>
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>the input chroma image width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+<dd><p>Specify how many times the boxblur filter is applied to the
+corresponding plane.
+</p>
+<p>Default value for ‘<samp>luma_power</samp>’ is 2. If not specified,
+‘<samp>chroma_power</samp>’ and ‘<samp>alpha_power</samp>’ default to the
+corresponding value set for ‘<samp>luma_power</samp>’.
+</p>
+<p>A value of 0 will disable the effect.
+</p></dd>
+</dl>
+
+<a name="Examples-15"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-15">9.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply a boxblur filter with luma, chroma, and alpha radius
+set to 2:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=2:luma_power=1
+boxblur=2:1
+</pre></td></tr></table>
+
+</li><li>
+Set luma radius to 2, alpha and chroma radius to 0:
+<table><tr><td> </td><td><pre class="example">boxblur=2:1:cr=0:ar=0
+</pre></td></tr></table>
+
+</li><li>
+Set luma and chroma radius to a fraction of the video dimension:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorbalance"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-colorbalance">9.9 colorbalance</a></h2>
+<p>Modify intensity of primary colors (red, green and blue) of input frames.
+</p>
+<p>The filter allows an input frame to be adjusted in the shadows, midtones or highlights
+regions for the red-cyan, green-magenta or blue-yellow balance.
+</p>
+<p>A positive adjustment value shifts the balance towards the primary color, a negative
+value towards the complementary color.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rs</samp>’</dt>
+<dt> ‘<samp>gs</samp>’</dt>
+<dt> ‘<samp>bs</samp>’</dt>
+<dd><p>Adjust red, green and blue shadows (darkest pixels).
+</p>
+</dd>
+<dt> ‘<samp>rm</samp>’</dt>
+<dt> ‘<samp>gm</samp>’</dt>
+<dt> ‘<samp>bm</samp>’</dt>
+<dd><p>Adjust red, green and blue midtones (medium pixels).
+</p>
+</dd>
+<dt> ‘<samp>rh</samp>’</dt>
+<dt> ‘<samp>gh</samp>’</dt>
+<dt> ‘<samp>bh</samp>’</dt>
+<dd><p>Adjust red, green and blue highlights (brightest pixels).
+</p>
+<p>Allowed ranges for options are <code>[-1.0, 1.0]</code>. Defaults are <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-21"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-21">9.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Add red color cast to shadows:
+<table><tr><td> </td><td><pre class="example">colorbalance=rs=.3
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorchannelmixer"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-colorchannelmixer">9.10 colorchannelmixer</a></h2>
+
+<p>Adjust video input frames by re-mixing color channels.
+</p>
+<p>This filter modifies a color channel by adding the values associated to
+the other channels of the same pixels. For example if the value to
+modify is red, the output value will be:
+</p><table><tr><td> </td><td><pre class="example"><var>red</var>=<var>red</var>*<var>rr</var> + <var>blue</var>*<var>rb</var> + <var>green</var>*<var>rg</var> + <var>alpha</var>*<var>ra</var>
+</pre></td></tr></table>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rr</samp>’</dt>
+<dt> ‘<samp>rg</samp>’</dt>
+<dt> ‘<samp>rb</samp>’</dt>
+<dt> ‘<samp>ra</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output red channel.
+Default is <code>1</code> for <var>rr</var>, and <code>0</code> for <var>rg</var>, <var>rb</var> and <var>ra</var>.
+</p>
+</dd>
+<dt> ‘<samp>gr</samp>’</dt>
+<dt> ‘<samp>gg</samp>’</dt>
+<dt> ‘<samp>gb</samp>’</dt>
+<dt> ‘<samp>ga</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output green channel.
+Default is <code>1</code> for <var>gg</var>, and <code>0</code> for <var>gr</var>, <var>gb</var> and <var>ga</var>.
+</p>
+</dd>
+<dt> ‘<samp>br</samp>’</dt>
+<dt> ‘<samp>bg</samp>’</dt>
+<dt> ‘<samp>bb</samp>’</dt>
+<dt> ‘<samp>ba</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output blue channel.
+Default is <code>1</code> for <var>bb</var>, and <code>0</code> for <var>br</var>, <var>bg</var> and <var>ba</var>.
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dt> ‘<samp>ag</samp>’</dt>
+<dt> ‘<samp>ab</samp>’</dt>
+<dt> ‘<samp>aa</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output alpha channel.
+Default is <code>1</code> for <var>aa</var>, and <code>0</code> for <var>ar</var>, <var>ag</var> and <var>ab</var>.
+</p>
+<p>Allowed ranges for options are <code>[-2.0, 2.0]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-12"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-12">9.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert source to grayscale:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
+</pre></td></tr></table>
+</li><li>
+Simulate sepia tones:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colormatrix"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-colormatrix">9.11 colormatrix</a></h2>
+
+<p>Convert color matrix.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>src</samp>’</dt>
+<dt> ‘<samp>dst</samp>’</dt>
+<dd><p>Specify the source and destination color matrix. Both values must be
+specified.
+</p>
+<p>The accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>BT.709
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>BT.601
+</p>
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>SMPTE-240M
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>FCC
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>For example to convert from BT.601 to SMPTE-240M, use the command:
+</p><table><tr><td> </td><td><pre class="example">colormatrix=bt601:smpte240m
+</pre></td></tr></table>
+
+<a name="copy"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-copy">9.12 copy</a></h2>
+
+<p>Copy the input source unchanged to the output. Mainly useful for
+testing purposes.
+</p>
+<a name="crop"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-crop">9.13 crop</a></h2>
+
+<p>Crop the input video to given dimensions.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w, out_w</samp>’</dt>
+<dd><p>Width of the output video. It defaults to <code>iw</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>h, out_h</samp>’</dt>
+<dd><p>Height of the output video. It defaults to <code>ih</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dd><p>Horizontal position, in the input video, of the left edge of the output video.
+It defaults to <code>(in_w-out_w)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Vertical position, in the input video, of the top edge of the output video.
+It defaults to <code>(in_h-out_h)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>keep_aspect</samp>’</dt>
+<dd><p>If set to 1 will force the output display aspect ratio
+to be the same of the input, by changing the output sample aspect
+ratio. It defaults to 0.
+</p></dd>
+</dl>
+
+<p>The <var>out_w</var>, <var>out_h</var>, <var>x</var>, <var>y</var> parameters are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output (cropped) width and height
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>The expression for <var>out_w</var> may depend on the value of <var>out_h</var>,
+and the expression for <var>out_h</var> may depend on <var>out_w</var>, but they
+cannot depend on <var>x</var> and <var>y</var>, as <var>x</var> and <var>y</var> are
+evaluated after <var>out_w</var> and <var>out_h</var>.
+</p>
+<p>The <var>x</var> and <var>y</var> 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.
+</p>
+<p>The expression for <var>x</var> may depend on <var>y</var>, and the expression
+for <var>y</var> may depend on <var>x</var>.
+</p>
+<a name="Examples-8"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-8">9.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Crop area with size 100x100 at position (12,34).
+<table><tr><td> </td><td><pre class="example">crop=100:100:12:34
+</pre></td></tr></table>
+
+<p>Using named options, the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">crop=w=100:h=100:x=12:y=34
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 100x100:
+<table><tr><td> </td><td><pre class="example">crop=100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 2/3 of the input video:
+<table><tr><td> </td><td><pre class="example">crop=2/3*in_w:2/3*in_h
+</pre></td></tr></table>
+
+</li><li>
+Crop the input video central square:
+<table><tr><td> </td><td><pre class="example">crop=out_w=in_h
+crop=in_h
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">crop=in_w-100:in_h-100:100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop 10 pixels from the left and right borders, and 20 pixels from
+the top and bottom borders
+<table><tr><td> </td><td><pre class="example">crop=in_w-2*10:in_h-2*20
+</pre></td></tr></table>
+
+</li><li>
+Keep only the bottom right quarter of the input image:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:in_w/2:in_h/2
+</pre></td></tr></table>
+
+</li><li>
+Crop height for getting Greek harmony:
+<table><tr><td> </td><td><pre class="example">crop=in_w:1/PHI*in_w
+</pre></td></tr></table>
+
+</li><li>
+Appply trembling effect:
+<table><tr><td> </td><td><pre class="example">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)
+</pre></td></tr></table>
+
+</li><li>
+Apply erratic camera effect depending on timestamp:
+<table><tr><td> </td><td><pre class="example">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)"
+</pre></td></tr></table>
+
+</li><li>
+Set x depending on the value of y:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:y:10+10*sin(n/10)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="cropdetect"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-cropdetect">9.14 cropdetect</a></h2>
+
+<p>Auto-detect crop size.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>limit</samp>’</dt>
+<dd><p>Set higher black value threshold, which can be optionally specified
+from nothing (0) to everything (255). An intensity value greater
+to the set value is considered non-black. Default value is 24.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Set the value for which the width/height should be divisible by. 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. Default value is 16.
+</p>
+</dd>
+<dt> ‘<samp>reset_count, reset</samp>’</dt>
+<dd><p>Set the 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. Default value is 0.
+</p>
+<p>This can be useful when channel logos distort the video area. 0
+indicates never reset and return the largest area encountered during
+playback.
+</p></dd>
+</dl>
+
+<p><a name="curves"></a>
+</p><a name="curves-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-curves-1">9.15 curves</a></h2>
+
+<p>Apply color adjustments using curves.
+</p>
+<p>This filter is similar to the Adobe Photoshop and GIMP curves tools. Each
+component (red, green and blue) has its values defined by <var>N</var> key points
+tied from each other using a smooth curve. The x-axis represents the pixel
+values from the input frame, and the y-axis the new pixel values to be set for
+the output frame.
+</p>
+<p>By default, a component curve is defined by the two points <var>(0;0)</var> and
+<var>(1;1)</var>. This creates a straight line where each original pixel value is
+"adjusted" to its own value, which means no change to the image.
+</p>
+<p>The filter allows you to redefine these two points and add some more. A new
+curve (using a natural cubic spline interpolation) will be define to pass
+smoothly through all these new coordinates. The new defined points needs to be
+strictly increasing over the x-axis, and their <var>x</var> and <var>y</var> values must
+be in the <var>[0;1]</var> interval. If the computed curves happened to go outside
+the vector spaces, the values will be clipped accordingly.
+</p>
+<p>If there is no key point defined in <code>x=0</code>, the filter will automatically
+insert a <var>(0;0)</var> point. In the same way, if there is no key point defined
+in <code>x=1</code>, the filter will automatically insert a <var>(1;1)</var> point.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>preset</samp>’</dt>
+<dd><p>Select one of the available color presets. This option can be used in addition
+to the ‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ parameters; in this case, the later
+options takes priority on the preset values.
+Available presets are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dt> ‘<samp>color_negative</samp>’</dt>
+<dt> ‘<samp>cross_process</samp>’</dt>
+<dt> ‘<samp>darker</samp>’</dt>
+<dt> ‘<samp>increase_contrast</samp>’</dt>
+<dt> ‘<samp>lighter</samp>’</dt>
+<dt> ‘<samp>linear_contrast</samp>’</dt>
+<dt> ‘<samp>medium_contrast</samp>’</dt>
+<dt> ‘<samp>negative</samp>’</dt>
+<dt> ‘<samp>strong_contrast</samp>’</dt>
+<dt> ‘<samp>vintage</samp>’</dt>
+</dl>
+<p>Default is <code>none</code>.
+</p></dd>
+<dt> ‘<samp>master, m</samp>’</dt>
+<dd><p>Set the master key points. These points will define a second pass mapping. It
+is sometimes called a "luminance" or "value" mapping. It can be used with
+‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ or ‘<samp>all</samp>’ since it acts like a
+post-processing LUT.
+</p></dd>
+<dt> ‘<samp>red, r</samp>’</dt>
+<dd><p>Set the key points for the red component.
+</p></dd>
+<dt> ‘<samp>green, g</samp>’</dt>
+<dd><p>Set the key points for the green component.
+</p></dd>
+<dt> ‘<samp>blue, b</samp>’</dt>
+<dd><p>Set the key points for the blue component.
+</p></dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Set the key points for all components (not including master).
+Can be used in addition to the other key points component
+options. In this case, the unset component(s) will fallback on this
+‘<samp>all</samp>’ setting.
+</p></dd>
+<dt> ‘<samp>psfile</samp>’</dt>
+<dd><p>Specify a Photoshop curves file (<code>.asv</code>) to import the settings from.
+</p></dd>
+</dl>
+
+<p>To avoid some filtergraph syntax conflicts, each key points list need to be
+defined using the following syntax: <code>x0/y0 x1/y1 x2/y2 ...</code>.
+</p>
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-1">9.15.1 Examples</a></h3>
+
+<ul>
+<li>
+Increase slightly the middle level of blue:
+<table><tr><td> </td><td><pre class="example">curves=blue='0.5/0.58'
+</pre></td></tr></table>
+
+</li><li>
+Vintage effect:
+<table><tr><td> </td><td><pre class="example">curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
+</pre></td></tr></table>
+<p>Here we obtain the following coordinates for each components:
+</p><dl compact="compact">
+<dt> <var>red</var></dt>
+<dd><p><code>(0;0.11) (0.42;0.51) (1;0.95)</code>
+</p></dd>
+<dt> <var>green</var></dt>
+<dd><p><code>(0;0) (0.50;0.48) (1;1)</code>
+</p></dd>
+<dt> <var>blue</var></dt>
+<dd><p><code>(0;0.22) (0.49;0.44) (1;0.80)</code>
+</p></dd>
+</dl>
+
+</li><li>
+The previous example can also be achieved with the associated built-in preset:
+<table><tr><td> </td><td><pre class="example">curves=preset=vintage
+</pre></td></tr></table>
+
+</li><li>
+Or simply:
+<table><tr><td> </td><td><pre class="example">curves=vintage
+</pre></td></tr></table>
+
+</li><li>
+Use a Photoshop preset and redefine the points of the green component:
+<table><tr><td> </td><td><pre class="example">curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="dctdnoiz"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-dctdnoiz">9.16 dctdnoiz</a></h2>
+
+<p>Denoise frames using 2D DCT (frequency domain filtering).
+</p>
+<p>This filter is not designed for real time and can be extremely slow.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sigma, s</samp>’</dt>
+<dd><p>Set the noise sigma constant.
+</p>
+<p>This <var>sigma</var> defines a hard threshold of <code>3 * sigma</code>; every DCT
+coefficient (absolute value) below this threshold with be dropped.
+</p>
+<p>If you need a more advanced filtering, see ‘<samp>expr</samp>’.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>overlap</samp>’</dt>
+<dd><p>Set number overlapping pixels for each block. Each block is of size
+<code>16x16</code>. Since the filter can be slow, you may want to reduce this value,
+at the cost of a less effective filter and the risk of various artefacts.
+</p>
+<p>If the overlapping value doesn’t allow to process the whole input width or
+height, a warning will be displayed and according borders won’t be denoised.
+</p>
+<p>Default value is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the coefficient factor expression.
+</p>
+<p>For each coefficient of a DCT block, this expression will be evaluated as a
+multiplier value for the coefficient.
+</p>
+<p>If this is option is set, the ‘<samp>sigma</samp>’ option will be ignored.
+</p>
+<p>The absolute value of the coefficient can be accessed through the <var>c</var>
+variable.
+</p></dd>
+</dl>
+
+<a name="Examples-70"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-70">9.16.1 Examples</a></h3>
+
+<p>Apply a denoise with a ‘<samp>sigma</samp>’ of <code>4.5</code>:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=4.5
+</pre></td></tr></table>
+
+<p>The same operation can be achieved using the expression system:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=e='gte(c, 4.5*3)'
+</pre></td></tr></table>
+
+<p><a name="decimate"></a>
+</p><a name="decimate-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-decimate-1">9.17 decimate</a></h2>
+
+<p>Drop duplicated frames at regular intervals.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Set the number of frames from which one will be dropped. Setting this to
+<var>N</var> means one frame in every batch of <var>N</var> frames will be dropped.
+Default is <code>5</code>.
+</p>
+</dd>
+<dt> ‘<samp>dupthresh</samp>’</dt>
+<dd><p>Set the threshold for duplicate detection. If the difference metric for a frame
+is less than or equal to this value, then it is declared as duplicate. Default
+is <code>1.1</code>
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set scene change threshold. Default is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Set the size of the x and y-axis blocks used during metric calculations.
+Larger blocks give better noise suppression, but also give worse detection of
+small movements. Must be a power of two. Default is <code>32</code>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark main input as a pre-processed input and activate clean source input
+stream. This allows the input to be pre-processed with various filters to help
+the metrics calculation while keeping the frame selection lossless. When set to
+<code>1</code>, the first stream is for the pre-processed input, and the second
+stream is the clean source from where the kept frames are chosen. Default is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Set whether or not chroma is considered in the metric calculations. Default is
+<code>1</code>.
+</p></dd>
+</dl>
+
+<a name="dejudder"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-dejudder">9.18 dejudder</a></h2>
+
+<p>Remove judder produced by partially interlaced telecined content.
+</p>
+<p>Judder can be introduced, for instance, by <a href="#pullup">pullup</a> filter. If the original
+source was partially telecined content then the output of <code>pullup,dejudder</code>
+will have a variable frame rate. May change the recorded frame rate of the
+container. Aside from that change, this filter will not affect constant frame
+rate video.
+</p>
+<p>The option available in this filter is:
+</p><dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Specify the length of the window over which the judder repeats.
+</p>
+<p>Accepts any interger greater than 1. Useful values are:
+</p><dl compact="compact">
+<dt> ‘<samp>4</samp>’</dt>
+<dd><p>If the original was telecined from 24 to 30 fps (Film to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>5</samp>’</dt>
+<dd><p>If the original was telecined from 25 to 30 fps (PAL to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>20</samp>’</dt>
+<dd><p>If a mixture of the two.
+</p></dd>
+</dl>
+
+<p>The default is ‘<samp>4</samp>’.
+</p></dd>
+</dl>
+
+<a name="delogo"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-delogo">9.19 delogo</a></h2>
+
+<p>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).
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify the top left corner coordinates of the logo. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the width and height of the logo to clear. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>band, t</samp>’</dt>
+<dd><p>Specify the thickness of the fuzzy edge of the rectangle (added to
+<var>w</var> and <var>h</var>). The default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>When set to 1, a green rectangle is drawn on the screen to simplify
+finding the right <var>x</var>, <var>y</var>, <var>w</var>, and <var>h</var> parameters.
+The default value is 0.
+</p>
+<p>The rectangle is drawn on the outermost pixels which will be (partly)
+replaced with interpolated values. The values of the next pixels
+immediately outside this rectangle in each direction will be used to
+compute the interpolated pixel values inside the rectangle.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-27"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-27">9.19.1 Examples</a></h3>
+
+<ul>
+<li>
+Set a rectangle covering the area with top left corner coordinates 0,0
+and size 100x77, setting a band of size 10:
+<table><tr><td> </td><td><pre class="example">delogo=x=0:y=0:w=100:h=77:band=10
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="deshake"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-deshake">9.20 deshake</a></h2>
+
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This is useful when simultaneous movement of subjects within the frame
+might be confused for camera motion by the motion vector search.
+</p>
+<p>If any or all of <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> 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.
+</p>
+<p>Default - search the whole frame.
+</p>
+</dd>
+<dt> ‘<samp>rx</samp>’</dt>
+<dt> ‘<samp>ry</samp>’</dt>
+<dd><p>Specify the maximum extent of movement in x and y directions in the
+range 0-64 pixels. Default 16.
+</p>
+</dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>Specify how to generate pixels to fill blanks at the edge of the
+frame. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>blank, 0</samp>’</dt>
+<dd><p>Fill zeroes at blank locations
+</p></dd>
+<dt> ‘<samp>original, 1</samp>’</dt>
+<dd><p>Original image at blank locations
+</p></dd>
+<dt> ‘<samp>clamp, 2</samp>’</dt>
+<dd><p>Extruded edge value at blank locations
+</p></dd>
+<dt> ‘<samp>mirror, 3</samp>’</dt>
+<dd><p>Mirrored edge at blank locations
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>mirror</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Specify the blocksize to use for motion search. Range 4-128 pixels,
+default 8.
+</p>
+</dd>
+<dt> ‘<samp>contrast</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>search</samp>’</dt>
+<dd><p>Specify the search strategy. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>exhaustive, 0</samp>’</dt>
+<dd><p>Set exhaustive search
+</p></dd>
+<dt> ‘<samp>less, 1</samp>’</dt>
+<dd><p>Set less exhaustive search.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>exhaustive</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>If set then a detailed log of the motion search is written to the
+specified file.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<a name="drawbox"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-drawbox">9.21 drawbox</a></h2>
+
+<p>Draw a colored box on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the top left corner coordinates of the box. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the box, if 0 they are interpreted as
+the input width and height. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the box to write. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the box edge color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the box edge. Default value is <code>3</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y offset coordinates where the box is drawn.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn box.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn box.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-46"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-46">9.21.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a black box around the edge of the input image:
+<table><tr><td> </td><td><pre class="example">drawbox
+</pre></td></tr></table>
+
+</li><li>
+Draw a box with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawbox=10:20:200:60:red@0.5
+</pre></td></tr></table>
+
+<p>The previous example can be specified as:
+</p><table><tr><td> </td><td><pre class="example">drawbox=x=10:y=20:w=200:h=60:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Fill the box with pink color:
+<table><tr><td> </td><td><pre class="example">drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
+</pre></td></tr></table>
+
+</li><li>
+Draw a 2-pixel red 2.40:1 mask:
+<table><tr><td> </td><td><pre class="example">drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
+</pre></td></tr></table>
+</li></ul>
+
+<a name="drawgrid"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-drawgrid">9.22 drawgrid</a></h2>
+
+<p>Draw a grid on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the grid cell, if 0 they are interpreted as the
+input width and height, respectively, minus <code>thickness</code>, so image gets
+framed. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the grid. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the grid color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the grid line. Default value is <code>1</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input grid cell width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y coordinates of some point of grid intersection (meant to configure offset).
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn cell.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn cell.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-18"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-18">9.22.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=width=100:height=100:thickness=2:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Draw a white 3x3 grid with an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="drawtext"></a>
+</p><a name="drawtext-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-drawtext-1">9.23 drawtext</a></h2>
+
+<p>Draw text string or text from specified file on top of video using the
+libfreetype library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libfreetype</code>.
+</p>
+<a name="Syntax"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Syntax">9.23.1 Syntax</a></h3>
+
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>box</samp>’</dt>
+<dd><p>Used to draw a box around text using background color.
+Value should be either 1 (enable) or 0 (disable).
+The default value of <var>box</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>boxcolor</samp>’</dt>
+<dd><p>The color to be used for drawing box around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>boxcolor</var> is "white".
+</p>
+</dd>
+<dt> ‘<samp>borderw</samp>’</dt>
+<dd><p>Set the width of the border to be drawn around the text using <var>bordercolor</var>.
+The default value of <var>borderw</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>bordercolor</samp>’</dt>
+<dd><p>Set the color to be used for drawing border around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>bordercolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>expansion</samp>’</dt>
+<dd><p>Select how the <var>text</var> is expanded. Can be either <code>none</code>,
+<code>strftime</code> (deprecated) or
+<code>normal</code> (default). See the <a href="#drawtext_005fexpansion">Text expansion</a> section
+below for details.
+</p>
+</dd>
+<dt> ‘<samp>fix_bounds</samp>’</dt>
+<dd><p>If true, check and fix text coords to avoid clipping.
+</p>
+</dd>
+<dt> ‘<samp>fontcolor</samp>’</dt>
+<dd><p>The color to be used for drawing fonts. For the syntax of this option, check
+the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>fontcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>fontfile</samp>’</dt>
+<dd><p>The font file to be used for drawing text. Path must be included.
+This parameter is mandatory.
+</p>
+</dd>
+<dt> ‘<samp>fontsize</samp>’</dt>
+<dd><p>The font size to be used for drawing text.
+The default value of <var>fontsize</var> is 16.
+</p>
+</dd>
+<dt> ‘<samp>ft_load_flags</samp>’</dt>
+<dd><p>Flags to be used for loading the fonts.
+</p>
+<p>The flags map the corresponding flags supported by libfreetype, and are
+a combination of the following values:
+</p><dl compact="compact">
+<dt> <var>default</var></dt>
+<dt> <var>no_scale</var></dt>
+<dt> <var>no_hinting</var></dt>
+<dt> <var>render</var></dt>
+<dt> <var>no_bitmap</var></dt>
+<dt> <var>vertical_layout</var></dt>
+<dt> <var>force_autohint</var></dt>
+<dt> <var>crop_bitmap</var></dt>
+<dt> <var>pedantic</var></dt>
+<dt> <var>ignore_global_advance_width</var></dt>
+<dt> <var>no_recurse</var></dt>
+<dt> <var>ignore_transform</var></dt>
+<dt> <var>monochrome</var></dt>
+<dt> <var>linear_design</var></dt>
+<dt> <var>no_autohint</var></dt>
+</dl>
+
+<p>Default value is "default".
+</p>
+<p>For more information consult the documentation for the FT_LOAD_*
+libfreetype flags.
+</p>
+</dd>
+<dt> ‘<samp>shadowcolor</samp>’</dt>
+<dd><p>The color to be used for drawing a shadow behind the drawn text. For the
+syntax of this option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>shadowcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>shadowx</samp>’</dt>
+<dt> ‘<samp>shadowy</samp>’</dt>
+<dd><p>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".
+</p>
+</dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>The starting frame number for the n/frame_num variable. The default value
+is "0".
+</p>
+</dd>
+<dt> ‘<samp>tabsize</samp>’</dt>
+<dd><p>The size in number of spaces to use for rendering the tab.
+Default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>timecode</samp>’</dt>
+<dd><p>Set the initial timecode representation in "hh:mm:ss[:;.]ff"
+format. It can be used with or without text parameter. <var>timecode_rate</var>
+option must be specified.
+</p>
+</dd>
+<dt> ‘<samp>timecode_rate, rate, r</samp>’</dt>
+<dd><p>Set the timecode frame rate (timecode only).
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>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
+<var>textfile</var>.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>A text file containing text to be drawn. The text must be a sequence
+of UTF-8 encoded characters.
+</p>
+<p>This parameter is mandatory if no text string is specified with the
+parameter <var>text</var>.
+</p>
+<p>If both <var>text</var> and <var>textfile</var> are specified, an error is thrown.
+</p>
+</dd>
+<dt> ‘<samp>reload</samp>’</dt>
+<dd><p>If set to 1, the <var>textfile</var> will be reloaded before each frame.
+Be sure to update it atomically, or it may be read partially, or even fail.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>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.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is "0".
+</p>
+<p>See below for the list of accepted constants and functions.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var> and <var>y</var> are expressions containing the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>line_h, lh</samp>’</dt>
+<dd><p>the height of each text line
+</p>
+</dd>
+<dt> ‘<samp>main_h, h, H</samp>’</dt>
+<dd><p>the input height
+</p>
+</dd>
+<dt> ‘<samp>main_w, w, W</samp>’</dt>
+<dd><p>the input width
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_a, ascent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_d, descent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_h</samp>’</dt>
+<dd><p>maximum glyph height, that is the maximum height for all the glyphs
+contained in the rendered text, it is equivalent to <var>ascent</var> -
+<var>descent</var>.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_w</samp>’</dt>
+<dd><p>maximum glyph width, that is the maximum width for all the glyphs
+contained in the rendered text
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>rand(min, max)</samp>’</dt>
+<dd><p>return a random number included between <var>min</var> and <var>max</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>text_h, th</samp>’</dt>
+<dd><p>the height of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>text_w, tw</samp>’</dt>
+<dd><p>the width of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the x and y offset coordinates where the text is drawn.
+</p>
+<p>These parameters allow the <var>x</var> and <var>y</var> expressions to refer
+each other, so you can for example specify <code>y=x/dar</code>.
+</p></dd>
+</dl>
+
+<p>If libavfilter was built with <code>--enable-fontconfig</code>, then
+‘<samp>fontfile</samp>’ can be a fontconfig pattern or omitted.
+</p>
+<p><a name="drawtext_005fexpansion"></a>
+</p><a name="Text-expansion"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Text-expansion">9.23.2 Text expansion</a></h3>
+
+<p>If ‘<samp>expansion</samp>’ is set to <code>strftime</code>,
+the filter recognizes strftime() sequences in the provided text and
+expands them accordingly. Check the documentation of strftime(). This
+feature is deprecated.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>none</code>, the text is printed verbatim.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>normal</code> (which is the default),
+the following expansion mechanism is used.
+</p>
+<p>The backslash character ’\’, followed by any character, always expands to
+the second character.
+</p>
+<p>Sequence of the form <code>%{...}</code> are expanded. The text between the
+braces is a function name, possibly followed by arguments separated by ’:’.
+If the arguments contain special characters or delimiters (’:’ or ’}’),
+they should be escaped.
+</p>
+<p>Note that they probably must also be escaped as the value for the
+‘<samp>text</samp>’ option in the filter argument string and as the filter
+argument in the filtergraph description, and possibly also for the shell,
+that makes up to four levels of escaping; using a text file avoids these
+problems.
+</p>
+<p>The following functions are available:
+</p>
+<dl compact="compact">
+<dt> <code>expr, e</code></dt>
+<dd><p>The expression evaluation result.
+</p>
+<p>It must take one argument specifying the expression to be evaluated,
+which accepts the same constants and functions as the <var>x</var> and
+<var>y</var> values. Note that not all constants should be used, for
+example the text size is not known when evaluating the expression, so
+the constants <var>text_w</var> and <var>text_h</var> will have an undefined
+value.
+</p>
+</dd>
+<dt> <code>gmtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in UTC.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>localtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in the local time zone.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>metadata</code></dt>
+<dd><p>Frame metadata. It must take one argument specifying metadata key.
+</p>
+</dd>
+<dt> <code>n, frame_num</code></dt>
+<dd><p>The frame number, starting from 0.
+</p>
+</dd>
+<dt> <code>pict_type</code></dt>
+<dd><p>A 1 character description of the current picture type.
+</p>
+</dd>
+<dt> <code>pts</code></dt>
+<dd><p>The timestamp of the current frame, in seconds, with microsecond accuracy.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-34"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-34">9.23.3 Examples</a></h3>
+
+<ul>
+<li>
+Draw "Test Text" with font FreeSerif, using the default values for the
+optional parameters.
+
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
+</pre></td></tr></table>
+
+</li><li>
+Draw ’Test Text’ with font FreeSerif of size 24 at position x=100
+and y=50 (counting from the top-left corner of the screen), text is
+yellow with a red box around it. Both the text and the box have an
+opacity of 20%.
+
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>Note that the double quotes are not necessary if spaces are not used
+within the parameter list.
+</p>
+</li><li>
+Show the text at the center of the video frame:
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
+</pre></td></tr></table>
+
+</li><li>
+Show a text line sliding from right to left in the last row of the video
+frame. The file ‘<tt>LONG_LINE</tt>’ is assumed to contain a single line
+with no newlines.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
+</pre></td></tr></table>
+
+</li><li>
+Show the content of file ‘<tt>CREDITS</tt>’ off the bottom of the frame and scroll up.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
+</pre></td></tr></table>
+
+</li><li>
+Draw a single green letter "g", at the center of the input video.
+The glyph baseline is placed at half screen height.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
+</pre></td></tr></table>
+
+</li><li>
+Show text for 1 second every 3 seconds:
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
+</pre></td></tr></table>
+
+</li><li>
+Use fontconfig to set the font. Note that the colons need to be escaped.
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
+</pre></td></tr></table>
+
+</li><li>
+Print the date of a real-time encoding (see strftime(3)):
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
+</pre></td></tr></table>
+
+</li></ul>
+
+<p>For more information about libfreetype, check:
+<a href="http://www.freetype.org/">http://www.freetype.org/</a>.
+</p>
+<p>For more information about fontconfig, check:
+<a href="http://freedesktop.org/software/fontconfig/fontconfig-user.html">http://freedesktop.org/software/fontconfig/fontconfig-user.html</a>.
+</p>
+<a name="edgedetect"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-edgedetect">9.24 edgedetect</a></h2>
+
+<p>Detect and draw edges. The filter uses the Canny Edge Detection algorithm.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low</samp>’</dt>
+<dt> ‘<samp>high</samp>’</dt>
+<dd><p>Set low and high threshold values used by the Canny thresholding
+algorithm.
+</p>
+<p>The high threshold selects the "strong" edge pixels, which are then
+connected through 8-connectivity with the "weak" edge pixels selected
+by the low threshold.
+</p>
+<p><var>low</var> and <var>high</var> threshold values must be chosen in the range
+[0,1], and <var>low</var> should be lesser or equal to <var>high</var>.
+</p>
+<p>Default value for <var>low</var> is <code>20/255</code>, and default value for <var>high</var>
+is <code>50/255</code>.
+</p></dd>
+</dl>
+
+<p>Example:
+</p><table><tr><td> </td><td><pre class="example">edgedetect=low=0.1:high=0.4
+</pre></td></tr></table>
+
+<a name="extractplanes"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-extractplanes">9.25 extractplanes</a></h2>
+
+<p>Extract color channel components from input video stream into
+separate grayscale video streams.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>planes</samp>’</dt>
+<dd><p>Set plane(s) to extract.
+</p>
+<p>Available values for planes are:
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>u</samp>’</dt>
+<dt> ‘<samp>v</samp>’</dt>
+<dt> ‘<samp>a</samp>’</dt>
+<dt> ‘<samp>r</samp>’</dt>
+<dt> ‘<samp>g</samp>’</dt>
+<dt> ‘<samp>b</samp>’</dt>
+</dl>
+
+<p>Choosing planes not available in the input will result in an error.
+That means you cannot select <code>r</code>, <code>g</code>, <code>b</code> planes
+with <code>y</code>, <code>u</code>, <code>v</code> planes at same time.
+</p></dd>
+</dl>
+
+<a name="Examples-54"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-54">9.25.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract luma, u and v color channel component from input video frame
+into 3 grayscale outputs:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
+</pre></td></tr></table>
+</li></ul>
+
+<a name="elbg"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-elbg">9.26 elbg</a></h2>
+
+<p>Apply a posterize effect using the ELBG (Enhanced LBG) algorithm.
+</p>
+<p>For each input image, the filter will compute the optimal mapping from
+the input to the output given the codebook length, that is the number
+of distinct output colors.
+</p>
+<p>This filter accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>codebook_length, l</samp>’</dt>
+<dd><p>Set codebook length. The value must be a positive integer, and
+represents the number of distinct output colors. Default value is 256.
+</p>
+</dd>
+<dt> ‘<samp>nb_steps, n</samp>’</dt>
+<dd><p>Set the maximum number of iterations to apply for computing the optimal
+mapping. The higher the value the better the result and the higher the
+computation time. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>seed, s</samp>’</dt>
+<dd><p>Set a random seed, 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.
+</p></dd>
+</dl>
+
+<a name="fade"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-fade">9.27 fade</a></h2>
+
+<p>Apply fade-in/out effect to input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>The effect type – can be either "in" for fade-in, or "out" for a fade-out
+effect.
+Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_frame, s</samp>’</dt>
+<dd><p>Specify the number of the start frame for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames, n</samp>’</dt>
+<dd><p>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 filled with the
+selected ‘<samp>color</samp>’.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>alpha</samp>’</dt>
+<dd><p>If set to 1, fade only alpha channel, if one exists on the input.
+Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify the timestamp (in seconds) of the frame to start to apply the fade
+effect. If both start_frame and start_time are specified, the fade will start at
+whichever comes last. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>The number of seconds 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 filled with the
+selected ‘<samp>color</samp>’.
+If both duration and nb_frames are specified, duration is used. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the fade. Default is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-22"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-22">9.27.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 30 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:30
+</pre></td></tr></table>
+
+<p>The command above is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">fade=t=in:s=0:n=30
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 45 frames of a 200-frame video:
+<table><tr><td> </td><td><pre class="example">fade=out:155:45
+fade=type=out:start_frame=155:nb_frames=45
+</pre></td></tr></table>
+
+</li><li>
+Fade in first 25 frames and fade out last 25 frames of a 1000-frame video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25, fade=out:975:25
+</pre></td></tr></table>
+
+</li><li>
+Make first 5 frames yellow, then fade in from frame 5-24:
+<table><tr><td> </td><td><pre class="example">fade=in:5:20:color=yellow
+</pre></td></tr></table>
+
+</li><li>
+Fade in alpha over first 25 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25:alpha=1
+</pre></td></tr></table>
+
+</li><li>
+Make first 5.5 seconds black, then fade in for 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">fade=t=in:st=5.5:d=0.5
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="field"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-field">9.28 field</a></h2>
+
+<p>Extract a single field from an interlaced image using stride
+arithmetic to avoid wasting CPU time. The output frames are marked as
+non-interlaced.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Specify whether to extract the top (if the value is <code>0</code> or
+<code>top</code>) or the bottom field (if the value is <code>1</code> or
+<code>bottom</code>).
+</p></dd>
+</dl>
+
+<a name="fieldmatch"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-fieldmatch">9.29 fieldmatch</a></h2>
+
+<p>Field matching filter for inverse telecine. It is meant to reconstruct the
+progressive frames from a telecined stream. The filter does not drop duplicated
+frames, so to achieve a complete inverse telecine <code>fieldmatch</code> needs to be
+followed by a decimation filter such as <a href="#decimate">decimate</a> in the filtergraph.
+</p>
+<p>The separation of the field matching and the decimation is notably motivated by
+the possibility of inserting a de-interlacing filter fallback between the two.
+If the source has mixed telecined and real interlaced content,
+<code>fieldmatch</code> will not be able to match fields for the interlaced parts.
+But these remaining combed frames will be marked as interlaced, and thus can be
+de-interlaced by a later filter such as <a href="#yadif">yadif</a> before decimation.
+</p>
+<p>In addition to the various configuration options, <code>fieldmatch</code> can take an
+optional second stream, activated through the ‘<samp>ppsrc</samp>’ option. If
+enabled, the frames reconstruction will be based on the fields and frames from
+this second stream. This allows the first input to be pre-processed in order to
+help the various algorithms of the filter, while keeping the output lossless
+(assuming the fields are matched properly). Typically, a field-aware denoiser,
+or brightness/contrast adjustments can help.
+</p>
+<p>Note that this filter uses the same algorithms as TIVTC/TFM (AviSynth project)
+and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from
+which <code>fieldmatch</code> is based on. While the semantic and usage are very
+close, some behaviour and options names can differ.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Specify the assumed field order of the input stream. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Auto detect parity (use FFmpeg’s internal parity value).
+</p></dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Assume bottom field first.
+</p></dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Assume top field first.
+</p></dd>
+</dl>
+
+<p>Note that it is sometimes recommended not to trust the parity announced by the
+stream.
+</p>
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the matching mode or strategy to use. ‘<samp>pc</samp>’ mode is the safest in the
+sense that it won’t risk creating jerkiness due to duplicate frames when
+possible, but if there are bad edits or blended fields it will end up
+outputting combed frames when a good match might actually exist. On the other
+hand, ‘<samp>pcn_ub</samp>’ mode is the most risky in terms of creating jerkiness,
+but will almost always find a good frame if there is one. The other values are
+all somewhere in between ‘<samp>pc</samp>’ and ‘<samp>pcn_ub</samp>’ in terms of risking
+jerkiness and creating duplicate frames versus finding good matches in sections
+with bad edits, orphaned fields, blended fields, etc.
+</p>
+<p>More details about p/c/n/u/b are available in <a href="#p_002fc_002fn_002fu_002fb-meaning">p/c/n/u/b meaning</a> section.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>pc</samp>’</dt>
+<dd><p>2-way matching (p/c)
+</p></dd>
+<dt> ‘<samp>pc_n</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match if still combed (p/c + n)
+</p></dd>
+<dt> ‘<samp>pc_u</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match (same order) if still combed (p/c + u)
+</p></dd>
+<dt> ‘<samp>pc_n_ub</samp>’</dt>
+<dd><p>2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if
+still combed (p/c + n + u/b)
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>3-way matching (p/c/n)
+</p></dd>
+<dt> ‘<samp>pcn_ub</samp>’</dt>
+<dd><p>3-way matching, and trying 4th/5th matches if all 3 of the original matches are
+detected as combed (p/c/n + u/b)
+</p></dd>
+</dl>
+
+<p>The parenthesis at the end indicate the matches that would be used for that
+mode assuming ‘<samp>order</samp>’=<var>tff</var> (and ‘<samp>field</samp>’ on <var>auto</var> or
+<var>top</var>).
+</p>
+<p>In terms of speed ‘<samp>pc</samp>’ mode is by far the fastest and ‘<samp>pcn_ub</samp>’ is
+the slowest.
+</p>
+<p>Default value is <var>pc_n</var>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark the main input stream as a pre-processed input, and enable the secondary
+input stream as the clean source to pick the fields from. See the filter
+introduction for more details. It is similar to the ‘<samp>clip2</samp>’ feature from
+VFM/TFM.
+</p>
+<p>Default value is <code>0</code> (disabled).
+</p>
+</dd>
+<dt> ‘<samp>field</samp>’</dt>
+<dd><p>Set the field to match from. It is recommended to set this to the same value as
+‘<samp>order</samp>’ unless you experience matching failures with that setting. In
+certain circumstances changing the field that is used to match from can have a
+large impact on matching performance. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatic (same value as ‘<samp>order</samp>’).
+</p></dd>
+<dt> ‘<samp>bottom</samp>’</dt>
+<dd><p>Match from the bottom field.
+</p></dd>
+<dt> ‘<samp>top</samp>’</dt>
+<dd><p>Match from the top field.
+</p></dd>
+</dl>
+
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mchroma</samp>’</dt>
+<dd><p>Set whether or not chroma is included during the match comparisons. In most
+cases it is recommended to leave this enabled. You should set this to <code>0</code>
+only if your clip has bad chroma problems such as heavy rainbowing or other
+artifacts. Setting this to <code>0</code> could also be used to speed things up at
+the cost of some accuracy.
+</p>
+<p>Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dd><p>These define an exclusion band which excludes the lines between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ from being included in the field matching decision. An exclusion
+band can be used to ignore subtitles, a logo, or other things that may
+interfere with the matching. ‘<samp>y0</samp>’ sets the starting scan line and
+‘<samp>y1</samp>’ sets the ending line; all lines in between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ (including ‘<samp>y0</samp>’ and ‘<samp>y1</samp>’) will be ignored. Setting
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ to the same value will disable the feature.
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ defaults to <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set the scene change detection threshold as a percentage of maximum change on
+the luma plane. Good values are in the <code>[8.0, 14.0]</code> range. Scene change
+detection is only relevant in case ‘<samp>combmatch</samp>’=<var>sc</var>. The range for
+‘<samp>scthresh</samp>’ is <code>[0.0, 100.0]</code>.
+</p>
+<p>Default value is <code>12.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>combmatch</samp>’</dt>
+<dd><p>When ‘<samp>combatch</samp>’ is not <var>none</var>, <code>fieldmatch</code> will take into
+account the combed scores of matches when deciding what match to use as the
+final match. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No final matching based on combed scores.
+</p></dd>
+<dt> ‘<samp>sc</samp>’</dt>
+<dd><p>Combed scores are only used when a scene change is detected.
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Use combed scores all the time.
+</p></dd>
+</dl>
+
+<p>Default is <var>sc</var>.
+</p>
+</dd>
+<dt> ‘<samp>combdbg</samp>’</dt>
+<dd><p>Force <code>fieldmatch</code> to calculate the combed metrics for certain matches and
+print them. This setting is known as ‘<samp>micout</samp>’ in TFM/VFM vocabulary.
+Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No forced calculation.
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>Force p/c/n calculations.
+</p></dd>
+<dt> ‘<samp>pcnub</samp>’</dt>
+<dd><p>Force p/c/n/u/b calculations.
+</p></dd>
+</dl>
+
+<p>Default value is <var>none</var>.
+</p>
+</dd>
+<dt> ‘<samp>cthresh</samp>’</dt>
+<dd><p>This is the area combing threshold used for combed frame detection. This
+essentially controls how "strong" or "visible" combing must be to be detected.
+Larger values mean combing must be more visible and smaller values mean combing
+can be less visible or strong and still be detected. Valid settings are from
+<code>-1</code> (every pixel will be detected as combed) to <code>255</code> (no pixel will
+be detected as combed). This is basically a pixel difference value. A good
+range is <code>[8, 12]</code>.
+</p>
+<p>Default value is <code>9</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Sets whether or not chroma is considered in the combed frame decision. Only
+disable this if your source has chroma problems (rainbowing, etc.) that are
+causing problems for the combed frame detection with chroma enabled. Actually,
+using ‘<samp>chroma</samp>’=<var>0</var> is usually more reliable, except for the case
+where there is chroma only combing in the source.
+</p>
+<p>Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Respectively set the x-axis and y-axis size of the window used during combed
+frame detection. This has to do with the size of the area in which
+‘<samp>combpel</samp>’ pixels are required to be detected as combed for a frame to be
+declared combed. See the ‘<samp>combpel</samp>’ parameter description for more info.
+Possible values are any number that is a power of 2 starting at 4 and going up
+to 512.
+</p>
+<p>Default value is <code>16</code>.
+</p>
+</dd>
+<dt> ‘<samp>combpel</samp>’</dt>
+<dd><p>The number of combed pixels inside any of the ‘<samp>blocky</samp>’ by
+‘<samp>blockx</samp>’ size blocks on the frame for the frame to be detected as
+combed. While ‘<samp>cthresh</samp>’ controls how "visible" the combing must be, this
+setting controls "how much" combing there must be in any localized area (a
+window defined by the ‘<samp>blockx</samp>’ and ‘<samp>blocky</samp>’ settings) on the
+frame. Minimum value is <code>0</code> and maximum is <code>blocky x blockx</code> (at
+which point no frames will ever be detected as combed). This setting is known
+as ‘<samp>MI</samp>’ in TFM/VFM vocabulary.
+</p>
+<p>Default value is <code>80</code>.
+</p></dd>
+</dl>
+
+<p><a name="p_002fc_002fn_002fu_002fb-meaning"></a>
+</p><a name="p_002fc_002fn_002fu_002fb-meaning-1"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-p_002fc_002fn_002fu_002fb-meaning-1">9.29.1 p/c/n/u/b meaning</a></h3>
+
+<a name="p_002fc_002fn"></a>
+<h4 class="subsubsection"><a href="ffmpeg-filters.html#toc-p_002fc_002fn">9.29.1.1 p/c/n</a></h4>
+
+<p>We assume the following telecined stream:
+</p>
+<table><tr><td> </td><td><pre class="example">Top fields: 1 2 2 3 4
+Bottom fields: 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>The numbers correspond to the progressive frame the fields relate to. Here, the
+first two frames are progressive, the 3rd and 4th are combed, and so on.
+</p>
+<p>When <code>fieldmatch</code> is configured to run a matching from bottom
+(‘<samp>field</samp>’=<var>bottom</var>) this is how this input stream get transformed:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4
+ B 1 2 3 4 4 <-- matching reference
+
+Matches: c c n n c
+
+Output stream:
+ T 1 2 3 4 4
+ B 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>As a result of the field matching, we can see that some frames get duplicated.
+To perform a complete inverse telecine, you need to rely on a decimation filter
+after this operation. See for instance the <a href="#decimate">decimate</a> filter.
+</p>
+<p>The same operation now matching from top fields (‘<samp>field</samp>’=<var>top</var>)
+looks like this:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4 <-- matching reference
+ B 1 2 3 4 4
+
+Matches: c c p p c
+
+Output stream:
+ T 1 2 2 3 4
+ B 1 2 2 3 4
+</pre></td></tr></table>
+
+<p>In these examples, we can see what <var>p</var>, <var>c</var> and <var>n</var> mean;
+basically, they refer to the frame and field of the opposite parity:
+</p>
+<ul>
+<li> <var>p</var> matches the field of the opposite parity in the previous frame
+</li><li> <var>c</var> matches the field of the opposite parity in the current frame
+</li><li> <var>n</var> matches the field of the opposite parity in the next frame
+</li></ul>
+
+<a name="u_002fb"></a>
+<h4 class="subsubsection"><a href="ffmpeg-filters.html#toc-u_002fb">9.29.1.2 u/b</a></h4>
+
+<p>The <var>u</var> and <var>b</var> matching are a bit special in the sense that they match
+from the opposite parity flag. In the following examples, we assume that we are
+currently matching the 2nd frame (Top:2, bottom:2). According to the match, a
+’x’ is placed above and below each matched fields.
+</p>
+<p>With bottom matching (‘<samp>field</samp>’=<var>bottom</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 1 2 2 2
+ 2 2 2 1 3
+</pre></td></tr></table>
+
+<p>With top matching (‘<samp>field</samp>’=<var>top</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 2 2 1 2
+ 2 1 3 2 2
+</pre></td></tr></table>
+
+<a name="Examples-30"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-30">9.29.2 Examples</a></h3>
+
+<p>Simple IVTC of a top field first telecined stream:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=none, decimate
+</pre></td></tr></table>
+
+<p>Advanced IVTC, with fallback on <a href="#yadif">yadif</a> for still combed frames:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
+</pre></td></tr></table>
+
+<a name="fieldorder"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-fieldorder">9.30 fieldorder</a></h2>
+
+<p>Transform the field order of the input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Output field order. Valid values are <var>tff</var> for top field first or <var>bff</var>
+for bottom field first.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>tff</samp>’.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter is very useful when converting to or from PAL DV material,
+which is bottom field first.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
+</pre></td></tr></table>
+
+<a name="fifo"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-fifo">9.31 fifo</a></h2>
+
+<p>Buffer input images and send them when they are requested.
+</p>
+<p>This filter is mainly useful when auto-inserted by the libavfilter
+framework.
+</p>
+<p>The filter does not take parameters.
+</p>
+<p><a name="format"></a>
+</p><a name="format-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-format-1">9.32 format</a></h2>
+
+<p>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.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-71"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-71">9.32.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert the input video to the format <var>yuv420p</var>
+<table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p
+</pre></td></tr></table>
+
+<p>Convert the input video to any of the formats in the list
+</p><table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="fps"></a>
+</p><a name="fps-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-fps-1">9.33 fps</a></h2>
+
+<p>Convert the video to specified constant frame rate by duplicating or dropping
+frames as necessary.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>fps</samp>’</dt>
+<dd><p>Desired output frame rate. The default is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Rounding method.
+</p>
+<p>Possible values are:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero round towards 0
+</p></dd>
+<dt> ‘<samp>inf</samp>’</dt>
+<dd><p>round away from 0
+</p></dd>
+<dt> ‘<samp>down</samp>’</dt>
+<dd><p>round towards -infinity
+</p></dd>
+<dt> ‘<samp>up</samp>’</dt>
+<dd><p>round towards +infinity
+</p></dd>
+<dt> ‘<samp>near</samp>’</dt>
+<dd><p>round to nearest
+</p></dd>
+</dl>
+<p>The default is <code>near</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Assume the first PTS should be the given value, in seconds. This allows for
+padding/trimming at the start of stream. By default, no assumption is made
+about the first frame’s expected PTS, so no padding or trimming is done.
+For example, this could be set to 0 to pad the beginning with duplicates of
+the first frame if a video stream starts after the audio stream or to trim any
+frames with a negative PTS.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>fps</var>[:<var>round</var>].
+</p>
+<p>See also the <a href="#setpts">setpts</a> filter.
+</p>
+<a name="Examples-31"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-31">9.33.1 Examples</a></h3>
+
+<ul>
+<li>
+A typical usage in order to set the fps to 25:
+<table><tr><td> </td><td><pre class="example">fps=fps=25
+</pre></td></tr></table>
+
+</li><li>
+Sets the fps to 24, using abbreviation and rounding method to round to nearest:
+<table><tr><td> </td><td><pre class="example">fps=fps=film:round=near
+</pre></td></tr></table>
+</li></ul>
+
+<a name="framepack"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-framepack">9.34 framepack</a></h2>
+
+<p>Pack two different video streams into a stereoscopic video, setting proper
+metadata on supported codecs. The two views should have the same size and
+framerate and processing will stop when the shorter video ends. Please note
+that you may conveniently adjust view properties with the <a href="#scale">scale</a> and
+<a href="#fps">fps</a> filters.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Desired packing format. Supported values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sbs</samp>’</dt>
+<dd><p>Views are next to each other (default).
+</p>
+</dd>
+<dt> ‘<samp>tab</samp>’</dt>
+<dd><p>Views are on top of each other.
+</p>
+</dd>
+<dt> ‘<samp>lines</samp>’</dt>
+<dd><p>Views are packed by line.
+</p>
+</dd>
+<dt> ‘<samp>columns</samp>’</dt>
+<dd><p>Views are eacked by column.
+</p>
+</dd>
+<dt> ‘<samp>frameseq</samp>’</dt>
+<dd><p>Views are temporally interleaved.
+</p>
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<p>Some examples follow:
+</p>
+<table><tr><td> </td><td><pre class="example"># Convert left and right views into a frame sequential video.
+ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT
+
+# Convert views into a side-by-side video with the same output resolution as the input.
+ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
+</pre></td></tr></table>
+
+<a name="framestep"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-framestep">9.35 framestep</a></h2>
+
+<p>Select one frame every N-th frame.
+</p>
+<p>This filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Select frame after every <code>step</code> frames.
+Allowed values are positive integers higher than 0. Default value is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><a name="frei0r"></a>
+</p><a name="frei0r-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-frei0r-1">9.36 frei0r</a></h2>
+
+<p>Apply a frei0r effect to the input video.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r effect to load. If the environment variable
+<code>FREI0R_PATH</code> is defined, the frei0r effect is searched in each one of the
+directories specified by the colon separated list in <code>FREIOR_PATH</code>,
+otherwise in the standard frei0r paths, which are in this order:
+‘<tt>HOME/.frei0r-1/lib/</tt>’, ‘<tt>/usr/local/lib/frei0r-1/</tt>’,
+‘<tt>/usr/lib/frei0r-1/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r effect.
+</p>
+</dd>
+</dl>
+
+<p>A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+<var>R</var>/<var>G</var>/<var>B</var>, (<var>R</var>, <var>G</var>, and <var>B</var> being float
+numbers from 0.0 to 1.0) or by a color description specified in the "Color"
+section in the ffmpeg-utils manual), a position (specified by the syntax <var>X</var>/<var>Y</var>,
+<var>X</var> and <var>Y</var> being float numbers) and a string.
+</p>
+<p>The number and kind of parameters depend on the loaded effect. If an
+effect parameter is not specified the default value is set.
+</p>
+<a name="Examples-49"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-49">9.36.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the distort0r effect, set the first two double parameters:
+<table><tr><td> </td><td><pre class="example">frei0r=filter_name=distort0r:filter_params=0.5|0.01
+</pre></td></tr></table>
+
+</li><li>
+Apply the colordistance effect, take a color as first parameter:
+<table><tr><td> </td><td><pre class="example">frei0r=colordistance:0.2/0.3/0.4
+frei0r=colordistance:violet
+frei0r=colordistance:0x112233
+</pre></td></tr></table>
+
+</li><li>
+Apply the perspective effect, specify the top left and top right image
+positions:
+<table><tr><td> </td><td><pre class="example">frei0r=perspective:0.2/0.2|0.8/0.2
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information see:
+<a href="http://frei0r.dyne.org">http://frei0r.dyne.org</a>
+</p>
+<a name="geq"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-geq">9.37 geq</a></h2>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>lum_expr, lum</samp>’</dt>
+<dd><p>Set the luminance expression.
+</p></dd>
+<dt> ‘<samp>cb_expr, cb</samp>’</dt>
+<dd><p>Set the chrominance blue expression.
+</p></dd>
+<dt> ‘<samp>cr_expr, cr</samp>’</dt>
+<dd><p>Set the chrominance red expression.
+</p></dd>
+<dt> ‘<samp>alpha_expr, a</samp>’</dt>
+<dd><p>Set the alpha expression.
+</p></dd>
+<dt> ‘<samp>red_expr, r</samp>’</dt>
+<dd><p>Set the red expression.
+</p></dd>
+<dt> ‘<samp>green_expr, g</samp>’</dt>
+<dd><p>Set the green expression.
+</p></dd>
+<dt> ‘<samp>blue_expr, b</samp>’</dt>
+<dd><p>Set the blue expression.
+</p></dd>
+</dl>
+
+<p>The colorspace is selected according to the specified options. If one
+of the ‘<samp>lum_expr</samp>’, ‘<samp>cb_expr</samp>’, or ‘<samp>cr_expr</samp>’
+options is specified, the filter will automatically select a YCbCr
+colorspace. If one of the ‘<samp>red_expr</samp>’, ‘<samp>green_expr</samp>’, or
+‘<samp>blue_expr</samp>’ options is specified, it will select an RGB
+colorspace.
+</p>
+<p>If one of the chrominance expression is not defined, it falls back on the other
+one. If no alpha expression is specified it will evaluate to opaque value.
+If none of chrominance expressions are specified, they will evaluate
+to the luminance expression.
+</p>
+<p>The expressions can use the following variables and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>The coordinates of the current sample.
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>The width and height of the image.
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>p(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the current
+plane.
+</p>
+</dd>
+<dt> ‘<samp>lum(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the luminance
+plane.
+</p>
+</dd>
+<dt> ‘<samp>cb(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+blue-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>cr(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>r(x, y)</samp>’</dt>
+<dt> ‘<samp>g(x, y)</samp>’</dt>
+<dt> ‘<samp>b(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red/green/blue component. Return 0 if there is no such component.
+</p>
+</dd>
+<dt> ‘<samp>alpha(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the alpha
+plane. Return 0 if there is no such plane.
+</p></dd>
+</dl>
+
+<p>For functions, if <var>x</var> and <var>y</var> are outside the area, the value will be
+automatically clipped to the closer edge.
+</p>
+<a name="Examples-29"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-29">9.37.1 Examples</a></h3>
+
+<ul>
+<li>
+Flip the image horizontally:
+<table><tr><td> </td><td><pre class="example">geq=p(W-X\,Y)
+</pre></td></tr></table>
+
+</li><li>
+Generate a bidimensional sine wave, with angle <code>PI/3</code> and a
+wavelength of 100 pixels:
+<table><tr><td> </td><td><pre class="example">geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a fancy enigmatic moving light:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a quick emboss effect:
+<table><tr><td> </td><td><pre class="example">format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
+</pre></td></tr></table>
+
+</li><li>
+Modify RGB components depending on pixel position:
+<table><tr><td> </td><td><pre class="example">geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="gradfun"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-gradfun">9.38 gradfun</a></h2>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>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
+64, default value is 1.2, out-of-range values will be clipped to the valid
+range.
+</p>
+</dd>
+<dt> ‘<samp>radius</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>strength</var>[:<var>radius</var>]
+</p>
+<a name="Examples-41"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-41">9.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the filter with a <code>3.5</code> strength and radius of <code>8</code>:
+<table><tr><td> </td><td><pre class="example">gradfun=3.5:8
+</pre></td></tr></table>
+
+</li><li>
+Specify radius, omitting the strength (which will fall-back to the default
+value):
+<table><tr><td> </td><td><pre class="example">gradfun=radius=8
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="haldclut"></a>
+</p><a name="haldclut-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-haldclut-1">9.39 haldclut</a></h2>
+
+<p>Apply a Hald CLUT to a video stream.
+</p>
+<p>First input is the video stream to process, and second one is the Hald CLUT.
+The Hald CLUT input can be a simple picture or a complete video stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last CLUT after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the CLUT is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><code>haldclut</code> also has the same interpolation options as <a href="#lut3d">lut3d</a> (both
+filters share the same internals).
+</p>
+<p>More information about the Hald CLUT can be found on Eskil Steenberg’s website
+(Hald CLUT author) at <a href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>.
+</p>
+<a name="Workflow-examples"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Workflow-examples">9.39.1 Workflow examples</a></h3>
+
+<a name="Hald-CLUT-video-stream"></a>
+<h4 class="subsubsection"><a href="ffmpeg-filters.html#toc-Hald-CLUT-video-stream">9.39.1.1 Hald CLUT video stream</a></h4>
+
+<p>Generate an identity Hald CLUT stream altered with various effects:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
+</pre></td></tr></table>
+
+<p>Note: make sure you use a lossless codec.
+</p>
+<p>Then use it with <code>haldclut</code> to apply it on some random stream:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
+</pre></td></tr></table>
+
+<p>The Hald CLUT will be applied to the 10 first seconds (duration of
+‘<tt>clut.nut</tt>’), then the latest picture of that CLUT stream will be applied
+to the remaining frames of the <code>mandelbrot</code> stream.
+</p>
+<a name="Hald-CLUT-with-preview"></a>
+<h4 class="subsubsection"><a href="ffmpeg-filters.html#toc-Hald-CLUT-with-preview">9.39.1.2 Hald CLUT with preview</a></h4>
+
+<p>A Hald CLUT is supposed to be a squared image of <code>Level*Level*Level</code> by
+<code>Level*Level*Level</code> pixels. For a given Hald CLUT, FFmpeg will select the
+biggest possible square starting at the top left of the picture. The remaining
+padding pixels (bottom or right) will be ignored. This area can be used to add
+a preview of the Hald CLUT.
+</p>
+<p>Typically, the following generated Hald CLUT will be supported by the
+<code>haldclut</code> filter:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "
+ pad=iw+320 [padded_clut];
+ smptebars=s=320x256, split [a][b];
+ [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
+ [main][b] overlay=W-320" -frames:v 1 clut.png
+</pre></td></tr></table>
+
+<p>It contains the original and a preview of the effect of the CLUT: SMPTE color
+bars are displayed on the right-top, and below the same color bars processed by
+the color changes.
+</p>
+<p>Then, the effect of this Hald CLUT can be visualized with:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
+</pre></td></tr></table>
+
+<a name="hflip"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-hflip">9.40 hflip</a></h2>
+
+<p>Flip the input video horizontally.
+</p>
+<p>For example to horizontally flip the input video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "hflip" out.avi
+</pre></td></tr></table>
+
+<a name="histeq"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-histeq">9.41 histeq</a></h2>
+<p>This filter applies a global color histogram equalization on a
+per-frame basis.
+</p>
+<p>It can be used to correct video that has a compressed range of pixel
+intensities. The filter redistributes the pixel intensities to
+equalize their distribution across the intensity range. It may be
+viewed as an "automatically adjusting contrast filter". This filter is
+useful only for correcting degraded or poorly captured source
+video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>Determine the amount of equalization to be applied. As the strength
+is reduced, the distribution of pixel intensities more-and-more
+approaches that of the input frame. The value must be a float number
+in the range [0,1] and defaults to 0.200.
+</p>
+</dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>Set the maximum intensity that can generated and scale the output
+values appropriately. The strength should be set as desired and then
+the intensity can be limited if needed to avoid washing-out. The value
+must be a float number in the range [0,1] and defaults to 0.210.
+</p>
+</dd>
+<dt> ‘<samp>antibanding</samp>’</dt>
+<dd><p>Set the antibanding level. If enabled the filter will randomly vary
+the luminance of output pixels by a small amount to avoid banding of
+the histogram. Possible values are <code>none</code>, <code>weak</code> or
+<code>strong</code>. It defaults to <code>none</code>.
+</p></dd>
+</dl>
+
+<a name="histogram"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-histogram">9.42 histogram</a></h2>
+
+<p>Compute and draw a color distribution histogram for the input video.
+</p>
+<p>The computed histogram is a representation of the color component
+distribution in an image.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set histogram mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>levels</samp>’</dt>
+<dd><p>Standard histogram that displays the color components distribution in an
+image. Displays color graph for each color component. Shows distribution of
+the Y, U, V, A or R, G, B components, depending on input format, in the
+current frame. Below each graph a color component scale meter is shown.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Displays chroma values (U/V color placement) in a two dimensional
+graph (which is called a vectorscope). The brighter a pixel in the
+vectorscope, the more pixels of the input frame correspond to that pixel
+(i.e., more pixels have this chroma value). The V component is displayed on
+the horizontal (X) axis, with the leftmost side being V = 0 and the rightmost
+side being V = 255. The U component is displayed on the vertical (Y) axis,
+with the top representing U = 0 and the bottom representing U = 255.
+</p>
+<p>The position of a white pixel in the graph corresponds to the chroma value of
+a pixel of the input clip. The graph can therefore be used to read the hue
+(color flavor) and the saturation (the dominance of the hue in the color). As
+the hue of a color changes, it moves around the square. At the center of the
+square the saturation is zero, which means that the corresponding pixel has no
+color. If the amount of a specific color is increased (while leaving the other
+colors unchanged) the saturation increases, and the indicator moves towards
+the edge of the square.
+</p>
+</dd>
+<dt> ‘<samp>color2</samp>’</dt>
+<dd><p>Chroma values in vectorscope, similar as <code>color</code> but actual chroma values
+are displayed.
+</p>
+</dd>
+<dt> ‘<samp>waveform</samp>’</dt>
+<dd><p>Per row/column color component graph. In row mode, the graph on the left side
+represents color component value 0 and the right side represents value = 255.
+In column mode, the top side represents color component value = 0 and bottom
+side represents value = 255.
+</p></dd>
+</dl>
+<p>Default value is <code>levels</code>.
+</p>
+</dd>
+<dt> ‘<samp>level_height</samp>’</dt>
+<dd><p>Set height of level in <code>levels</code>. Default value is <code>200</code>.
+Allowed range is [50, 2048].
+</p>
+</dd>
+<dt> ‘<samp>scale_height</samp>’</dt>
+<dd><p>Set height of color scale in <code>levels</code>. Default value is <code>12</code>.
+Allowed range is [0, 40].
+</p>
+</dd>
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Set step for <code>waveform</code> mode. Smaller values are useful to find out how
+many values of the same luminance are distributed across input rows/columns.
+Default value is <code>10</code>. Allowed range is [1, 255].
+</p>
+</dd>
+<dt> ‘<samp>waveform_mode</samp>’</dt>
+<dd><p>Set mode for <code>waveform</code>. Can be either <code>row</code>, or <code>column</code>.
+Default is <code>row</code>.
+</p>
+</dd>
+<dt> ‘<samp>waveform_mirror</samp>’</dt>
+<dd><p>Set mirroring mode for <code>waveform</code>. <code>0</code> means unmirrored, <code>1</code>
+means mirrored. In mirrored mode, higher values will be represented on the left
+side for <code>row</code> mode and at the top for <code>column</code> mode. Default is
+<code>0</code> (unmirrored).
+</p>
+</dd>
+<dt> ‘<samp>display_mode</samp>’</dt>
+<dd><p>Set display mode for <code>waveform</code> and <code>levels</code>.
+It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>parade</samp>’</dt>
+<dd><p>Display separate graph for the color components side by side in
+<code>row</code> waveform mode or one below the other in <code>column</code> waveform mode
+for <code>waveform</code> histogram mode. For <code>levels</code> histogram mode,
+per color component graphs are placed below each other.
+</p>
+<p>Using this display mode in <code>waveform</code> histogram mode makes it easy to
+spot color casts in the highlights and shadows of an image, by comparing the
+contours of the top and the bottom graphs of each waveform. Since whites,
+grays, and blacks are characterized by exactly equal amounts of red, green,
+and blue, neutral areas of the picture should display three waveforms of
+roughly equal width/height. If not, the correction is easy to perform by
+making level adjustments the three waveforms.
+</p>
+</dd>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dd><p>Presents information identical to that in the <code>parade</code>, except
+that the graphs representing color components are superimposed directly
+over one another.
+</p>
+<p>This display mode in <code>waveform</code> histogram mode makes it easier to spot
+relative differences or similarities in overlapping areas of the color
+components that are supposed to be identical, such as neutral whites, grays,
+or blacks.
+</p></dd>
+</dl>
+<p>Default is <code>parade</code>.
+</p>
+</dd>
+<dt> ‘<samp>levels_mode</samp>’</dt>
+<dd><p>Set mode for <code>levels</code>. Can be either <code>linear</code>, or <code>logarithmic</code>.
+Default is <code>linear</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-52"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-52">9.42.1 Examples</a></h3>
+
+<ul>
+<li>
+Calculate and draw histogram:
+<table><tr><td> </td><td><pre class="example">ffplay -i input -vf histogram
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="hqdn3d"></a>
+</p><a name="hqdn3d-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-hqdn3d-1">9.43 hqdn3d</a></h2>
+
+<p>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.
+</p>
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial luma strength,
+defaults to 4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial chroma strength,
+defaults to 3.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>luma_tmp</samp>’</dt>
+<dd><p>a float number which specifies luma temporal strength, defaults to
+6.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_tmp</samp>’</dt>
+<dd><p>a float number which specifies chroma temporal strength, defaults to
+<var>luma_tmp</var>*<var>chroma_spatial</var>/<var>luma_spatial</var>
+</p></dd>
+</dl>
+
+<a name="hue"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-hue">9.44 hue</a></h2>
+
+<p>Modify the hue and/or the saturation of the input.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the hue angle as a number of degrees. It accepts an expression,
+and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>Specify the saturation in the [-10,10] range. It accepts an expression and
+defaults to "1".
+</p>
+</dd>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Specify the hue angle as a number of radians. It accepts an
+expression, and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Specify the brightness in the [-10,10] range. It accepts an expression and
+defaults to "0".
+</p></dd>
+</dl>
+
+<p>‘<samp>h</samp>’ and ‘<samp>H</samp>’ are mutually exclusive, and can’t be
+specified at the same time.
+</p>
+<p>The ‘<samp>b</samp>’, ‘<samp>h</samp>’, ‘<samp>H</samp>’ and ‘<samp>s</samp>’ option values are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame count of the input frame starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>presentation timestamp of the input frame expressed in time base units
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+<a name="Examples-42"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-42">9.44.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the hue to 90 degrees and the saturation to 1.0:
+<table><tr><td> </td><td><pre class="example">hue=h=90:s=1
+</pre></td></tr></table>
+
+</li><li>
+Same command but expressing the hue in radians:
+<table><tr><td> </td><td><pre class="example">hue=H=PI/2:s=1
+</pre></td></tr></table>
+
+</li><li>
+Rotate hue and make the saturation swing between 0
+and 2 over a period of 1 second:
+<table><tr><td> </td><td><pre class="example">hue="H=2*PI*t: s=sin(2*PI*t)+1"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-in effect starting at 0:
+<table><tr><td> </td><td><pre class="example">hue="s=min(t/3\,1)"
+</pre></td></tr></table>
+
+<p>The general fade-in expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=min(0\, max((t-START)/DURATION\, 1))"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-out effect starting at 5 seconds:
+<table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (8-t)/3))"
+</pre></td></tr></table>
+
+<p>The general fade-out expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="Commands-3"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands-3">9.44.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dt> ‘<samp>s</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Modify the hue and/or the saturation and/or brightness of the input video.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="idet"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-idet">9.45 idet</a></h2>
+
+<p>Detect video interlacing type.
+</p>
+<p>This filter tries to detect if the input is interlaced or progressive,
+top or bottom field first.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>intl_thres</samp>’</dt>
+<dd><p>Set interlacing threshold.
+</p></dd>
+<dt> ‘<samp>prog_thres</samp>’</dt>
+<dd><p>Set progressive threshold.
+</p></dd>
+</dl>
+
+<a name="il"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-il">9.46 il</a></h2>
+
+<p>Deinterleave or interleave fields.
+</p>
+<p>This filter allows one to process interlaced images fields without
+deinterlacing them. Deinterleaving splits the input frame into 2
+fields (so called half pictures). Odd lines are moved to the top
+half of the output image, even lines to the bottom half.
+You can process (filter) them independently and then re-interleave them.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_mode, l</samp>’</dt>
+<dt> ‘<samp>chroma_mode, c</samp>’</dt>
+<dt> ‘<samp>alpha_mode, a</samp>’</dt>
+<dd><p>Available values for <var>luma_mode</var>, <var>chroma_mode</var> and
+<var>alpha_mode</var> are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing.
+</p>
+</dd>
+<dt> ‘<samp>deinterleave, d</samp>’</dt>
+<dd><p>Deinterleave fields, placing one above the other.
+</p>
+</dd>
+<dt> ‘<samp>interleave, i</samp>’</dt>
+<dd><p>Interleave fields. Reverse the effect of deinterleaving.
+</p></dd>
+</dl>
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_swap, ls</samp>’</dt>
+<dt> ‘<samp>chroma_swap, cs</samp>’</dt>
+<dt> ‘<samp>alpha_swap, as</samp>’</dt>
+<dd><p>Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="interlace"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-interlace">9.47 interlace</a></h2>
+
+<p>Simple interlacing filter from progressive contents. This interleaves upper (or
+lower) lines from odd frames with lower (or upper) lines from even frames,
+halving the frame rate and preserving image height. A vertical lowpass filter
+is always applied in order to avoid twitter effects and reduce moiré patterns.
+</p>
+<table><tr><td> </td><td><pre class="example"> Original Original New Frame
+ Frame 'j' Frame 'j+1' (tff)
+ ========== =========== ==================
+ Line 0 --------------------> Frame 'j' Line 0
+ Line 1 Line 1 ----> Frame 'j+1' Line 1
+ Line 2 ---------------------> Frame 'j' Line 2
+ Line 3 Line 3 ----> Frame 'j+1' Line 3
+ ... ... ...
+New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on
+</pre></td></tr></table>
+
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>scan</samp>’</dt>
+<dd><p>determines whether the interlaced frame is taken from the even (tff - default)
+or odd (bff) lines of the progressive frame.
+</p></dd>
+</dl>
+
+<a name="kerndeint"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-kerndeint">9.48 kerndeint</a></h2>
+
+<p>Deinterlace input video by applying Donald Graft’s adaptive kernel
+deinterling. Work on interlaced parts of a video to produce
+progressive frames.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>thresh</samp>’</dt>
+<dd><p>Set the threshold which affects the filter’s tolerance when
+determining if a pixel line must be processed. It must be an integer
+in the range [0,255] and defaults to 10. A value of 0 will result in
+applying the process on every pixels.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Paint pixels exceeding the threshold value to white if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Set the fields order. Swap fields if set to 1, leave fields alone if
+0. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>sharp</samp>’</dt>
+<dd><p>Enable additional sharpening if set to 1. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>twoway</samp>’</dt>
+<dd><p>Enable twoway sharpening if set to 1. Default is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-26"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-26">9.48.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply default values:
+<table><tr><td> </td><td><pre class="example">kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
+</pre></td></tr></table>
+
+</li><li>
+Enable additional sharpening:
+<table><tr><td> </td><td><pre class="example">kerndeint=sharp=1
+</pre></td></tr></table>
+
+</li><li>
+Paint processed pixels in white:
+<table><tr><td> </td><td><pre class="example">kerndeint=map=1
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="lut3d"></a>
+</p><a name="lut3d-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-lut3d-1">9.49 lut3d</a></h2>
+
+<p>Apply a 3D LUT to an input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>Set the 3D LUT file name.
+</p>
+<p>Currently supported formats:
+</p><dl compact="compact">
+<dt> ‘<samp>3dl</samp>’</dt>
+<dd><p>AfterEffects
+</p></dd>
+<dt> ‘<samp>cube</samp>’</dt>
+<dd><p>Iridas
+</p></dd>
+<dt> ‘<samp>dat</samp>’</dt>
+<dd><p>DaVinci
+</p></dd>
+<dt> ‘<samp>m3d</samp>’</dt>
+<dd><p>Pandora
+</p></dd>
+</dl>
+</dd>
+<dt> ‘<samp>interp</samp>’</dt>
+<dd><p>Select interpolation mode.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nearest</samp>’</dt>
+<dd><p>Use values from the nearest defined point.
+</p></dd>
+<dt> ‘<samp>trilinear</samp>’</dt>
+<dd><p>Interpolate values using the 8 points defining a cube.
+</p></dd>
+<dt> ‘<samp>tetrahedral</samp>’</dt>
+<dd><p>Interpolate values using a tetrahedron.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="lut_002c-lutrgb_002c-lutyuv"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-lut_002c-lutrgb_002c-lutyuv">9.50 lut, lutrgb, lutyuv</a></h2>
+
+<p>Compute a look-up table for binding each pixel component input value
+to an output value, and apply it to input video.
+</p>
+<p><var>lutyuv</var> applies a lookup table to a YUV input video, <var>lutrgb</var>
+to an RGB input video.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>c0</samp>’</dt>
+<dd><p>set first pixel component expression
+</p></dd>
+<dt> ‘<samp>c1</samp>’</dt>
+<dd><p>set second pixel component expression
+</p></dd>
+<dt> ‘<samp>c2</samp>’</dt>
+<dd><p>set third pixel component expression
+</p></dd>
+<dt> ‘<samp>c3</samp>’</dt>
+<dd><p>set fourth pixel component expression, corresponds to the alpha component
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>set red component expression
+</p></dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>set green component expression
+</p></dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>set blue component expression
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>alpha component expression
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>set Y/luminance component expression
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>set U/Cb component expression
+</p></dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>set V/Cr component expression
+</p></dd>
+</dl>
+
+<p>Each of them specifies the expression to use for computing the lookup table for
+the corresponding pixel component values.
+</p>
+<p>The exact component associated to each of the <var>c*</var> options depends on the
+format in input.
+</p>
+<p>The <var>lut</var> filter requires either YUV or RGB pixel formats in input,
+<var>lutrgb</var> requires RGB pixel formats in input, and <var>lutyuv</var> requires YUV.
+</p>
+<p>The expressions can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>val</samp>’</dt>
+<dd><p>input value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>clipval</samp>’</dt>
+<dd><p>the input value clipped in the <var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>maxval</samp>’</dt>
+<dd><p>maximum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>minval</samp>’</dt>
+<dd><p>minimum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>negval</samp>’</dt>
+<dd><p>the negated value for the pixel component value clipped in the
+<var>minval</var>-<var>maxval</var> range , it corresponds to the expression
+"maxval-clipval+minval"
+</p>
+</dd>
+<dt> ‘<samp>clip(val)</samp>’</dt>
+<dd><p>the computed value in <var>val</var> clipped in the
+<var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>gammaval(gamma)</samp>’</dt>
+<dd><p>the computed gamma correction value of the pixel component value
+clipped in the <var>minval</var>-<var>maxval</var> range, corresponds to the
+expression
+"pow((clipval-minval)/(maxval-minval)\,<var>gamma</var>)*(maxval-minval)+minval"
+</p>
+</dd>
+</dl>
+
+<p>All expressions default to "val".
+</p>
+<a name="Examples-4"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-4">9.50.1 Examples</a></h3>
+
+<ul>
+<li>
+Negate input video:
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>The above is the same as:
+</p><table><tr><td> </td><td><pre class="example">lutrgb="r=negval:g=negval:b=negval"
+lutyuv="y=negval:u=negval:v=negval"
+</pre></td></tr></table>
+
+</li><li>
+Negate luminance:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=negval
+</pre></td></tr></table>
+
+</li><li>
+Remove chroma components, turns the video into a graytone image:
+<table><tr><td> </td><td><pre class="example">lutyuv="u=128:v=128"
+</pre></td></tr></table>
+
+</li><li>
+Apply a luma burning effect:
+<table><tr><td> </td><td><pre class="example">lutyuv="y=2*val"
+</pre></td></tr></table>
+
+</li><li>
+Remove green and blue components:
+<table><tr><td> </td><td><pre class="example">lutrgb="g=0:b=0"
+</pre></td></tr></table>
+
+</li><li>
+Set a constant alpha channel value on input:
+<table><tr><td> </td><td><pre class="example">format=rgba,lutrgb=a="maxval-minval/2"
+</pre></td></tr></table>
+
+</li><li>
+Correct luminance gamma by a 0.5 factor:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=gammaval(0.5)
+</pre></td></tr></table>
+
+</li><li>
+Discard least significant bits of luma:
+<table><tr><td> </td><td><pre class="example">lutyuv=y='bitand(val, 128+64+32)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mergeplanes"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-mergeplanes">9.51 mergeplanes</a></h2>
+
+<p>Merge color channel components from several video streams.
+</p>
+<p>The filter accepts up to 4 input streams, and merge selected input
+planes to the output video.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mapping</samp>’</dt>
+<dd><p>Set input to output plane mapping. Default is <code>0</code>.
+</p>
+<p>The mappings is specified as a bitmap. It should be specified as a
+hexadecimal number in the form 0xAa[Bb[Cc[Dd]]]. ’Aa’ describes the
+mapping for the first plane of the output stream. ’A’ sets the number of
+the input stream to use (from 0 to 3), and ’a’ the plane number of the
+corresponding input to use (from 0 to 3). The rest of the mappings is
+similar, ’Bb’ describes the mapping for the output stream second
+plane, ’Cc’ describes the mapping for the output stream third plane and
+’Dd’ describes the mapping for the output stream fourth plane.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set output pixel format. Default is <code>yuva444p</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-56"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-56">9.51.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge three gray video streams of same width and height into single video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1][a2]mergeplanes=0x001020:yuv444p
+</pre></td></tr></table>
+
+</li><li>
+Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1]mergeplanes=0x00010210:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap Y and A plane in yuva444p stream:
+<table><tr><td> </td><td><pre class="example">format=yuva444p,mergeplanes=0x03010200:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap U and V plane in yuv420p stream:
+<table><tr><td> </td><td><pre class="example">format=yuv420p,mergeplanes=0x000201:yuv420p
+</pre></td></tr></table>
+
+</li><li>
+Cast a rgb24 clip to yuv444p:
+<table><tr><td> </td><td><pre class="example">format=rgb24,mergeplanes=0x000102:yuv444p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mcdeint"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-mcdeint">9.52 mcdeint</a></h2>
+
+<p>Apply motion-compensation deinterlacing.
+</p>
+<p>It needs one field per frame as input and must thus be used together
+with yadif=1/3 or equivalent.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the deinterlacing mode.
+</p>
+<p>It accepts one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dt> ‘<samp>medium</samp>’</dt>
+<dt> ‘<samp>slow</samp>’</dt>
+<dd><p>use iterative motion estimation
+</p></dd>
+<dt> ‘<samp>extra_slow</samp>’</dt>
+<dd><p>like ‘<samp>slow</samp>’, but use multiple reference frames.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>fast</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>Set the picture field parity assumed for the input video. It must be
+one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>bff</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Set per-block quantization parameter (QP) used by the internal
+encoder.
+</p>
+<p>Higher values should result in a smoother motion vector field but less
+optimal individual vectors. Default value is 1.
+</p></dd>
+</dl>
+
+<a name="mp"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-mp">9.53 mp</a></h2>
+
+<p>Apply an MPlayer filter to the input video.
+</p>
+<p>This filter provides a wrapper around some of the filters of
+MPlayer/MEncoder.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the parameters:
+<var>filter_name</var>[:=]<var>filter_params</var>
+</p>
+<p><var>filter_name</var> is the name of a supported MPlayer filter,
+<var>filter_params</var> is a string containing the parameters accepted by
+the named filter.
+</p>
+<p>The list of the currently supported filters follows:
+</p><dl compact="compact">
+<dt> <var>eq2</var></dt>
+<dt> <var>eq</var></dt>
+<dt> <var>fspp</var></dt>
+<dt> <var>ilpack</var></dt>
+<dt> <var>pp7</var></dt>
+<dt> <var>softpulldown</var></dt>
+<dt> <var>uspp</var></dt>
+</dl>
+
+<p>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.
+</p>
+<a name="Examples-50"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-50">9.53.1 Examples</a></h3>
+
+<ul>
+<li>
+Adjust gamma, brightness, contrast:
+<table><tr><td> </td><td><pre class="example">mp=eq2=1.0:2:0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p>See also mplayer(1), <a href="http://www.mplayerhq.hu/">http://www.mplayerhq.hu/</a>.
+</p>
+<a name="mpdecimate"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-mpdecimate">9.54 mpdecimate</a></h2>
+
+<p>Drop frames that do not differ greatly from the previous frame in
+order to reduce frame rate.
+</p>
+<p>The main use of this filter is for very-low-bitrate encoding
+(e.g. streaming over dialup modem), but it could in theory be used for
+fixing movies that were inverse-telecined incorrectly.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum number of consecutive frames which can be dropped (if
+positive), or the minimum interval between dropped frames (if
+negative). If the value is 0, the frame is dropped unregarding the
+number of previous sequentially dropped frames.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dt> ‘<samp>lo</samp>’</dt>
+<dt> ‘<samp>frac</samp>’</dt>
+<dd><p>Set the dropping threshold values.
+</p>
+<p>Values for ‘<samp>hi</samp>’ and ‘<samp>lo</samp>’ are for 8x8 pixel blocks and
+represent actual pixel value differences, so a threshold of 64
+corresponds to 1 unit of difference for each pixel, or the same spread
+out differently over the block.
+</p>
+<p>A frame is a candidate for dropping if no 8x8 blocks differ by more
+than a threshold of ‘<samp>hi</samp>’, and if no more than ‘<samp>frac</samp>’ blocks (1
+meaning the whole image) differ by more than a threshold of ‘<samp>lo</samp>’.
+</p>
+<p>Default value for ‘<samp>hi</samp>’ is 64*12, default value for ‘<samp>lo</samp>’ is
+64*5, and default value for ‘<samp>frac</samp>’ is 0.33.
+</p></dd>
+</dl>
+
+
+<a name="negate"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-negate">9.55 negate</a></h2>
+
+<p>Negate input video.
+</p>
+<p>This filter accepts an integer in input, if non-zero it negates the
+alpha component (if available). The default value in input is 0.
+</p>
+<a name="noformat"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-noformat">9.56 noformat</a></h2>
+
+<p>Force libavfilter not to use any of the specified pixel formats for the
+input to the next filter.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-25"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-25">9.56.1 Examples</a></h3>
+
+<ul>
+<li>
+Force libavfilter to use a format different from <var>yuv420p</var> for the
+input to the vflip filter:
+<table><tr><td> </td><td><pre class="example">noformat=pix_fmts=yuv420p,vflip
+</pre></td></tr></table>
+
+</li><li>
+Convert the input video to any of the formats not contained in the list:
+<table><tr><td> </td><td><pre class="example">noformat=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="noise"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-noise">9.57 noise</a></h2>
+
+<p>Add noise on video input frame.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all_seed</samp>’</dt>
+<dt> ‘<samp>c0_seed</samp>’</dt>
+<dt> ‘<samp>c1_seed</samp>’</dt>
+<dt> ‘<samp>c2_seed</samp>’</dt>
+<dt> ‘<samp>c3_seed</samp>’</dt>
+<dd><p>Set noise seed for specific pixel component or all pixel components in case
+of <var>all_seed</var>. Default value is <code>123457</code>.
+</p>
+</dd>
+<dt> ‘<samp>all_strength, alls</samp>’</dt>
+<dt> ‘<samp>c0_strength, c0s</samp>’</dt>
+<dt> ‘<samp>c1_strength, c1s</samp>’</dt>
+<dt> ‘<samp>c2_strength, c2s</samp>’</dt>
+<dt> ‘<samp>c3_strength, c3s</samp>’</dt>
+<dd><p>Set noise strength for specific pixel component or all pixel components in case
+<var>all_strength</var>. Default value is <code>0</code>. Allowed range is [0, 100].
+</p>
+</dd>
+<dt> ‘<samp>all_flags, allf</samp>’</dt>
+<dt> ‘<samp>c0_flags, c0f</samp>’</dt>
+<dt> ‘<samp>c1_flags, c1f</samp>’</dt>
+<dt> ‘<samp>c2_flags, c2f</samp>’</dt>
+<dt> ‘<samp>c3_flags, c3f</samp>’</dt>
+<dd><p>Set pixel component flags or set flags for all components if <var>all_flags</var>.
+Available values for component flags are:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>averaged temporal noise (smoother)
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>mix random noise with a (semi)regular pattern
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>temporal noise (noise pattern changes between frames)
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>uniform noise (gaussian otherwise)
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-53"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-53">9.57.1 Examples</a></h3>
+
+<p>Add temporal and uniform noise to input video:
+</p><table><tr><td> </td><td><pre class="example">noise=alls=20:allf=t+u
+</pre></td></tr></table>
+
+<a name="null"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-null">9.58 null</a></h2>
+
+<p>Pass the video source unchanged to the output.
+</p>
+<a name="ocv"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-ocv">9.59 ocv</a></h2>
+
+<p>Apply video transform using libopencv.
+</p>
+<p>To enable this filter install libopencv library and headers and
+configure FFmpeg with <code>--enable-libopencv</code>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name of the libopencv filter to apply.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>The parameters to pass to the libopencv filter. If not specified the default
+values are assumed.
+</p>
+</dd>
+</dl>
+
+<p>Refer to the official libopencv documentation for more precise
+information:
+<a href="http://opencv.willowgarage.com/documentation/c/image_filtering.html">http://opencv.willowgarage.com/documentation/c/image_filtering.html</a>
+</p>
+<p>Follows the list of supported libopencv filters.
+</p>
+<p><a name="dilate"></a>
+</p><a name="dilate-1"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-dilate-1">9.59.1 dilate</a></h3>
+
+<p>Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvDilate</code>.
+</p>
+<p>It accepts the parameters: <var>struct_el</var>|<var>nb_iterations</var>.
+</p>
+<p><var>struct_el</var> represents a structuring element, and has the syntax:
+<var>cols</var>x<var>rows</var>+<var>anchor_x</var>x<var>anchor_y</var>/<var>shape</var>
+</p>
+<p><var>cols</var> and <var>rows</var> represent the number of columns and rows of
+the structuring element, <var>anchor_x</var> and <var>anchor_y</var> the anchor
+point, and <var>shape</var> the shape for the structuring element, and
+can be one of the values "rect", "cross", "ellipse", "custom".
+</p>
+<p>If the value for <var>shape</var> is "custom", it must be followed by a
+string of the form "=<var>filename</var>". The file with name
+<var>filename</var> is assumed to represent a binary image, with each
+printable character corresponding to a bright pixel. When a custom
+<var>shape</var> is used, <var>cols</var> and <var>rows</var> are ignored, the number
+or columns and rows of the read file are assumed instead.
+</p>
+<p>The default value for <var>struct_el</var> is "3x3+0x0/rect".
+</p>
+<p><var>nb_iterations</var> specifies the number of times the transform is
+applied to the image, and defaults to 1.
+</p>
+<p>Follow some example:
+</p><table><tr><td> </td><td><pre class="example"># use the default values
+ocv=dilate
+
+# dilate using a structuring element with a 5x5 cross, iterate two times
+ocv=filter_name=dilate:filter_params=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=dilate:0x0+2x2/custom=diamond.shape|2
+</pre></td></tr></table>
+
+<a name="erode"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-erode">9.59.2 erode</a></h3>
+
+<p>Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvErode</code>.
+</p>
+<p>The filter accepts the parameters: <var>struct_el</var>:<var>nb_iterations</var>,
+with the same syntax and semantics as the <a href="#dilate">dilate</a> filter.
+</p>
+<a name="smooth"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-smooth">9.59.3 smooth</a></h3>
+
+<p>Smooth the input video.
+</p>
+<p>The filter takes the following parameters:
+<var>type</var>|<var>param1</var>|<var>param2</var>|<var>param3</var>|<var>param4</var>.
+</p>
+<p><var>type</var> 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".
+</p>
+<p><var>param1</var>, <var>param2</var>, <var>param3</var>, and <var>param4</var> are
+parameters whose meanings depend on smooth type. <var>param1</var> and
+<var>param2</var> accept integer positive values or 0, <var>param3</var> and
+<var>param4</var> accept float values.
+</p>
+<p>The default value for <var>param1</var> is 3, the default value for the
+other parameters is 0.
+</p>
+<p>These parameters correspond to the parameters assigned to the
+libopencv function <code>cvSmooth</code>.
+</p>
+<p><a name="overlay"></a>
+</p><a name="overlay-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-overlay-1">9.60 overlay</a></h2>
+
+<p>Overlay one video on top of another.
+</p>
+<p>It takes two inputs and one output, the first input is the "main"
+video on which the second input is overlayed.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Set the expression for the x and y coordinates of the overlayed video
+on the main video. Default value is "0" for both expressions. In case
+the expression is invalid, it is set to a huge value (meaning that the
+overlay will not be displayed within the output visible area).
+</p>
+</dd>
+<dt> ‘<samp>eof_action</samp>’</dt>
+<dd><p>The action to take when EOF is encountered on the secondary input, accepts one
+of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>repeat</samp>’</dt>
+<dd><p>repeat the last frame (the default)
+</p></dd>
+<dt> ‘<samp>endall</samp>’</dt>
+<dd><p>end both streams
+</p></dd>
+<dt> ‘<samp>pass</samp>’</dt>
+<dd><p>pass through the main input
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the expressions for ‘<samp>x</samp>’, and ‘<samp>y</samp>’ are evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>only evaluate expressions once during the filter initialization or
+when a command is processed
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expressions for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>frame</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>If set to 1, force the output to terminate when the shortest input
+terminates. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set the format for the output video.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>yuv420</samp>’</dt>
+<dd><p>force YUV420 output
+</p>
+</dd>
+<dt> ‘<samp>yuv422</samp>’</dt>
+<dd><p>force YUV422 output
+</p>
+</dd>
+<dt> ‘<samp>yuv444</samp>’</dt>
+<dd><p>force YUV444 output
+</p>
+</dd>
+<dt> ‘<samp>rgb</samp>’</dt>
+<dd><p>force RGB output
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>yuv420</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>rgb <em>(deprecated)</em></samp>’</dt>
+<dd><p>If set to 1, force the filter to accept inputs in the RGB
+color space. Default value is 0. This option is deprecated, use
+‘<samp>format</samp>’ instead.
+</p>
+</dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>If set to 1, force the filter to draw the last overlay frame over the
+main input until the end of the stream. A value of 0 disables this
+behavior. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The ‘<samp>x</samp>’, and ‘<samp>y</samp>’ expressions can contain the following
+parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>main_w, W</samp>’</dt>
+<dt> ‘<samp>main_h, H</samp>’</dt>
+<dd><p>main input width and height
+</p>
+</dd>
+<dt> ‘<samp>overlay_w, w</samp>’</dt>
+<dt> ‘<samp>overlay_h, h</samp>’</dt>
+<dd><p>overlay input width and height
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values of the output
+format. For example for the pixel format "yuv422p" <var>hsub</var> is 2 and
+<var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>Note that the <var>n</var>, <var>pos</var>, <var>t</var> variables are available only
+when evaluation is done <em>per frame</em>, and will evaluate to NAN
+when ‘<samp>eval</samp>’ is set to ‘<samp>init</samp>’.
+</p>
+<p>Be aware that frames are taken from each input video in timestamp
+order, hence, if their initial timestamps differ, it is a good idea
+to pass the two inputs through a <var>setpts=PTS-STARTPTS</var> filter to
+have them begin in the same zero timestamp, as it does the example for
+the <var>movie</var> filter.
+</p>
+<p>You can chain together more overlays but you should test the
+efficiency of such approach.
+</p>
+<a name="Commands-2"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands-2">9.60.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Modify the x and y of the overlay input.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-33"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-33">9.60.2 Examples</a></h3>
+
+<ul>
+<li>
+Draw the overlay at 10 pixels from the bottom right corner of the main
+video:
+<table><tr><td> </td><td><pre class="example">overlay=main_w-overlay_w-10:main_h-overlay_h-10
+</pre></td></tr></table>
+
+<p>Using named options the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
+</pre></td></tr></table>
+
+</li><li>
+Insert a transparent PNG logo in the bottom left corner of the input,
+using the <code>ffmpeg</code> tool with the <code>-filter_complex</code> option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Insert 2 different transparent PNG logos (second logo on bottom
+right corner) using the <code>ffmpeg</code> tool:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Add a transparent color layer on top of the main video, <code>WxH</code>
+must specify the size of the main input to the overlay filter:
+<table><tr><td> </td><td><pre class="example">color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
+</pre></td></tr></table>
+
+</li><li>
+Play an original video and a filtered version (here with the deshake
+filter) side by side using the <code>ffplay</code> tool:
+<table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
+</pre></td></tr></table>
+
+<p>The above command is the same as:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
+</pre></td></tr></table>
+
+</li><li>
+Make a sliding overlay appearing from the left to the right top part of the
+screen starting since time 2:
+<table><tr><td> </td><td><pre class="example">overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
+</pre></td></tr></table>
+
+</li><li>
+Compose output by putting two input videos side to side:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i left.avi -i right.avi -filter_complex "
+nullsrc=size=200x100 [background];
+[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
+[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
+[background][left] overlay=shortest=1 [background+left];
+[background+left][right] overlay=shortest=1:x=100 [left+right]
+"
+</pre></td></tr></table>
+
+</li><li>
+mask 10-20 seconds of a video by applying the delogo filter to a section
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
+-vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
+masked.avi
+</pre></td></tr></table>
+
+</li><li>
+Chain several overlays in cascade:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=200x200 [bg];
+testsrc=s=100x100, split=4 [in0][in1][in2][in3];
+[in0] lutrgb=r=0, [bg] overlay=0:0 [mid0];
+[in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1];
+[in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2];
+[in3] null, [mid2] overlay=100:100 [out0]
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="owdenoise"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-owdenoise">9.61 owdenoise</a></h2>
+
+<p>Apply Overcomplete Wavelet denoiser.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>depth</samp>’</dt>
+<dd><p>Set depth.
+</p>
+<p>Larger depth values will denoise lower frequency components more, but
+slow down filtering.
+</p>
+<p>Must be an int in the range 8-16, default is <code>8</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p></dd>
+</dl>
+
+<a name="pad"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-pad">9.62 pad</a></h2>
+
+<p>Add paddings to the input image, and place the original input at the
+given coordinates <var>x</var>, <var>y</var>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Specify an expression for the size of the output image with the
+paddings added. If the value for <var>width</var> or <var>height</var> is 0, the
+corresponding input size is used for the output.
+</p>
+<p>The <var>width</var> expression can reference the value set by the
+<var>height</var> expression, and vice versa.
+</p>
+<p>The default value of <var>width</var> and <var>height</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify an expression for the offsets where to place the input image
+in the padded area with respect to the top/left border of the output
+image.
+</p>
+<p>The <var>x</var> expression can reference the value set by the <var>y</var>
+expression, and vice versa.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the padded area. For the syntax of this option,
+check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>color</var> is "black".
+</p></dd>
+</dl>
+
+<p>The value for the <var>width</var>, <var>height</var>, <var>x</var>, and <var>y</var>
+options are expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>x and y offsets as specified by the <var>x</var> and <var>y</var>
+expressions, or NAN if not yet specified
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-39"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-39">9.62.1 Examples</a></h3>
+
+<ul>
+<li>
+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:
+<table><tr><td> </td><td><pre class="example">pad=640:480:0:40:violet
+</pre></td></tr></table>
+
+<p>The example above is equivalent to the following command:
+</p><table><tr><td> </td><td><pre class="example">pad=width=640:height=480:x=0:y=40:color=violet
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get an output with dimensions increased by 3/2,
+and put the input video at the center of the padded area:
+<table><tr><td> </td><td><pre class="example">pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get a final w/h ratio of 16:9:
+<table><tr><td> </td><td><pre class="example">pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+In case of anamorphic video, in order to set the output display aspect
+correctly, it is necessary to use <var>sar</var> in the expression,
+according to the relation:
+<table><tr><td> </td><td><pre class="example">(ih * X / ih) * sar = output_dar
+X = output_dar / sar
+</pre></td></tr></table>
+
+<p>Thus the previous example needs to be modified to:
+</p><table><tr><td> </td><td><pre class="example">pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Double output size and put the input video in the bottom-right
+corner of the output padded area:
+<table><tr><td> </td><td><pre class="example">pad="2*iw:2*ih:ow-iw:oh-ih"
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perspective"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-perspective">9.63 perspective</a></h2>
+
+<p>Correct perspective of video not recorded perpendicular to the screen.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>x1</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dt> ‘<samp>x2</samp>’</dt>
+<dt> ‘<samp>y2</samp>’</dt>
+<dt> ‘<samp>x3</samp>’</dt>
+<dt> ‘<samp>y3</samp>’</dt>
+<dd><p>Set coordinates expression for top left, top right, bottom left and bottom right corners.
+Default values are <code>0:0:W:0:0:H:W:H</code> with which perspective will remain unchanged.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of video frame.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>interpolation</samp>’</dt>
+<dd><p>Set interpolation for perspective correction.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>linear</samp>’</dt>
+<dt> ‘<samp>cubic</samp>’</dt>
+</dl>
+
+<p>Default value is ‘<samp>linear</samp>’.
+</p></dd>
+</dl>
+
+<a name="phase"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-phase">9.64 phase</a></h2>
+
+<p>Delay interlaced video by one field time so that the field order changes.
+</p>
+<p>The intended use is to fix PAL movies that have been captured with the
+opposite field order to the film-to-video transfer.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set phase mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>Capture field order top-first, transfer bottom-first.
+Filter will delay the bottom field.
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Capture field order bottom-first, transfer top-first.
+Filter will delay the top field.
+</p>
+</dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>Capture and transfer with the same field order. This mode only exists
+for the documentation of the other options to refer to, but if you
+actually select it, the filter will faithfully do nothing.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Capture field order determined automatically by field flags, transfer
+opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ modes on a frame by frame
+basis using field flags. If no field information is available,
+then this works just like ‘<samp>u</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Capture unknown or varying, transfer opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ on a frame by frame basis by
+analyzing the images and selecting the alternative that produces best
+match between the fields.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Capture top-first, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>B</samp>’</dt>
+<dd><p>Capture bottom-first, transfer unknown or varying.
+Filter selects among ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>A</samp>’</dt>
+<dd><p>Capture determined by field flags, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using field flags and
+image analysis. If no field information is available, then this works just
+like ‘<samp>U</samp>’. This is the default mode.
+</p>
+</dd>
+<dt> ‘<samp>U</samp>’</dt>
+<dd><p>Both capture and transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis only.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="pixdesctest"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-pixdesctest">9.65 pixdesctest</a></h2>
+
+<p>Pixel format descriptor test filter, mainly useful for internal
+testing. The output video should be equal to the input video.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">format=monow, pixdesctest
+</pre></td></tr></table>
+
+<p>can be used to test the monowhite pixel format descriptor definition.
+</p>
+<a name="pp"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-pp">9.66 pp</a></h2>
+
+<p>Enable the specified chain of postprocessing subfilters using libpostproc. This
+library should be automatically selected with a GPL build (<code>--enable-gpl</code>).
+Subfilters must be separated by ’/’ and can be disabled by prepending a ’-’.
+Each subfilter and some options have a short and a long name that can be used
+interchangeably, i.e. dr/dering are the same.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>subfilters</samp>’</dt>
+<dd><p>Set postprocessing subfilters string.
+</p></dd>
+</dl>
+
+<p>All subfilters share common options to determine their scope:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a/autoq</samp>’</dt>
+<dd><p>Honor the quality commands for this subfilter.
+</p>
+</dd>
+<dt> ‘<samp>c/chrom</samp>’</dt>
+<dd><p>Do chrominance filtering, too (default).
+</p>
+</dd>
+<dt> ‘<samp>y/nochrom</samp>’</dt>
+<dd><p>Do luminance filtering only (no chrominance).
+</p>
+</dd>
+<dt> ‘<samp>n/noluma</samp>’</dt>
+<dd><p>Do chrominance filtering only (no luminance).
+</p></dd>
+</dl>
+
+<p>These options can be appended after the subfilter name, separated by a ’|’.
+</p>
+<p>Available subfilters are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hb/hdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vb/vdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ha/hadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>va/vadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>The horizontal and vertical deblocking filters share the difference and
+flatness values so you cannot set different horizontal and vertical
+thresholds.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h1/x1hdeblock</samp>’</dt>
+<dd><p>Experimental horizontal deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>v1/x1vdeblock</samp>’</dt>
+<dd><p>Experimental vertical deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>dr/dering</samp>’</dt>
+<dd><p>Deringing filter
+</p>
+</dd>
+<dt> ‘<samp>tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>threshold1</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold2</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold3</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>al/autolevels[:f/fullyrange], automatic brightness / contrast correction</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>f/fullyrange</samp>’</dt>
+<dd><p>Stretch luminance to <code>0-255</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lb/linblenddeint</samp>’</dt>
+<dd><p>Linear blend deinterlacing filter that deinterlaces the given block by
+filtering all lines with a <code>(1 2 1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>li/linipoldeint</samp>’</dt>
+<dd><p>Linear interpolating deinterlacing filter that deinterlaces the given block by
+linearly interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>ci/cubicipoldeint</samp>’</dt>
+<dd><p>Cubic interpolating deinterlacing filter deinterlaces the given block by
+cubically interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>md/mediandeint</samp>’</dt>
+<dd><p>Median deinterlacing filter that deinterlaces the given block by applying a
+median filter to every second line.
+</p>
+</dd>
+<dt> ‘<samp>fd/ffmpegdeint</samp>’</dt>
+<dd><p>FFmpeg deinterlacing filter that deinterlaces the given block by filtering every
+second line with a <code>(-1 4 2 4 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>l5/lowpass5</samp>’</dt>
+<dd><p>Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
+block by filtering all lines with a <code>(-1 2 6 2 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>fq/forceQuant[|quantizer]</samp>’</dt>
+<dd><p>Overrides the quantizer table from the input with the constant quantizer you
+specify.
+</p><dl compact="compact">
+<dt> ‘<samp>quantizer</samp>’</dt>
+<dd><p>Quantizer to use
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>de/default</samp>’</dt>
+<dd><p>Default pp filter combination (<code>hb|a,vb|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>fa/fast</samp>’</dt>
+<dd><p>Fast pp filter combination (<code>h1|a,v1|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>High quality pp filter combination (<code>ha|a|128|7,va|a,dr|a</code>)
+</p></dd>
+</dl>
+
+<a name="Examples-43"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-43">9.66.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply horizontal and vertical deblocking, deringing and automatic
+brightness/contrast:
+<table><tr><td> </td><td><pre class="example">pp=hb/vb/dr/al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters without brightness/contrast correction:
+<table><tr><td> </td><td><pre class="example">pp=de/-al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters and temporal denoiser:
+<table><tr><td> </td><td><pre class="example">pp=default/tmpnoise|1|2|3
+</pre></td></tr></table>
+
+</li><li>
+Apply deblocking on luminance only, and switch vertical deblocking on or off
+automatically depending on available CPU time:
+<table><tr><td> </td><td><pre class="example">pp=hb|y/vb|a
+</pre></td></tr></table>
+</li></ul>
+
+<a name="psnr"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-psnr">9.67 psnr</a></h2>
+
+<p>Obtain the average, maximum and minimum PSNR (Peak Signal to Noise
+Ratio) between two input videos.
+</p>
+<p>This filter takes in input two input videos, the first input is
+considered the "main" source and is passed unchanged to the
+output. The second input is used as a "reference" video for computing
+the PSNR.
+</p>
+<p>Both video inputs must have the same resolution and pixel format for
+this filter to work correctly. Also it assumes that both inputs
+have the same number of frames, which are compared one by one.
+</p>
+<p>The obtained average PSNR is printed through the logging system.
+</p>
+<p>The filter stores the accumulated MSE (mean squared error) of each
+frame, and at the end of the processing it is averaged across all frames
+equally, and the following formula is applied to obtain the PSNR:
+</p>
+<table><tr><td> </td><td><pre class="example">PSNR = 10*log10(MAX^2/MSE)
+</pre></td></tr></table>
+
+<p>Where MAX is the average of the maximum values of each component of the
+image.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>stats_file, f</samp>’</dt>
+<dd><p>If specified the filter will use the named file to save the PSNR of
+each individual frame.
+</p></dd>
+</dl>
+
+<p>The file printed if <var>stats_file</var> is selected, contains a sequence of
+key/value pairs of the form <var>key</var>:<var>value</var> for each compared
+couple of frames.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 1
+</p>
+</dd>
+<dt> ‘<samp>mse_avg</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames, averaged over all the image components.
+</p>
+</dd>
+<dt> ‘<samp>mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames for the component specified by the suffix.
+</p>
+</dd>
+<dt> ‘<samp>psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a</samp>’</dt>
+<dd><p>Peak Signal to Noise ratio of the compared frames for the component
+specified by the suffix.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
+[main][ref] psnr="stats_file=stats.log" [out]
+</pre></td></tr></table>
+
+<p>On this example the input file being processed is compared with the
+reference file ‘<tt>ref_movie.mpg</tt>’. The PSNR of each individual frame
+is stored in ‘<tt>stats.log</tt>’.
+</p>
+<p><a name="pullup"></a>
+</p><a name="pullup-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-pullup-1">9.68 pullup</a></h2>
+
+<p>Pulldown reversal (inverse telecine) filter, capable of handling mixed
+hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive
+content.
+</p>
+<p>The pullup filter is designed to take advantage of future context in making
+its decisions. This filter is stateless in the sense that it does not lock
+onto a pattern to follow, but it instead looks forward to the following
+fields in order to identify matches and rebuild progressive frames.
+</p>
+<p>To produce content with an even framerate, insert the fps filter after
+pullup, use <code>fps=24000/1001</code> if the input frame rate is 29.97fps,
+<code>fps=24</code> for 30fps and the (rare) telecined 25fps input.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>jl</samp>’</dt>
+<dt> ‘<samp>jr</samp>’</dt>
+<dt> ‘<samp>jt</samp>’</dt>
+<dt> ‘<samp>jb</samp>’</dt>
+<dd><p>These options set the amount of "junk" to ignore at the left, right, top, and
+bottom of the image, respectively. Left and right are in units of 8 pixels,
+while top and bottom are in units of 2 lines.
+The default is 8 pixels on each side.
+</p>
+</dd>
+<dt> ‘<samp>sb</samp>’</dt>
+<dd><p>Set the strict breaks. Setting this option to 1 will reduce the chances of
+filter generating an occasional mismatched frame, but it may also cause an
+excessive number of frames to be dropped during high motion sequences.
+Conversely, setting it to -1 will make filter match fields more easily.
+This may help processing of video where there is slight blurring between
+the fields, but may also cause there to be interlaced frames in the output.
+Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mp</samp>’</dt>
+<dd><p>Set the metric plane to use. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>Use luma plane.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Use chroma blue plane.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Use chroma red plane.
+</p></dd>
+</dl>
+
+<p>This option may be set to use chroma plane instead of the default luma plane
+for doing filter’s computations. This may improve accuracy on very clean
+source material, but more likely will decrease accuracy, especially if there
+is chroma noise (rainbow effect) or any grayscale video.
+The main purpose of setting ‘<samp>mp</samp>’ to a chroma plane is to reduce CPU
+load and make pullup usable in realtime on slow machines.
+</p></dd>
+</dl>
+
+<p>For best results (without duplicated frames in the output file) it is
+necessary to change the output frame rate. For example, to inverse
+telecine NTSC input:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf pullup -r 24000/1001 ...
+</pre></td></tr></table>
+
+<a name="removelogo"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-removelogo">9.69 removelogo</a></h2>
+
+<p>Suppress a TV station logo, using an image file to determine which
+pixels comprise the logo. It works by filling in the pixels that
+comprise the logo with neighboring pixels.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filter bitmap file, which can be any image format supported by
+libavformat. The width and height of the image file must match those of the
+video stream being processed.
+</p></dd>
+</dl>
+
+<p>Pixels in the provided bitmap image with a value of zero are not
+considered part of the logo, non-zero pixels are considered part of
+the logo. If you use white (255) for the logo and black (0) for the
+rest, you will be safe. For making the filter bitmap, it is
+recommended to take a screen capture of a black frame with the logo
+visible, and then using a threshold filter followed by the erode
+filter once or twice.
+</p>
+<p>If needed, little splotches can be fixed manually. Remember that if
+logo pixels are not covered, the filter quality will be much
+reduced. Marking too many pixels as part of the logo does not hurt as
+much, but it will increase the amount of blurring needed to cover over
+the image and will destroy more information than necessary, and extra
+pixels will slow things down on a large logo.
+</p>
+<a name="rotate"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-rotate">9.70 rotate</a></h2>
+
+<p>Rotate video by an arbitrary angle expressed in radians.
+</p>
+<p>The filter accepts the following options:
+</p>
+<p>A description of the optional parameters follows.
+</p><dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set an expression for the angle by which to rotate the input video
+clockwise, expressed as a number of radians. A negative value will
+result in a counter-clockwise rotation. By default it is set to "0".
+</p>
+<p>This expression is evaluated for each frame.
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dd><p>Set the output width expression, default value is "iw".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>Set the output height expression, default value is "ih".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Enable bilinear interpolation if set to 1, a value of 0 disables
+it. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>fillcolor, c</samp>’</dt>
+<dd><p>Set the color used to fill the output area not covered by the rotated
+image. For the generalsyntax of this option, check the "Color" section in the
+ffmpeg-utils manual. If the special value "none" is selected then no
+background is printed (useful for example if the background is never shown).
+</p>
+<p>Default value is "black".
+</p></dd>
+</dl>
+
+<p>The expressions for the angle and the output size can contain the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0. It is always NAN
+before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time in seconds of the input frame, it is set to 0 when the filter is
+configured. It is always NAN before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>rotw(a)</samp>’</dt>
+<dt> ‘<samp>roth(a)</samp>’</dt>
+<dd><p>the minimal width/height required for completely containing the input
+video rotated by <var>a</var> radians.
+</p>
+<p>These are only available when computing the ‘<samp>out_w</samp>’ and
+‘<samp>out_h</samp>’ expressions.
+</p></dd>
+</dl>
+
+<a name="Examples-62"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-62">9.70.1 Examples</a></h3>
+
+<ul>
+<li>
+Rotate the input by PI/6 radians clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by PI/6 radians counter-clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=-PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by 45 degrees clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=45*PI/180
+</pre></td></tr></table>
+
+</li><li>
+Apply a constant rotation with period T, starting from an angle of PI/3:
+<table><tr><td> </td><td><pre class="example">rotate=PI/3+2*PI*t/T
+</pre></td></tr></table>
+
+</li><li>
+Make the input video rotation oscillating with a period of T
+seconds and an amplitude of A radians:
+<table><tr><td> </td><td><pre class="example">rotate=A*sin(2*PI/T*t)
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, output size is chosen so that the whole rotating
+input video is always completely contained in the output:
+<table><tr><td> </td><td><pre class="example">rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, reduce the output size so that no background is ever
+shown:
+<table><tr><td> </td><td><pre class="example">rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands-4"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands-4">9.70.2 Commands</a></h3>
+
+<p>The filter supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a, angle</samp>’</dt>
+<dd><p>Set the angle expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="sab"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-sab">9.71 sab</a></h2>
+
+<p>Apply Shape Adaptive Blur.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set luma blur filter strength, must be a value in range 0.1-4.0, default
+value is 1.0. A greater value will result in a more blurred image, and
+in slower processing.
+</p>
+</dd>
+<dt> ‘<samp>luma_pre_filter_radius, lpfr</samp>’</dt>
+<dd><p>Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default
+value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma maximum difference between pixels to still be considered, must
+be a value in the 0.1-100.0 range, default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set chroma blur filter strength, must be a value in range 0.1-4.0. A
+greater value will result in a more blurred image, and in slower
+processing.
+</p>
+</dd>
+<dt> ‘<samp>chroma_pre_filter_radius, cpfr</samp>’</dt>
+<dd><p>Set chroma pre-filter radius, must be a value in the 0.1-2.0 range.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma maximum difference between pixels to still be considered,
+must be a value in the 0.1-100.0 range.
+</p></dd>
+</dl>
+
+<p>Each chroma option value, if not explicitly specified, is set to the
+corresponding luma option value.
+</p>
+<p><a name="scale"></a>
+</p><a name="scale-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-scale-1">9.72 scale</a></h2>
+
+<p>Scale (resize) the input video, using the libswscale library.
+</p>
+<p>The scale filter forces the output display aspect ratio to be the same
+of the input, by changing the output sample aspect ratio.
+</p>
+<p>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.
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Options-1">9.72.1 Options</a></h3>
+<p>The filter accepts the following options, or any of the options
+supported by the libswscale scaler.
+</p>
+<p>See <a href="ffmpeg-scaler.html#scaler_005foptions">(ffmpeg-scaler)scaler_options</a> for
+the complete list of scaler options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Set the output video dimension expression. Default value is the input
+dimension.
+</p>
+<p>If the value is 0, the input width is used for the output.
+</p>
+<p>If one of the values is -1, the scale filter will use a value that
+maintains the aspect ratio of the input image, calculated from the
+other specified dimension. If both of them are -1, the input size is
+used
+</p>
+<p>If one of the values is -n with n > 1, the scale filter will also use a value
+that maintains the aspect ratio of the input image, calculated from the other
+specified dimension. After that it will, however, make sure that the calculated
+dimension is divisible by n and adjust the value if necessary.
+</p>
+<p>See below for the list of accepted constants for use in the dimension
+expression.
+</p>
+</dd>
+<dt> ‘<samp>interl</samp>’</dt>
+<dd><p>Set the interlacing mode. It accepts the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Force interlaced aware scaling.
+</p>
+</dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>Do not apply interlaced scaling.
+</p>
+</dd>
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>Select interlaced aware scaling depending on whether the source frames
+are flagged as interlaced or not.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>0</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set libswscale scaling flags. See
+<a href="ffmpeg-scaler.html#sws_005fflags">(ffmpeg-scaler)sws_flags</a> for the
+complete list of values. If not explicitly specified the filter applies
+the default flags.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>in_color_matrix</samp>’</dt>
+<dt> ‘<samp>out_color_matrix</samp>’</dt>
+<dd><p>Set in/output YCbCr color space type.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder.
+</p>
+<p>If not specified, the color space type depends on the pixel format.
+</p>
+<p>Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>Format conforming to International Telecommunication Union (ITU)
+Recommendation BT.709.
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>Set color space conforming to the United States Federal Communications
+Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a).
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>Set color space conforming to:
+</p>
+<ul>
+<li>
+ITU Radiocommunication Sector (ITU-R) Recommendation BT.601
+
+</li><li>
+ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G
+
+</li><li>
+Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004
+
+</li></ul>
+
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>Set color space conforming to SMPTE ST 240:1999.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>in_range</samp>’</dt>
+<dt> ‘<samp>out_range</samp>’</dt>
+<dd><p>Set in/output YCbCr sample range.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder. If not specified, the
+range depends on the pixel format. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>jpeg/full/pc</samp>’</dt>
+<dd><p>Set full range (0-255 in case of 8-bit luma).
+</p>
+</dd>
+<dt> ‘<samp>mpeg/tv</samp>’</dt>
+<dd><p>Set "MPEG" range (16-235 in case of 8-bit luma).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>force_original_aspect_ratio</samp>’</dt>
+<dd><p>Enable decreasing or increasing output video width or height if necessary to
+keep the original aspect ratio. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>disable</samp>’</dt>
+<dd><p>Scale the video as specified and disable this feature.
+</p>
+</dd>
+<dt> ‘<samp>decrease</samp>’</dt>
+<dd><p>The output video dimensions will automatically be decreased if needed.
+</p>
+</dd>
+<dt> ‘<samp>increase</samp>’</dt>
+<dd><p>The output video dimensions will automatically be increased if needed.
+</p>
+</dd>
+</dl>
+
+<p>One useful instance of this option is that when you know a specific device’s
+maximum allowed resolution, you can use this to limit the output video to
+that, while retaining the aspect ratio. For example, device A allows
+1280x720 playback, and your video is 1920x800. Using this option (set it to
+decrease) and specifying 1280x720 to the command line makes the output
+1280x533.
+</p>
+<p>Please note that this is a different thing than specifying -1 for ‘<samp>w</samp>’
+or ‘<samp>h</samp>’, you still need to specify the output resolution for this option
+to work.
+</p>
+</dd>
+</dl>
+
+<p>The values of the ‘<samp>w</samp>’ and ‘<samp>h</samp>’ options are expressions
+containing the following constants:
+</p>
+<dl compact="compact">
+<dt> <var>in_w</var></dt>
+<dt> <var>in_h</var></dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> <var>iw</var></dt>
+<dt> <var>ih</var></dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> <var>out_w</var></dt>
+<dt> <var>out_h</var></dt>
+<dd><p>the output (scaled) width and height
+</p>
+</dd>
+<dt> <var>ow</var></dt>
+<dt> <var>oh</var></dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> <var>a</var></dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> <var>sar</var></dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> <var>dar</var></dt>
+<dd><p>input display aspect ratio. Calculated from <code>(iw / ih) * sar</code>.
+</p>
+</dd>
+<dt> <var>hsub</var></dt>
+<dt> <var>vsub</var></dt>
+<dd><p>horizontal and vertical input chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> <var>ohsub</var></dt>
+<dt> <var>ovsub</var></dt>
+<dd><p>horizontal and vertical output chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-24"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-24">9.72.2 Examples</a></h3>
+
+<ul>
+<li>
+Scale the input video to a size of 200x100:
+<table><tr><td> </td><td><pre class="example">scale=w=200:h=100
+</pre></td></tr></table>
+
+<p>This is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">scale=200:100
+</pre></td></tr></table>
+
+<p>or:
+</p><table><tr><td> </td><td><pre class="example">scale=200x100
+</pre></td></tr></table>
+
+</li><li>
+Specify a size abbreviation for the output size:
+<table><tr><td> </td><td><pre class="example">scale=qcif
+</pre></td></tr></table>
+
+<p>which can also be written as:
+</p><table><tr><td> </td><td><pre class="example">scale=size=qcif
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x:
+<table><tr><td> </td><td><pre class="example">scale=w=2*iw:h=2*ih
+</pre></td></tr></table>
+
+</li><li>
+The above is the same as:
+<table><tr><td> </td><td><pre class="example">scale=2*in_w:2*in_h
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x with forced interlaced scaling:
+<table><tr><td> </td><td><pre class="example">scale=2*iw:2*ih:interl=1
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to half size:
+<table><tr><td> </td><td><pre class="example">scale=w=iw/2:h=ih/2
+</pre></td></tr></table>
+
+</li><li>
+Increase the width, and set the height to the same size:
+<table><tr><td> </td><td><pre class="example">scale=3/2*iw:ow
+</pre></td></tr></table>
+
+</li><li>
+Seek for Greek harmony:
+<table><tr><td> </td><td><pre class="example">scale=iw:1/PHI*iw
+scale=ih*PHI:ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the height, and set the width to 3/2 of the height:
+<table><tr><td> </td><td><pre class="example">scale=w=3/2*oh:h=3/5*ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the size, but make the size a multiple of the chroma
+subsample values:
+<table><tr><td> </td><td><pre class="example">scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
+</pre></td></tr></table>
+
+</li><li>
+Increase the width to a maximum of 500 pixels, keep the same input
+aspect ratio:
+<table><tr><td> </td><td><pre class="example">scale=w='min(500\, iw*3/2):h=-1'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="separatefields"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-separatefields">9.73 separatefields</a></h2>
+
+<p>The <code>separatefields</code> takes a frame-based video input and splits
+each frame into its components fields, producing a new half height clip
+with twice the frame rate and twice the frame count.
+</p>
+<p>This filter use field-dominance information in frame to decide which
+of each pair of fields to place first in the output.
+If it gets it wrong use <a href="#setfield">setfield</a> filter before <code>separatefields</code> filter.
+</p>
+<a name="setdar_002c-setsar"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-setdar_002c-setsar">9.74 setdar, setsar</a></h2>
+
+<p>The <code>setdar</code> filter sets the Display Aspect Ratio for the filter
+output video.
+</p>
+<p>This is done by changing the specified Sample (aka Pixel) Aspect
+Ratio, according to the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>DAR</var> = <var>HORIZONTAL_RESOLUTION</var> / <var>VERTICAL_RESOLUTION</var> * <var>SAR</var>
+</pre></td></tr></table>
+
+<p>Keep in mind that the <code>setdar</code> 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.
+</p>
+<p>The <code>setsar</code> filter sets the Sample (aka Pixel) Aspect Ratio for
+the filter output video.
+</p>
+<p>Note that as a consequence of the application of this filter, the
+output display aspect ratio will change according to the equation
+above.
+</p>
+<p>Keep in mind that the sample aspect ratio set by the <code>setsar</code>
+filter may be changed by later filters in the filterchain, e.g. if
+another "setsar" or a "setdar" filter is applied.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>r, ratio, dar (<code>setdar</code> only), sar (<code>setsar</code> only)</samp>’</dt>
+<dd><p>Set the aspect ratio used by the filter.
+</p>
+<p>The parameter can be a floating point number string, an expression, or
+a string of the form <var>num</var>:<var>den</var>, where <var>num</var> and
+<var>den</var> are the numerator and denominator of the aspect ratio. If
+the parameter is not specified, it is assumed the value "0".
+In case the form "<var>num</var>:<var>den</var>" is used, the <code>:</code> character
+should be escaped.
+</p>
+</dd>
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum integer value to use for expressing numerator and
+denominator when reducing the expressed aspect ratio to a rational.
+Default value is <code>100</code>.
+</p>
+</dd>
+</dl>
+
+<p>The parameter <var>sar</var> is an expression containing
+the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>E, PI, PHI</samp>’</dt>
+<dd><p>the corresponding mathematical approximated values for e
+(euler number), pi (greek PI), phi (golden ratio)
+</p>
+</dd>
+<dt> ‘<samp>w, h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>w</var> / <var>h</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub, vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-66"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-66">9.74.1 Examples</a></h3>
+
+<ul>
+<li>
+To change the display aspect ratio to 16:9, specify one of the following:
+<table><tr><td> </td><td><pre class="example">setdar=dar=1.77777
+setdar=dar=16/9
+setdar=dar=1.77777
+</pre></td></tr></table>
+
+</li><li>
+To change the sample aspect ratio to 10:11, specify:
+<table><tr><td> </td><td><pre class="example">setsar=sar=10/11
+</pre></td></tr></table>
+
+</li><li>
+To set a display aspect ratio of 16:9, and specify a maximum integer value of
+1000 in the aspect ratio reduction, use the command:
+<table><tr><td> </td><td><pre class="example">setdar=ratio=16/9:max=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="setfield"></a>
+</p><a name="setfield-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-setfield-1">9.75 setfield</a></h2>
+
+<p>Force field for the output video frame.
+</p>
+<p>The <code>setfield</code> filter marks the interlace type field for the
+output frames. It does not change the input frame, but only sets the
+corresponding property, which affects how the frame is treated by
+following filters (e.g. <code>fieldorder</code> or <code>yadif</code>).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Keep the same field property.
+</p>
+</dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Mark the frame as bottom-field-first.
+</p>
+</dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Mark the frame as top-field-first.
+</p>
+</dd>
+<dt> ‘<samp>prog</samp>’</dt>
+<dd><p>Mark the frame as progressive.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="showinfo"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-showinfo">9.76 showinfo</a></h2>
+
+<p>Show a line containing various information for each input video frame.
+The input video is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+time base units. The time base unit depends on the filter input pad.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>pixel format name
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>sample aspect ratio of the input frame, expressed in the form
+<var>num</var>/<var>den</var>
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>size of the input frame. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>i</samp>’</dt>
+<dd><p>interlaced mode ("P" for "progressive", "T" for top field first, "B"
+for bottom field first)
+</p>
+</dd>
+<dt> ‘<samp>iskey</samp>’</dt>
+<dd><p>1 if the frame is a key frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>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 <code>AVPictureType</code> enum and of
+the <code>av_get_picture_type_char</code> function defined in
+‘<tt>libavutil/avutil.h</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame
+</p>
+</dd>
+<dt> ‘<samp>plane_checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of each plane of the input frame,
+expressed in the form "[<var>c0</var> <var>c1</var> <var>c2</var> <var>c3</var>]"
+</p></dd>
+</dl>
+
+<p><a name="smartblur"></a>
+</p><a name="smartblur-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-smartblur-1">9.77 smartblur</a></h2>
+
+<p>Blur the input video without impacting the outlines.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set the luma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set the luma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_threshold, lt</samp>’</dt>
+<dd><p>Set the luma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set the chroma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set the chroma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_threshold, ct</samp>’</dt>
+<dd><p>Set the chroma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p></dd>
+</dl>
+
+<p>If a chroma option is not explicitly set, the corresponding luma value
+is set.
+</p>
+<a name="stereo3d"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-stereo3d">9.78 stereo3d</a></h2>
+
+<p>Convert between different stereoscopic image formats.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in</samp>’</dt>
+<dd><p>Set stereoscopic image format of input.
+</p>
+<p>Available values for input image formats are:
+</p><dl compact="compact">
+<dt> ‘<samp>sbsl</samp>’</dt>
+<dd><p>side by side parallel (left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbsr</samp>’</dt>
+<dd><p>side by side crosseye (right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2l</samp>’</dt>
+<dd><p>side by side parallel with half width resolution
+(left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2r</samp>’</dt>
+<dd><p>side by side crosseye with half width resolution
+(right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>abl</samp>’</dt>
+<dd><p>above-below (left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>abr</samp>’</dt>
+<dd><p>above-below (right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2l</samp>’</dt>
+<dd><p>above-below with half height resolution
+(left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2r</samp>’</dt>
+<dd><p>above-below with half height resolution
+(right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>al</samp>’</dt>
+<dd><p>alternating frames (left eye first, right eye second)
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dd><p>alternating frames (right eye first, left eye second)
+</p>
+<p>Default value is ‘<samp>sbsl</samp>’.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>out</samp>’</dt>
+<dd><p>Set stereoscopic image format of output.
+</p>
+<p>Available values for output image formats are all the input formats as well as:
+</p><dl compact="compact">
+<dt> ‘<samp>arbg</samp>’</dt>
+<dd><p>anaglyph red/blue gray
+(red filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>argg</samp>’</dt>
+<dd><p>anaglyph red/green gray
+(red filter on left eye, green filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcg</samp>’</dt>
+<dd><p>anaglyph red/cyan gray
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arch</samp>’</dt>
+<dd><p>anaglyph red/cyan half colored
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcc</samp>’</dt>
+<dd><p>anaglyph red/cyan color
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcd</samp>’</dt>
+<dd><p>anaglyph red/cyan color optimized with the least squares projection of dubois
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmg</samp>’</dt>
+<dd><p>anaglyph green/magenta gray
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmh</samp>’</dt>
+<dd><p>anaglyph green/magenta half colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmc</samp>’</dt>
+<dd><p>anaglyph green/magenta colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmd</samp>’</dt>
+<dd><p>anaglyph green/magenta color optimized with the least squares projection of dubois
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybg</samp>’</dt>
+<dd><p>anaglyph yellow/blue gray
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybh</samp>’</dt>
+<dd><p>anaglyph yellow/blue half colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybc</samp>’</dt>
+<dd><p>anaglyph yellow/blue colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybd</samp>’</dt>
+<dd><p>anaglyph yellow/blue color optimized with the least squares projection of dubois
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>irl</samp>’</dt>
+<dd><p>interleaved rows (left eye has top row, right eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>irr</samp>’</dt>
+<dd><p>interleaved rows (right eye has top row, left eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>ml</samp>’</dt>
+<dd><p>mono output (left eye only)
+</p>
+</dd>
+<dt> ‘<samp>mr</samp>’</dt>
+<dd><p>mono output (right eye only)
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>arcd</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-16"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-16">9.78.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input video from side by side parallel to anaglyph yellow/blue dubois:
+<table><tr><td> </td><td><pre class="example">stereo3d=sbsl:aybd
+</pre></td></tr></table>
+
+</li><li>
+Convert input video from above bellow (left eye above, right eye below) to side by side crosseye.
+<table><tr><td> </td><td><pre class="example">stereo3d=abl:sbsr
+</pre></td></tr></table>
+</li></ul>
+
+<a name="spp"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-spp">9.79 spp</a></h2>
+
+<p>Apply a simple postprocessing filter that compresses and decompresses the image
+at several (or - in the case of ‘<samp>quality</samp>’ level <code>6</code> - all) shifts
+and average the results.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>quality</samp>’</dt>
+<dd><p>Set quality. This option defines the number of levels for averaging. It accepts
+an integer in the range 0-6. If set to <code>0</code>, the filter will have no
+effect. A value of <code>6</code> means the higher quality. For each increment of
+that value the speed drops by a factor of approximately 2. Default value is
+<code>3</code>.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Force a constant quantization parameter. If not set, the filter will use the QP
+from the video stream (if available).
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set thresholding mode. Available modes are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hard</samp>’</dt>
+<dd><p>Set hard thresholding (default).
+</p></dd>
+<dt> ‘<samp>soft</samp>’</dt>
+<dd><p>Set soft thresholding (better de-ringing effect, but likely blurrier).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_bframe_qp</samp>’</dt>
+<dd><p>Enable the use of the QP from the B-Frames if set to <code>1</code>. Using this
+option may cause flicker since the B-Frames have often larger QP. Default is
+<code>0</code> (not enabled).
+</p></dd>
+</dl>
+
+<p><a name="subtitles"></a>
+</p><a name="subtitles-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-subtitles-1">9.80 subtitles</a></h2>
+
+<p>Draw subtitles on top of input video using the libass library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libass</code>. This filter also requires a build with libavcodec and
+libavformat to convert the passed subtitles file to ASS (Advanced Substation
+Alpha) subtitles format.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the subtitle file to read. It must be specified.
+</p>
+</dd>
+<dt> ‘<samp>original_size</samp>’</dt>
+<dd><p>Specify the size of the original video, the video for which the ASS file
+was composed. For the syntax of this option, check the "Video size" section in
+the ffmpeg-utils manual. Due to a misdesign in ASS aspect ratio arithmetic,
+this is necessary to correctly scale the fonts if the aspect ratio has been
+changed.
+</p>
+</dd>
+<dt> ‘<samp>charenc</samp>’</dt>
+<dd><p>Set subtitles input character encoding. <code>subtitles</code> filter only. Only
+useful if not UTF-8.
+</p></dd>
+</dl>
+
+<p>If the first key is not specified, it is assumed that the first value
+specifies the ‘<samp>filename</samp>’.
+</p>
+<p>For example, to render the file ‘<tt>sub.srt</tt>’ on top of the input
+video, use the command:
+</p><table><tr><td> </td><td><pre class="example">subtitles=sub.srt
+</pre></td></tr></table>
+
+<p>which is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">subtitles=filename=sub.srt
+</pre></td></tr></table>
+
+<a name="super2xsai"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-super2xsai">9.81 super2xsai</a></h2>
+
+<p>Scale the input by 2x and smooth using the Super2xSaI (Scale and
+Interpolate) pixel art scaling algorithm.
+</p>
+<p>Useful for enlarging pixel art images without reducing sharpness.
+</p>
+<a name="swapuv"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-swapuv">9.82 swapuv</a></h2>
+<p>Swap U & V plane.
+</p>
+<a name="telecine"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-telecine">9.83 telecine</a></h2>
+
+<p>Apply telecine process to the video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>first_field</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>top, t</samp>’</dt>
+<dd><p>top field first
+</p></dd>
+<dt> ‘<samp>bottom, b</samp>’</dt>
+<dd><p>bottom field first
+The default value is <code>top</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>pattern</samp>’</dt>
+<dd><p>A string of numbers representing the pulldown pattern you wish to apply.
+The default value is <code>23</code>.
+</p></dd>
+</dl>
+
+<table><tr><td> </td><td><pre class="example">Some typical patterns:
+
+NTSC output (30i):
+27.5p: 32222
+24p: 23 (classic)
+24p: 2332 (preferred)
+20p: 33
+18p: 334
+16p: 3444
+
+PAL output (25i):
+27.5p: 12222
+24p: 222222222223 ("Euro pulldown")
+16.67p: 33
+16p: 33333334
+</pre></td></tr></table>
+
+<a name="thumbnail"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-thumbnail">9.84 thumbnail</a></h2>
+<p>Select the most representative frame in a given sequence of consecutive frames.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the frames batch size to analyze; in a set of <var>n</var> frames, the filter
+will pick one of them, and then handle the next batch of <var>n</var> frames until
+the end. Default is <code>100</code>.
+</p></dd>
+</dl>
+
+<p>Since the filter keeps track of the whole frames sequence, a bigger <var>n</var>
+value will result in a higher memory usage, so a high value is not recommended.
+</p>
+<a name="Examples-51"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-51">9.84.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract one picture each 50 frames:
+<table><tr><td> </td><td><pre class="example">thumbnail=50
+</pre></td></tr></table>
+
+</li><li>
+Complete example of a thumbnail creation with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tile"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-tile">9.85 tile</a></h2>
+
+<p>Tile several successive frames together.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>layout</samp>’</dt>
+<dd><p>Set the grid size (i.e. the number of lines and columns). For the syntax of
+this option, check the "Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames</samp>’</dt>
+<dd><p>Set the maximum number of frames to render in the given area. It must be less
+than or equal to <var>w</var>x<var>h</var>. The default value is <code>0</code>, meaning all
+the area will be used.
+</p>
+</dd>
+<dt> ‘<samp>margin</samp>’</dt>
+<dd><p>Set the outer border margin in pixels.
+</p>
+</dd>
+<dt> ‘<samp>padding</samp>’</dt>
+<dd><p>Set the inner border thickness (i.e. the number of pixels between frames). For
+more advanced padding options (such as having different values for the edges),
+refer to the pad video filter.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the unused areaFor the syntax of this option, check the
+"Color" section in the ffmpeg-utils manual. The default value of <var>color</var>
+is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-2">9.85.1 Examples</a></h3>
+
+<ul>
+<li>
+Produce 8x8 PNG tiles of all keyframes (‘<samp>-skip_frame nokey</samp>’) in a movie:
+<table><tr><td> </td><td><pre class="example">ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
+</pre></td></tr></table>
+<p>The ‘<samp>-vsync 0</samp>’ is necessary to prevent <code>ffmpeg</code> from
+duplicating each output frame to accommodate the originally detected frame
+rate.
+</p>
+</li><li>
+Display <code>5</code> pictures in an area of <code>3x2</code> frames,
+with <code>7</code> pixels between them, and <code>2</code> pixels of initial margin, using
+mixed flat and named options:
+<table><tr><td> </td><td><pre class="example">tile=3x2:nb_frames=5:padding=7:margin=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tinterlace"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-tinterlace">9.86 tinterlace</a></h2>
+
+<p>Perform various types of temporal field interlacing.
+</p>
+<p>Frames are counted starting from 1, so the first input frame is
+considered odd.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify the mode of the interlacing. This option can also be specified
+as a value alone. See below for a list of values for this option.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>merge, 0</samp>’</dt>
+<dd><p>Move odd frames into the upper field, even into the lower field,
+generating a double height frame at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_odd, 1</samp>’</dt>
+<dd><p>Only output even frames, odd frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_even, 2</samp>’</dt>
+<dd><p>Only output odd frames, even frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>pad, 3</samp>’</dt>
+<dd><p>Expand each frame to full height, but pad alternate lines with black,
+generating a frame with double height at the same input frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_top, 4</samp>’</dt>
+<dd><p>Interleave the upper field from odd frames with the lower field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_bottom, 5</samp>’</dt>
+<dd><p>Interleave the lower field from odd frames with the upper field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interlacex2, 6</samp>’</dt>
+<dd><p>Double frame rate with unchanged height. Frames are inserted each
+containing the second temporal field from the previous input frame and
+the first temporal field from the next input frame. This mode relies on
+the top_field_first flag. Useful for interlaced video displays with no
+field synchronisation.
+</p></dd>
+</dl>
+
+<p>Numeric values are deprecated but are accepted for backward
+compatibility reasons.
+</p>
+<p>Default mode is <code>merge</code>.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Specify flags influencing the filter process.
+</p>
+<p>Available value for <var>flags</var> is:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low_pass_filter, vlfp</samp>’</dt>
+<dd><p>Enable vertical low-pass filtering in the filter.
+Vertical low-pass filtering is required when creating an interlaced
+destination from a progressive source which contains high-frequency
+vertical detail. Filtering will reduce interlace ’twitter’ and Moire
+patterning.
+</p>
+<p>Vertical low-pass filtering can only be enabled for ‘<samp>mode</samp>’
+<var>interleave_top</var> and <var>interleave_bottom</var>.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<a name="transpose"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-transpose">9.87 transpose</a></h2>
+
+<p>Transpose rows with columns in the input video and optionally flip it.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dir</samp>’</dt>
+<dd><p>Specify the transposition direction.
+</p>
+<p>Can assume the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>0, 4, cclock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise and vertically flip (default), that is:
+</p><table><tr><td> </td><td><pre class="example">L.R L.l
+. . -> . .
+l.r R.r
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>1, 5, clock</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R l.L
+. . -> . .
+l.r r.R
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>2, 6, cclock</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R R.r
+. . -> . .
+l.r L.l
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>3, 7, clock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise and vertically flip, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R r.R
+. . -> . .
+l.r l.L
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>For values between 4-7, the transposition is only done if the input
+video geometry is portrait and not landscape. These values are
+deprecated, the <code>passthrough</code> option should be used instead.
+</p>
+<p>Numerical values are deprecated, and should be dropped in favor of
+symbolic constants.
+</p>
+</dd>
+<dt> ‘<samp>passthrough</samp>’</dt>
+<dd><p>Do not apply the transposition if the input geometry matches the one
+specified by the specified value. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Always apply transposition.
+</p></dd>
+<dt> ‘<samp>portrait</samp>’</dt>
+<dd><p>Preserve portrait geometry (when <var>height</var> >= <var>width</var>).
+</p></dd>
+<dt> ‘<samp>landscape</samp>’</dt>
+<dd><p>Preserve landscape geometry (when <var>width</var> >= <var>height</var>).
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p></dd>
+</dl>
+
+<p>For example to rotate by 90 degrees clockwise and preserve portrait
+layout:
+</p><table><tr><td> </td><td><pre class="example">transpose=dir=1:passthrough=portrait
+</pre></td></tr></table>
+
+<p>The command above can also be specified as:
+</p><table><tr><td> </td><td><pre class="example">transpose=1:portrait
+</pre></td></tr></table>
+
+<a name="trim"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-trim">9.88 trim</a></h2>
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the frame with the
+timestamp <var>start</var> will be the first frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first frame that will be dropped, i.e. the frame
+immediately preceding the one with the timestamp <var>end</var> will be the last
+frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in timebase
+units instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in timebase units
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _frame variants simply count the
+frames that pass through the filter. Also note that this filter does not modify
+the timestamps. If you wish that the output timestamps start at zero, insert a
+setpts filter after the trim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all the frames that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple trim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first second
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=duration=1
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="unsharp"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-unsharp">9.89 unsharp</a></h2>
+
+<p>Sharpen or blur the input video.
+</p>
+<p>It accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_msize_x, lx</samp>’</dt>
+<dd><p>Set the luma matrix horizontal size. It must be an odd integer between
+3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_msize_y, ly</samp>’</dt>
+<dd><p>Set the luma matrix vertical size. It must be an odd integer between 3
+and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_amount, la</samp>’</dt>
+<dd><p>Set the luma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_x, cx</samp>’</dt>
+<dd><p>Set the chroma matrix horizontal size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_y, cy</samp>’</dt>
+<dd><p>Set the chroma matrix vertical size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_amount, ca</samp>’</dt>
+<dd><p>Set the chroma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 0.0.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<p>All parameters are optional and default to the equivalent of the
+string ’5:5:1.0:5:5:0.0’.
+</p>
+<a name="Examples-19"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-19">9.89.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply strong luma sharpen effect:
+<table><tr><td> </td><td><pre class="example">unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
+</pre></td></tr></table>
+
+</li><li>
+Apply strong blur of both luma and chroma parameters:
+<table><tr><td> </td><td><pre class="example">unsharp=7:7:-2:7:7:-2
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabdetect"></a>
+</p><a name="vidstabdetect-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-vidstabdetect-1">9.90 vidstabdetect</a></h2>
+
+<p>Analyze video stabilization/deshaking. Perform pass 1 of 2, see
+<a href="#vidstabtransform">vidstabtransform</a> for pass 2.
+</p>
+<p>This filter generates a file with relative translation and rotation
+transform information about subsequent frames, which is then used by
+the <a href="#vidstabtransform">vidstabtransform</a> filter.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>result</samp>’</dt>
+<dd><p>Set the path to the file used to write the transforms information.
+Default value is ‘<tt>transforms.trf</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>shakiness</samp>’</dt>
+<dd><p>Set how shaky the video is and how quick the camera is. It accepts an
+integer in the range 1-10, a value of 1 means little shakiness, a
+value of 10 means strong shakiness. Default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>accuracy</samp>’</dt>
+<dd><p>Set the accuracy of the detection process. It must be a value in the
+range 1-15. A value of 1 means low accuracy, a value of 15 means high
+accuracy. Default value is 15.
+</p>
+</dd>
+<dt> ‘<samp>stepsize</samp>’</dt>
+<dd><p>Set stepsize of the search process. The region around minimum is
+scanned with 1 pixel resolution. Default value is 6.
+</p>
+</dd>
+<dt> ‘<samp>mincontrast</samp>’</dt>
+<dd><p>Set minimum contrast. Below this value a local measurement field is
+discarded. Must be a floating point value in the range 0-1. Default
+value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Set reference frame number for tripod mode.
+</p>
+<p>If enabled, the motion of the frames is compared to a reference frame
+in the filtered stream, identified by the specified number. The idea
+is to compensate all movements in a more-or-less static scene and keep
+the camera view absolutely still.
+</p>
+<p>If set to 0, it is disabled. The frames are counted starting from 1.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>Show fields and transforms in the resulting frames. It accepts an
+integer in the range 0-2. Default value is 0, which disables any
+visualization.
+</p></dd>
+</dl>
+
+<a name="Examples-59"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-59">9.90.1 Examples</a></h3>
+
+<ul>
+<li>
+Use default values:
+<table><tr><td> </td><td><pre class="example">vidstabdetect
+</pre></td></tr></table>
+
+</li><li>
+Analyze strongly shaky movie and put the results in file
+‘<tt>mytransforms.trf</tt>’:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Visualize the result of internal transformations in the resulting
+video:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=show=1
+</pre></td></tr></table>
+
+</li><li>
+Analyze a video with medium shakiness using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabtransform"></a>
+</p><a name="vidstabtransform-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-vidstabtransform-1">9.91 vidstabtransform</a></h2>
+
+<p>Video stabilization/deshaking: pass 2 of 2,
+see <a href="#vidstabdetect">vidstabdetect</a> for pass 1.
+</p>
+<p>Read a file with transform information for each frame and
+apply/compensate them. Together with the <a href="#vidstabdetect">vidstabdetect</a>
+filter this can be used to deshake videos. See also
+<a href="http://public.hronopik.de/vid.stab">http://public.hronopik.de/vid.stab</a>. It is important to also use
+the unsharp filter, see below.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Options">9.91.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>input</samp>’</dt>
+<dd><p>Set path to the file used to read the transforms. Default value is
+‘<tt>transforms.trf</tt>’).
+</p>
+</dd>
+<dt> ‘<samp>smoothing</samp>’</dt>
+<dd><p>Set the number of frames (value*2 + 1) used for lowpass filtering the
+camera movements. Default value is 10.
+</p>
+<p>For example a number of 10 means that 21 frames are used (10 in the
+past and 10 in the future) to smoothen the motion in the video. A
+larger values leads to a smoother video, but limits the acceleration
+of the camera (pan/tilt movements). 0 is a special case where a
+static camera is simulated.
+</p>
+</dd>
+<dt> ‘<samp>optalgo</samp>’</dt>
+<dd><p>Set the camera path optimization algorithm.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>gaussian kernel low-pass filter on camera motion (default)
+</p></dd>
+<dt> ‘<samp>avg</samp>’</dt>
+<dd><p>averaging on transformations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>maxshift</samp>’</dt>
+<dd><p>Set maximal number of pixels to translate frames. Default value is -1,
+meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>maxangle</samp>’</dt>
+<dd><p>Set maximal angle in radians (degree*PI/180) to rotate frames. Default
+value is -1, meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>crop</samp>’</dt>
+<dd><p>Specify how to deal with borders that may be visible due to movement
+compensation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>keep</samp>’</dt>
+<dd><p>keep image information from previous frame (default)
+</p></dd>
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>fill the border black
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>invert</samp>’</dt>
+<dd><p>Invert transforms if set to 1. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>relative</samp>’</dt>
+<dd><p>Consider transforms as relative to previsou frame if set to 1,
+absolute if set to 0. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set percentage to zoom. A positive value will result in a zoom-in
+effect, a negative value in a zoom-out effect. Default value is 0 (no
+zoom).
+</p>
+</dd>
+<dt> ‘<samp>optzoom</samp>’</dt>
+<dd><p>Set optimal zooming to avoid borders.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>disabled
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>optimal static zoom value is determined (only very strong movements
+will lead to visible borders) (default)
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dd><p>optimal adaptive zoom value is determined (no borders will be
+visible), see ‘<samp>zoomspeed</samp>’
+</p></dd>
+</dl>
+
+<p>Note that the value given at zoom is added to the one calculated here.
+</p>
+</dd>
+<dt> ‘<samp>zoomspeed</samp>’</dt>
+<dd><p>Set percent to zoom maximally each frame (enabled when
+‘<samp>optzoom</samp>’ is set to 2). Range is from 0 to 5, default value is
+0.25.
+</p>
+</dd>
+<dt> ‘<samp>interpol</samp>’</dt>
+<dd><p>Specify type of interpolation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>no</samp>’</dt>
+<dd><p>no interpolation
+</p></dd>
+<dt> ‘<samp>linear</samp>’</dt>
+<dd><p>linear only horizontal
+</p></dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>linear in both directions (default)
+</p></dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>cubic in both directions (slow)
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Enable virtual tripod mode if set to 1, which is equivalent to
+<code>relative=0:smoothing=0</code>. Default value is 0.
+</p>
+<p>Use also <code>tripod</code> option of <a href="#vidstabdetect">vidstabdetect</a>.
+</p>
+</dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Increase log verbosity if set to 1. Also the detected global motions
+are written to the temporary file ‘<tt>global_motions.trf</tt>’. Default
+value is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-13"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-13">9.91.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for a typical stabilization with default values:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
+</pre></td></tr></table>
+
+<p>Note the use of the unsharp filter which is always recommended.
+</p>
+</li><li>
+Zoom in a bit more and load transform data from a given file:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=zoom=5:input="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Smoothen the video even more:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=smoothing=30
+</pre></td></tr></table>
+</li></ul>
+
+<a name="vflip"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-vflip">9.92 vflip</a></h2>
+
+<p>Flip the input video vertically.
+</p>
+<p>For example, to vertically flip a video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "vflip" out.avi
+</pre></td></tr></table>
+
+<a name="vignette"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-vignette">9.93 vignette</a></h2>
+
+<p>Make or reverse a natural vignetting effect.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set lens angle expression as a number of radians.
+</p>
+<p>The value is clipped in the <code>[0,PI/2]</code> range.
+</p>
+<p>Default value: <code>"PI/5"</code>
+</p>
+</dd>
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dd><p>Set center coordinates expressions. Respectively <code>"w/2"</code> and <code>"h/2"</code>
+by default.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set forward/backward mode.
+</p>
+<p>Available modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>forward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the darker the image becomes.
+</p>
+</dd>
+<dt> ‘<samp>backward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the brighter the image becomes.
+This can be used to reverse a vignette effect, though there is no automatic
+detection to extract the lens ‘<samp>angle</samp>’ and other settings (yet). It can
+also be used to create a burning effect.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>forward</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set evaluation mode for the expressions (‘<samp>angle</samp>’, ‘<samp>x0</samp>’, ‘<samp>y0</samp>’).
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>Evaluate expressions only once during the filter initialization.
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Evaluate expressions for each incoming frame. This is way slower than the
+‘<samp>init</samp>’ mode since it requires all the scalers to be re-computed, but it
+allows advanced dynamic expressions.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>init</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>dither</samp>’</dt>
+<dd><p>Set dithering to reduce the circular banding effects. Default is <code>1</code>
+(enabled).
+</p>
+</dd>
+<dt> ‘<samp>aspect</samp>’</dt>
+<dd><p>Set vignette aspect. This setting allows one to adjust the shape of the vignette.
+Setting this value to the SAR of the input will make a rectangular vignetting
+following the dimensions of the video.
+</p>
+<p>Default is <code>1/1</code>.
+</p></dd>
+</dl>
+
+<a name="Expressions"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Expressions">9.93.1 Expressions</a></h3>
+
+<p>The ‘<samp>alpha</samp>’, ‘<samp>x0</samp>’ and ‘<samp>y0</samp>’ expressions can contain the
+following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>input width and height
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in
+<var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+
+<a name="Examples-48"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-48">9.93.2 Examples</a></h3>
+
+<ul>
+<li>
+Apply simple strong vignetting effect:
+<table><tr><td> </td><td><pre class="example">vignette=PI/4
+</pre></td></tr></table>
+
+</li><li>
+Make a flickering vignetting:
+<table><tr><td> </td><td><pre class="example">vignette='PI/4+random(1)*PI/50':eval=frame
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="w3fdif"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-w3fdif">9.94 w3fdif</a></h2>
+
+<p>Deinterlace the input video ("w3fdif" stands for "Weston 3 Field
+Deinterlacing Filter").
+</p>
+<p>Based on the process described by Martin Weston for BBC R&D, and
+implemented based on the de-interlace algorithm written by Jim
+Easterbrook for BBC R&D, the Weston 3 field deinterlacing filter
+uses filter coefficients calculated by BBC R&D.
+</p>
+<p>There are two sets of filter coefficients, so called "simple":
+and "complex". Which set of filter coefficients is used can
+be set by passing an optional parameter:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter</samp>’</dt>
+<dd><p>Set the interlacing filter coefficients. Accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>Simple filter coefficient set.
+</p></dd>
+<dt> ‘<samp>complex</samp>’</dt>
+<dd><p>More-complex filter coefficient set.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>complex</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Deinterlace all frames,
+</p></dd>
+<dt> ‘<samp>interlaced</samp>’</dt>
+<dd><p>Only deinterlace frames marked as interlaced.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>all</samp>’.
+</p></dd>
+</dl>
+
+<p><a name="yadif"></a>
+</p><a name="yadif-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-yadif-1">9.95 yadif</a></h2>
+
+<p>Deinterlace the input video ("yadif" means "yet another deinterlacing
+filter").
+</p>
+<p>This filter accepts the following options:
+</p>
+
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>The interlacing mode to adopt, accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, send_frame</samp>’</dt>
+<dd><p>output 1 frame for each frame
+</p></dd>
+<dt> ‘<samp>1, send_field</samp>’</dt>
+<dd><p>output 1 frame for each field
+</p></dd>
+<dt> ‘<samp>2, send_frame_nospatial</samp>’</dt>
+<dd><p>like <code>send_frame</code> but skip spatial interlacing check
+</p></dd>
+<dt> ‘<samp>3, send_field_nospatial</samp>’</dt>
+<dd><p>like <code>send_field</code> but skip spatial interlacing check
+</p></dd>
+</dl>
+
+<p>Default value is <code>send_frame</code>.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>The picture field parity assumed for the input interlaced video, accepts one of
+the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+<dt> ‘<samp>-1, auto</samp>’</dt>
+<dd><p>enable automatic detection
+</p></dd>
+</dl>
+
+<p>Default value is <code>auto</code>.
+If interlacing is unknown or decoder does not export this information,
+top field first will be assumed.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following
+values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, all</samp>’</dt>
+<dd><p>deinterlace all frames
+</p></dd>
+<dt> ‘<samp>1, interlaced</samp>’</dt>
+<dd><p>only deinterlace frames marked as interlaced
+</p></dd>
+</dl>
+
+<p>Default value is <code>all</code>.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sources"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Video-Sources">10. Video Sources</a></h1>
+
+<p>Below is a description of the currently available video sources.
+</p>
+<a name="buffer"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-buffer">10.1 buffer</a></h2>
+
+<p>Buffer video frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/vsrc_buffer.h</tt>’.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Specify the size (width and height) of the buffered video frames. For the
+syntax of this option, check the "Video size" section in the ffmpeg-utils
+manual.
+</p>
+</dd>
+<dt> ‘<samp>width</samp>’</dt>
+<dd><p>Input video width.
+</p>
+</dd>
+<dt> ‘<samp>height</samp>’</dt>
+<dd><p>Input video height.
+</p>
+</dd>
+<dt> ‘<samp>pix_fmt</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Specify the timebase assumed by the timestamps of the buffered frames.
+</p>
+</dd>
+<dt> ‘<samp>frame_rate</samp>’</dt>
+<dd><p>Specify the frame rate expected for the video stream.
+</p>
+</dd>
+<dt> ‘<samp>pixel_aspect, sar</samp>’</dt>
+<dd><p>Specify the sample aspect ratio assumed by the video frames.
+</p>
+</dd>
+<dt> ‘<samp>sws_param</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
+</pre></td></tr></table>
+
+<p>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 AVPixelFormat definition in ‘<tt>libavutil/pixfmt.h</tt>’),
+this example corresponds to:
+</p><table><tr><td> </td><td><pre class="example">buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
+</pre></td></tr></table>
+
+<p>Alternatively, the options can be specified as a flat string, but this
+syntax is deprecated:
+</p>
+<p><var>width</var>:<var>height</var>:<var>pix_fmt</var>:<var>time_base.num</var>:<var>time_base.den</var>:<var>pixel_aspect.num</var>:<var>pixel_aspect.den</var>[:<var>sws_param</var>]
+</p>
+<a name="cellauto"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-cellauto">10.2 cellauto</a></h2>
+
+<p>Create a pattern generated by an elementary cellular automaton.
+</p>
+<p>The initial state of the cellular automaton can be defined through the
+‘<samp>filename</samp>’, and ‘<samp>pattern</samp>’ options. If such options are
+not specified an initial state is created randomly.
+</p>
+<p>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 ‘<samp>scroll</samp>’ option.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pattern, p</samp>’</dt>
+<dd><p>Read the initial cellular automaton state, i.e. the starting row, from
+the specified string.
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This option is ignored when a file or a pattern is specified.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the cellular automaton rule, it is a number ranging from 0 to 255.
+Default value is 110.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ or ‘<samp>pattern</samp>’ is specified, the size is set
+by default to the width of the specified initial state row, and the
+height is set to <var>width</var> * PHI.
+</p>
+<p>If ‘<samp>size</samp>’ is set, it must contain the width of the specified
+pattern string, and the specified pattern will be centered in the
+larger row.
+</p>
+<p>If a filename or a pattern string is not specified, the size value
+defaults to "320x518" (used for a randomly generated initial state).
+</p>
+</dd>
+<dt> ‘<samp>scroll</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>start_full, full</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right row edges together.
+This is the default behavior, for disabling set the value to 0.
+</p></dd>
+</dl>
+
+<a name="Examples-36"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-36">10.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Read the initial state from ‘<tt>pattern</tt>’, and specify an output of
+size 200x400.
+<table><tr><td> </td><td><pre class="example">cellauto=f=pattern:s=200x400
+</pre></td></tr></table>
+
+</li><li>
+Generate a random initial row with a width of 200 cells, with a fill
+ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">cellauto=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Create a pattern generated by rule 18 starting by a single alive cell
+centered on an initial row with width 100:
+<table><tr><td> </td><td><pre class="example">cellauto=p=@:s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li><li>
+Specify a more elaborated initial pattern:
+<table><tr><td> </td><td><pre class="example">cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="mandelbrot"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-mandelbrot">10.3 mandelbrot</a></h2>
+
+<p>Generate a Mandelbrot set fractal, and progressively zoom towards the
+point specified with <var>start_x</var> and <var>start_y</var>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Set the terminal pts value. Default value is 400.
+</p>
+</dd>
+<dt> ‘<samp>end_scale</samp>’</dt>
+<dd><p>Set the terminal scale value.
+Must be a floating point value. Default value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>inner</samp>’</dt>
+<dd><p>Set the inner coloring mode, that is the algorithm used to draw the
+Mandelbrot fractal internal region.
+</p>
+<p>It shall assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>Set black mode.
+</p></dd>
+<dt> ‘<samp>convergence</samp>’</dt>
+<dd><p>Show time until convergence.
+</p></dd>
+<dt> ‘<samp>mincol</samp>’</dt>
+<dd><p>Set color based on point closest to the origin of the iterations.
+</p></dd>
+<dt> ‘<samp>period</samp>’</dt>
+<dd><p>Set period mode.
+</p></dd>
+</dl>
+
+<p>Default value is <var>mincol</var>.
+</p>
+</dd>
+<dt> ‘<samp>bailout</samp>’</dt>
+<dd><p>Set the bailout value. Default value is 10.0.
+</p>
+</dd>
+<dt> ‘<samp>maxiter</samp>’</dt>
+<dd><p>Set the maximum of iterations performed by the rendering
+algorithm. Default value is 7189.
+</p>
+</dd>
+<dt> ‘<samp>outer</samp>’</dt>
+<dd><p>Set outer coloring mode.
+It shall assume one of following values:
+</p><dl compact="compact">
+<dt> ‘<samp>iteration_count</samp>’</dt>
+<dd><p>Set iteration cound mode.
+</p></dd>
+<dt> ‘<samp>normalized_iteration_count</samp>’</dt>
+<dd><p>set normalized iteration count mode.
+</p></dd>
+</dl>
+<p>Default value is <var>normalized_iteration_count</var>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set frame rate, expressed as number of frames per second. Default
+value is "25".
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set frame size. For the syntax of this option, check the "Video
+size" section in the ffmpeg-utils manual. Default value is "640x480".
+</p>
+</dd>
+<dt> ‘<samp>start_scale</samp>’</dt>
+<dd><p>Set the initial scale value. Default value is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>start_x</samp>’</dt>
+<dd><p>Set the initial x position. Must be a floating point value between
+-100 and 100. Default value is -0.743643887037158704752191506114774.
+</p>
+</dd>
+<dt> ‘<samp>start_y</samp>’</dt>
+<dd><p>Set the initial y position. Must be a floating point value between
+-100 and 100. Default value is -0.131825904205311970493132056385139.
+</p></dd>
+</dl>
+
+<a name="mptestsrc"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-mptestsrc">10.4 mptestsrc</a></h2>
+
+<p>Generate various test patterns, as generated by the MPlayer test filter.
+</p>
+<p>The size of the generated video is fixed, and is 256x256.
+This source is useful in particular for testing encoding features.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH:MM:SS[.m...]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>test, t</samp>’</dt>
+<dd>
+<p>Set the number or the name of the test to perform. Supported tests are:
+</p><dl compact="compact">
+<dt> ‘<samp>dc_luma</samp>’</dt>
+<dt> ‘<samp>dc_chroma</samp>’</dt>
+<dt> ‘<samp>freq_luma</samp>’</dt>
+<dt> ‘<samp>freq_chroma</samp>’</dt>
+<dt> ‘<samp>amp_luma</samp>’</dt>
+<dt> ‘<samp>amp_chroma</samp>’</dt>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dt> ‘<samp>mv</samp>’</dt>
+<dt> ‘<samp>ring1</samp>’</dt>
+<dt> ‘<samp>ring2</samp>’</dt>
+<dt> ‘<samp>all</samp>’</dt>
+</dl>
+
+<p>Default value is "all", which will cycle through the list of all tests.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=t=dc_luma
+</pre></td></tr></table>
+
+<p>will generate a "dc_luma" test pattern.
+</p>
+<a name="frei0r_005fsrc"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-frei0r_005fsrc">10.5 frei0r_src</a></h2>
+
+<p>Provide a frei0r source.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>The size of the video to generate. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Framerate of the generated video, may be a string of the form
+<var>num</var>/<var>den</var> or a frame rate abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r source to load. For more information regarding frei0r and
+how to set the parameters read the section <a href="#frei0r">frei0r</a> in the description of
+the video filters.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r source.
+</p>
+</dd>
+</dl>
+
+<p>For example, to generate a frei0r partik0l source with size 200x200
+and frame rate 10 which is overlayed on the overlay filter main input:
+</p><table><tr><td> </td><td><pre class="example">frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
+</pre></td></tr></table>
+
+<a name="life"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-life">10.6 life</a></h2>
+
+<p>Generate a life pattern.
+</p>
+<p>This source is based on a generalization of John Conway’s life game.
+</p>
+<p>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.
+</p>
+<p>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 ‘<samp>rule</samp>’ option allows one to specify
+the rule to adopt.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+<p>If this option is not specified, the initial grid is generated
+randomly.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the life rule.
+</p>
+<p>A rule can be specified with a code of the kind "S<var>NS</var>/B<var>NB</var>",
+where <var>NS</var> and <var>NB</var> are sequences of numbers in the range 0-8,
+<var>NS</var> specifies the number of alive neighbor cells which make a
+live cell stay alive, and <var>NB</var> 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.
+</p>
+<p>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 = <code>(12<<9)+9</code> specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ is specified, the size is set by default to the
+same size of the input file. If ‘<samp>size</samp>’ 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.
+</p>
+<p>If a filename is not specified, the size value defaults to "320x240"
+(used for a randomly generated initial grid).
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right grid edges together, and the
+top and bottom edges also. Defaults to 1.
+</p>
+</dd>
+<dt> ‘<samp>mold</samp>’</dt>
+<dd><p>Set cell mold speed. If set, a dead cell will go from ‘<samp>death_color</samp>’ to
+‘<samp>mold_color</samp>’ with a step of ‘<samp>mold</samp>’. ‘<samp>mold</samp>’ can have a
+value from 0 to 255.
+</p>
+</dd>
+<dt> ‘<samp>life_color</samp>’</dt>
+<dd><p>Set the color of living (or new born) cells.
+</p>
+</dd>
+<dt> ‘<samp>death_color</samp>’</dt>
+<dd><p>Set the color of dead cells. If ‘<samp>mold</samp>’ is set, this is the first color
+used to represent a dead cell.
+</p>
+</dd>
+<dt> ‘<samp>mold_color</samp>’</dt>
+<dd><p>Set mold color, for definitely dead and moldy cells.
+</p>
+<p>For the syntax of these 3 color options, check the "Color" section in the
+ffmpeg-utils manual.
+</p></dd>
+</dl>
+
+<a name="Examples-11"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-11">10.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Read a grid from ‘<tt>pattern</tt>’, and center it on a grid of size
+300x300 pixels:
+<table><tr><td> </td><td><pre class="example">life=f=pattern:s=300x300
+</pre></td></tr></table>
+
+</li><li>
+Generate a random grid of size 200x200, with a fill ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">life=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Specify a custom rule for evolving a randomly generated grid:
+<table><tr><td> </td><td><pre class="example">life=rule=S14/B34
+</pre></td></tr></table>
+
+</li><li>
+Full example with slow death effect (mold) using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="color"></a>
+<a name="haldclutsrc"></a>
+<a name="nullsrc"></a>
+<a name="rgbtestsrc"></a>
+<a name="smptebars"></a>
+<a name="smptehdbars"></a>
+<a name="testsrc"></a>
+</p><a name="color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">10.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a></h2>
+
+<p>The <code>color</code> source provides an uniformly colored input.
+</p>
+<p>The <code>haldclutsrc</code> source provides an identity Hald CLUT. See also
+<a href="#haldclut">haldclut</a> filter.
+</p>
+<p>The <code>nullsrc</code> 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.
+</p>
+<p>The <code>rgbtestsrc</code> 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.
+</p>
+<p>The <code>smptebars</code> source generates a color bars pattern, based on
+the SMPTE Engineering Guideline EG 1-1990.
+</p>
+<p>The <code>smptehdbars</code> source generates a color bars pattern, based on
+the SMPTE RP 219-2002.
+</p>
+<p>The <code>testsrc</code> source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+</p>
+<p>The sources accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the source, only available in the <code>color</code>
+source. For the syntax of this option, check the "Color" section in the
+ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>level</samp>’</dt>
+<dd><p>Specify the level of the Hald CLUT, only available in the <code>haldclutsrc</code>
+source. A level of <code>N</code> generates a picture of <code>N*N*N</code> by <code>N*N*N</code>
+pixels to be used as identity matrix for 3D lookup tables. Each component is
+coded on a <code>1/(N*N)</code> scale.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the size of the sourced video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual. The default value is
+"320x240".
+</p>
+<p>This option is not available with the <code>haldclutsrc</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>Set the sample aspect ratio of the sourced video.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>decimals, n</samp>’</dt>
+<dd><p>Set the number of decimals to show in the timestamp, only available in the
+<code>testsrc</code> source.
+</p>
+<p>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.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=duration=5.3:size=qcif:rate=10
+</pre></td></tr></table>
+
+<p>will generate a video with a duration of 5.3 seconds, with size
+176x144 and a frame rate of 10 frames per second.
+</p>
+<p>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.
+</p><table><tr><td> </td><td><pre class="example">color=c=red@0.2:s=qcif:r=10
+</pre></td></tr></table>
+
+<p>If the input content is to be ignored, <code>nullsrc</code> can be used. The
+following command generates noise in the luminance plane by employing
+the <code>geq</code> filter:
+</p><table><tr><td> </td><td><pre class="example">nullsrc=s=256x256, geq=random(1)*255:128:128
+</pre></td></tr></table>
+
+<a name="Commands-1"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands-1">10.7.1 Commands</a></h3>
+
+<p>The <code>color</code> source supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c, color</samp>’</dt>
+<dd><p>Set the color of the created image. Accepts the same syntax of the
+corresponding ‘<samp>color</samp>’ option.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sinks"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Video-Sinks">11. Video Sinks</a></h1>
+
+<p>Below is a description of the currently available video sinks.
+</p>
+<a name="buffersink"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-buffersink">11.1 buffersink</a></h2>
+
+<p>Buffer video frames, and make them available to the end of the filter
+graph.
+</p>
+<p>This sink is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVBufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="nullsink"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-nullsink">11.2 nullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Multimedia-Filters"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Multimedia-Filters">12. Multimedia Filters</a></h1>
+
+<p>Below is a description of the currently available multimedia filters.
+</p>
+<a name="avectorscope"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-avectorscope">12.1 avectorscope</a></h2>
+
+<p>Convert input audio to a video output, representing the audio vector
+scope.
+</p>
+<p>The filter is used to measure the difference between channels of stereo
+audio stream. A monoaural signal, consisting of identical left and right
+signal, results in straight vertical line. Any stereo separation is visible
+as a deviation from this line, creating a Lissajous figure.
+If the straight (or deviation from it) but horizontal line appears this
+indicates that the left and right channels are out of phase.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode, m</samp>’</dt>
+<dd><p>Set the vectorscope mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>lissajous</samp>’</dt>
+<dd><p>Lissajous rotated by 45 degrees.
+</p>
+</dd>
+<dt> ‘<samp>lissajous_xy</samp>’</dt>
+<dd><p>Same as above but not rotated.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>lissajous</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size for the output. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual. Default value is <code>400x400</code>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the output frame rate. Default value is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dt> ‘<samp>gc</samp>’</dt>
+<dt> ‘<samp>bc</samp>’</dt>
+<dd><p>Specify the red, green and blue contrast. Default values are <code>40</code>, <code>160</code> and <code>80</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>rf</samp>’</dt>
+<dt> ‘<samp>gf</samp>’</dt>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>Specify the red, green and blue fade. Default values are <code>15</code>, <code>10</code> and <code>5</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set the zoom factor. Default value is <code>1</code>. Allowed range is <code>[1, 10]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-57"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-57">12.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Complete example using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="concat"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-concat">12.2 concat</a></h2>
+
+<p>Concatenate audio and video streams, joining them together one after the
+other.
+</p>
+<p>The filter works on segments of synchronized video and audio streams. All
+segments must have the same number of streams of each type, and that will
+also be the number of streams at output.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of segments. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Set the number of output video streams, that is also the number of video
+streams in each segment. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Set the number of output audio streams, that is also the number of video
+streams in each segment. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>unsafe</samp>’</dt>
+<dd><p>Activate unsafe mode: do not fail if segments have a different format.
+</p>
+</dd>
+</dl>
+
+<p>The filter has <var>v</var>+<var>a</var> outputs: first <var>v</var> video outputs, then
+<var>a</var> audio outputs.
+</p>
+<p>There are <var>n</var>x(<var>v</var>+<var>a</var>) inputs: first the inputs for the first
+segment, in the same order as the outputs, then the inputs for the second
+segment, etc.
+</p>
+<p>Related streams do not always have exactly the same duration, for various
+reasons including codec frame size or sloppy authoring. For that reason,
+related synchronized streams (e.g. a video and its audio track) should be
+concatenated at once. The concat filter will use the duration of the longest
+stream in each segment (except the last one), and if necessary pad shorter
+audio streams with silence.
+</p>
+<p>For this filter to work correctly, all segments must start at timestamp 0.
+</p>
+<p>All corresponding streams must have the same parameters in all segments; the
+filtering system will automatically select a common pixel format for video
+streams, and a common sample format, sample rate and channel layout for
+audio streams, but other settings, such as resolution, must be converted
+explicitly by the user.
+</p>
+<p>Different frame rates are acceptable but will result in variable frame rate
+at output; be sure to configure the output file to handle it.
+</p>
+<a name="Examples-10"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-10">12.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Concatenate an opening, an episode and an ending, all in bilingual version
+(video in stream 0, audio in streams 1 and 2):
+<table><tr><td> </td><td><pre class="example">ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
+ '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
+ concat=n=3:v=1:a=2 [v] [a1] [a2]' \
+ -map '[v]' -map '[a1]' -map '[a2]' output.mkv
+</pre></td></tr></table>
+
+</li><li>
+Concatenate two parts, handling audio and video separately, using the
+(a)movie sources, and adjusting the resolution:
+<table><tr><td> </td><td><pre class="example">movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
+movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
+[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
+</pre></td></tr></table>
+<p>Note that a desync will happen at the stitch if the audio and video streams
+do not have exactly the same duration in the first file.
+</p>
+</li></ul>
+
+<a name="ebur128"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-ebur128">12.3 ebur128</a></h2>
+
+<p>EBU R128 scanner filter. This filter takes an audio stream as input and outputs
+it unchanged. By default, it logs a message at a frequency of 10Hz with the
+Momentary loudness (identified by <code>M</code>), Short-term loudness (<code>S</code>),
+Integrated loudness (<code>I</code>) and Loudness Range (<code>LRA</code>).
+</p>
+<p>The filter also has a video output (see the <var>video</var> option) with a real
+time graph to observe the loudness evolution. The graphic contains the logged
+message mentioned above, so it is not printed anymore when this option is set,
+unless the verbose logging is set. The main graphing area contains the
+short-term loudness (3 seconds of analysis), and the gauge on the right is for
+the momentary loudness (400 milliseconds).
+</p>
+<p>More information about the Loudness Recommendation EBU R128 on
+<a href="http://tech.ebu.ch/loudness">http://tech.ebu.ch/loudness</a>.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dd><p>Activate the video output. The audio stream is passed unchanged whether this
+option is set or no. The video stream will be the first output stream if
+activated. Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>Set the video size. This option is for video only. For the syntax of this
+option, check the "Video size" section in the ffmpeg-utils manual. Default
+and minimum resolution is <code>640x480</code>.
+</p>
+</dd>
+<dt> ‘<samp>meter</samp>’</dt>
+<dd><p>Set the EBU scale meter. Default is <code>9</code>. Common values are <code>9</code> and
+<code>18</code>, respectively for EBU scale meter +9 and EBU scale meter +18. Any
+other integer value between this range is allowed.
+</p>
+</dd>
+<dt> ‘<samp>metadata</samp>’</dt>
+<dd><p>Set metadata injection. If set to <code>1</code>, the audio input will be segmented
+into 100ms output frames, each of them containing various loudness information
+in metadata. All the metadata keys are prefixed with <code>lavfi.r128.</code>.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>framelog</samp>’</dt>
+<dd><p>Force the frame logging level.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>information logging level
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>verbose logging level
+</p></dd>
+</dl>
+
+<p>By default, the logging level is set to <var>info</var>. If the ‘<samp>video</samp>’ or
+the ‘<samp>metadata</samp>’ options are set, it switches to <var>verbose</var>.
+</p>
+</dd>
+<dt> ‘<samp>peak</samp>’</dt>
+<dd><p>Set peak mode(s).
+</p>
+<p>Available modes can be cumulated (the option is a <code>flag</code> type). Possible
+values are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Disable any peak mode (default).
+</p></dd>
+<dt> ‘<samp>sample</samp>’</dt>
+<dd><p>Enable sample-peak mode.
+</p>
+<p>Simple peak mode looking for the higher sample value. It logs a message
+for sample-peak (identified by <code>SPK</code>).
+</p></dd>
+<dt> ‘<samp>true</samp>’</dt>
+<dd><p>Enable true-peak mode.
+</p>
+<p>If enabled, the peak lookup is done on an over-sampled version of the input
+stream for better peak accuracy. It logs a message for true-peak.
+(identified by <code>TPK</code>) and true-peak per frame (identified by <code>FTPK</code>).
+This mode requires a build with <code>libswresample</code>.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Examples-6"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-6">12.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Real-time graph using <code>ffplay</code>, with a EBU scale meter +18:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
+</pre></td></tr></table>
+
+</li><li>
+Run an analysis with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="interleave_002c-ainterleave"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-interleave_002c-ainterleave">12.4 interleave, ainterleave</a></h2>
+
+<p>Temporally interleave frames from several inputs.
+</p>
+<p><code>interleave</code> works with video inputs, <code>ainterleave</code> with audio.
+</p>
+<p>These filters read frames from several inputs and send the oldest
+queued frame to the output.
+</p>
+<p>Input streams must have a well defined, monotonically increasing frame
+timestamp values.
+</p>
+<p>In order to submit one frame to output, these filters need to enqueue
+at least one frame for each input, so they cannot work in case one
+input is not yet terminated and will not receive incoming frames.
+</p>
+<p>For example consider the case when one input is a <code>select</code> filter
+which always drop input frames. The <code>interleave</code> filter will keep
+reading from that input, but it will never be able to send new frames
+to output until the input will send an end-of-stream signal.
+</p>
+<p>Also, depending on inputs synchronization, the filters will drop
+frames in case one input receives more frames than the other ones, and
+the queue is already filled.
+</p>
+<p>These filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_inputs, n</samp>’</dt>
+<dd><p>Set the number of different inputs, it is 2 by default.
+</p></dd>
+</dl>
+
+<a name="Examples-60"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-60">12.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Interleave frames belonging to different streams using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
+</pre></td></tr></table>
+
+</li><li>
+Add flickering blur effect:
+<table><tr><td> </td><td><pre class="example">select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perms_002c-aperms"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-perms_002c-aperms">12.5 perms, aperms</a></h2>
+
+<p>Set read/write permissions for the output frames.
+</p>
+<p>These filters are mainly aimed at developers to test direct path in the
+following filter in the filtergraph.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Select the permissions mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing. This is the default.
+</p></dd>
+<dt> ‘<samp>ro</samp>’</dt>
+<dd><p>Set all the output frames read-only.
+</p></dd>
+<dt> ‘<samp>rw</samp>’</dt>
+<dd><p>Set all the output frames directly writable.
+</p></dd>
+<dt> ‘<samp>toggle</samp>’</dt>
+<dd><p>Make the frame read-only if writable, and writable if read-only.
+</p></dd>
+<dt> ‘<samp>random</samp>’</dt>
+<dd><p>Set each output frame read-only or writable randomly.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seed</samp>’</dt>
+<dd><p>Set the seed for the <var>random</var> mode, must be an integer included between
+<code>0</code> and <code>UINT32_MAX</code>. If not specified, or if explicitly set to
+<code>-1</code>, the filter will try to use a good random seed on a best effort
+basis.
+</p></dd>
+</dl>
+
+<p>Note: in case of auto-inserted filter between the permission filter and the
+following one, the permission might not be received as expected in that
+following filter. Inserting a <a href="#format">format</a> or <a href="#aformat">aformat</a> filter before the
+perms/aperms filter can avoid this problem.
+</p>
+<a name="select_002c-aselect"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-select_002c-aselect">12.6 select, aselect</a></h2>
+
+<p>Select frames to pass in output.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set expression, which is evaluated for each input frame.
+</p>
+<p>If the expression is evaluated to zero, the frame is discarded.
+</p>
+<p>If the evaluation result is negative or NaN, the frame is sent to the
+first output; otherwise it is sent to the output with index
+<code>ceil(val)-1</code>, assuming that the input index starts from 0.
+</p>
+<p>For example a value of <code>1.2</code> corresponds to the output with index
+<code>ceil(1.2)-1 = 2-1 = 1</code>, that is the second output.
+</p>
+</dd>
+<dt> ‘<samp>outputs, n</samp>’</dt>
+<dd><p>Set the number of outputs. The output to which to send the selected
+frame is based on the result of the evaluation. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The expression can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the sequential number of the filtered frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>selected_n</samp>’</dt>
+<dd><p>the sequential number of the selected frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_n</samp>’</dt>
+<dd><p>the sequential number of the last selected frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in <var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_pts</samp>’</dt>
+<dd><p>the PTS of the previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_pts</samp>’</dt>
+<dd><p>the PTS of the last previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_t</samp>’</dt>
+<dd><p>the PTS of the last previously selected video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>the PTS of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_t</samp>’</dt>
+<dd><p>the time of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>pict_type <em>(video only)</em></samp>’</dt>
+<dd><p>the type of the filtered frame, can assume one of the following
+values:
+</p><dl compact="compact">
+<dt> ‘<samp>I</samp>’</dt>
+<dt> ‘<samp>P</samp>’</dt>
+<dt> ‘<samp>B</samp>’</dt>
+<dt> ‘<samp>S</samp>’</dt>
+<dt> ‘<samp>SI</samp>’</dt>
+<dt> ‘<samp>SP</samp>’</dt>
+<dt> ‘<samp>BI</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>interlace_type <em>(video only)</em></samp>’</dt>
+<dd><p>the frame interlace type, can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>PROGRESSIVE</samp>’</dt>
+<dd><p>the frame is progressive (not interlaced)
+</p></dd>
+<dt> ‘<samp>TOPFIRST</samp>’</dt>
+<dd><p>the frame is top-field-first
+</p></dd>
+<dt> ‘<samp>BOTTOMFIRST</samp>’</dt>
+<dd><p>the frame is bottom-field-first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>consumed_sample_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of selected samples before the current frame
+</p>
+</dd>
+<dt> ‘<samp>samples_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of samples in the current frame
+</p>
+</dd>
+<dt> ‘<samp>sample_rate <em>(audio only)</em></samp>’</dt>
+<dd><p>the input sample rate
+</p>
+</dd>
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>1 if the filtered frame is a key-frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the filtered frame, -1 if the information
+is not available (e.g. for synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>scene <em>(video only)</em></samp>’</dt>
+<dd><p>value between 0 and 1 to indicate a new scene; a low value reflects a low
+probability for the current frame to introduce a new scene, while a higher
+value means the current frame is more likely to be one (see the example below)
+</p>
+</dd>
+</dl>
+
+<p>The default value of the select expression is "1".
+</p>
+<a name="Examples-40"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-40">12.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Select all frames in input:
+<table><tr><td> </td><td><pre class="example">select
+</pre></td></tr></table>
+
+<p>The example above is the same as:
+</p><table><tr><td> </td><td><pre class="example">select=1
+</pre></td></tr></table>
+
+</li><li>
+Skip all frames:
+<table><tr><td> </td><td><pre class="example">select=0
+</pre></td></tr></table>
+
+</li><li>
+Select only I-frames:
+<table><tr><td> </td><td><pre class="example">select='eq(pict_type\,I)'
+</pre></td></tr></table>
+
+</li><li>
+Select one frame every 100:
+<table><tr><td> </td><td><pre class="example">select='not(mod(n\,100))'
+</pre></td></tr></table>
+
+</li><li>
+Select only frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)
+</pre></td></tr></table>
+
+</li><li>
+Select only I frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)*eq(pict_type\,I)
+</pre></td></tr></table>
+
+</li><li>
+Select frames with a minimum distance of 10 seconds:
+<table><tr><td> </td><td><pre class="example">select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
+</pre></td></tr></table>
+
+</li><li>
+Use aselect to select only audio frames with samples number > 100:
+<table><tr><td> </td><td><pre class="example">aselect='gt(samples_n\,100)'
+</pre></td></tr></table>
+
+</li><li>
+Create a mosaic of the first scenes:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
+</pre></td></tr></table>
+
+<p>Comparing <var>scene</var> against a value between 0.3 and 0.5 is generally a sane
+choice.
+</p>
+</li><li>
+Send even and odd frames to separate outputs, and compose them:
+<table><tr><td> </td><td><pre class="example">select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sendcmd_002c-asendcmd"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-sendcmd_002c-asendcmd">12.7 sendcmd, asendcmd</a></h2>
+
+<p>Send commands to filters in the filtergraph.
+</p>
+<p>These filters read commands to be sent to other filters in the
+filtergraph.
+</p>
+<p><code>sendcmd</code> must be inserted between two video filters,
+<code>asendcmd</code> must be inserted between two audio filters, but apart
+from that they act the same way.
+</p>
+<p>The specification of commands can be provided in the filter arguments
+with the <var>commands</var> option, or in a file specified by the
+<var>filename</var> option.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>commands, c</samp>’</dt>
+<dd><p>Set the commands to be read and sent to the other filters.
+</p></dd>
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the commands to be read and sent to the other
+filters.
+</p></dd>
+</dl>
+
+<a name="Commands-syntax"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Commands-syntax">12.7.1 Commands syntax</a></h3>
+
+<p>A commands description consists of a sequence of interval
+specifications, comprising a list of commands to be executed when a
+particular event related to that interval occurs. The occurring event
+is typically the current frame time entering or leaving a given time
+interval.
+</p>
+<p>An interval is specified by the following syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>START</var>[-<var>END</var>] <var>COMMANDS</var>;
+</pre></td></tr></table>
+
+<p>The time interval is specified by the <var>START</var> and <var>END</var> times.
+<var>END</var> is optional and defaults to the maximum time.
+</p>
+<p>The current frame time is considered within the specified interval if
+it is included in the interval [<var>START</var>, <var>END</var>), that is when
+the time is greater or equal to <var>START</var> and is lesser than
+<var>END</var>.
+</p>
+<p><var>COMMANDS</var> consists of a sequence of one or more command
+specifications, separated by ",", relating to that interval. The
+syntax of a command specification is given by:
+</p><table><tr><td> </td><td><pre class="example">[<var>FLAGS</var>] <var>TARGET</var> <var>COMMAND</var> <var>ARG</var>
+</pre></td></tr></table>
+
+<p><var>FLAGS</var> is optional and specifies the type of events relating to
+the time interval which enable sending the specified command, and must
+be a non-null sequence of identifier flags separated by "+" or "|" and
+enclosed between "[" and "]".
+</p>
+<p>The following flags are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>enter</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp enters the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was not in the given interval, and the
+current is.
+</p>
+</dd>
+<dt> ‘<samp>leave</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp leaves the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was in the given interval, and the
+current is not.
+</p></dd>
+</dl>
+
+<p>If <var>FLAGS</var> is not specified, a default value of <code>[enter]</code> is
+assumed.
+</p>
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional list of argument for
+the given <var>COMMAND</var>.
+</p>
+<p>Between one interval specification and another, whitespaces, or
+sequences of characters starting with <code>#</code> until the end of line,
+are ignored and can be used to annotate comments.
+</p>
+<p>A simplified BNF description of the commands specification syntax
+follows:
+</p><table><tr><td> </td><td><pre class="example"><var>COMMAND_FLAG</var> ::= "enter" | "leave"
+<var>COMMAND_FLAGS</var> ::= <var>COMMAND_FLAG</var> [(+|"|")<var>COMMAND_FLAG</var>]
+<var>COMMAND</var> ::= ["[" <var>COMMAND_FLAGS</var> "]"] <var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+<var>COMMANDS</var> ::= <var>COMMAND</var> [,<var>COMMANDS</var>]
+<var>INTERVAL</var> ::= <var>START</var>[-<var>END</var>] <var>COMMANDS</var>
+<var>INTERVALS</var> ::= <var>INTERVAL</var>[;<var>INTERVALS</var>]
+</pre></td></tr></table>
+
+<a name="Examples-7"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-7">12.7.2 Examples</a></h3>
+
+<ul>
+<li>
+Specify audio tempo change at second 4:
+<table><tr><td> </td><td><pre class="example">asendcmd=c='4.0 atempo tempo 1.5',atempo
+</pre></td></tr></table>
+
+</li><li>
+Specify a list of drawtext and hue commands in a file.
+<table><tr><td> </td><td><pre class="example"># show text in the interval 5-10
+5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
+
+# desaturate the image in the interval 15-20
+15.0-20.0 [enter] hue s 0,
+ [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
+ [leave] hue s 1,
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
+
+# apply an exponential saturation fade-out effect, starting from time 25
+25 [enter] hue s exp(25-t)
+</pre></td></tr></table>
+
+<p>A filtergraph allowing to read and process the above command list
+stored in a file ‘<tt>test.cmd</tt>’, can be specified with:
+</p><table><tr><td> </td><td><pre class="example">sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="setpts"></a>
+</p><a name="setpts_002c-asetpts"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-setpts_002c-asetpts">12.8 setpts, asetpts</a></h2>
+
+<p>Change the PTS (presentation timestamp) of the input frames.
+</p>
+<p><code>setpts</code> works on video frames, <code>asetpts</code> on audio frames.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr</samp>’</dt>
+<dd><p>The expression which is evaluated for each frame to construct its timestamp.
+</p>
+</dd>
+</dl>
+
+<p>The expression is evaluated through the eval API and can contain the following
+constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>FRAME_RATE</samp>’</dt>
+<dd><p>frame rate, only defined for constant frame-rate video
+</p>
+</dd>
+<dt> ‘<samp>PTS</samp>’</dt>
+<dd><p>the presentation timestamp in input
+</p>
+</dd>
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>the count of the input frame for video or the number of consumed samples,
+not including the current frame for audio, starting from 0.
+</p>
+</dd>
+<dt> ‘<samp>NB_CONSUMED_SAMPLES</samp>’</dt>
+<dd><p>the number of consumed samples, not including the current frame (only
+audio)
+</p>
+</dd>
+<dt> ‘<samp>NB_SAMPLES, S</samp>’</dt>
+<dd><p>the number of samples in the current frame (only audio)
+</p>
+</dd>
+<dt> ‘<samp>SAMPLE_RATE, SR</samp>’</dt>
+<dd><p>audio sample rate
+</p>
+</dd>
+<dt> ‘<samp>STARTPTS</samp>’</dt>
+<dd><p>the PTS of the first frame
+</p>
+</dd>
+<dt> ‘<samp>STARTT</samp>’</dt>
+<dd><p>the time in seconds of the first frame
+</p>
+</dd>
+<dt> ‘<samp>INTERLACED</samp>’</dt>
+<dd><p>tell if the current frame is interlaced
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>the time in seconds of the current frame
+</p>
+</dd>
+<dt> ‘<samp>POS</samp>’</dt>
+<dd><p>original position in the file of the frame, or undefined if undefined
+for the current frame
+</p>
+</dd>
+<dt> ‘<samp>PREV_INPTS</samp>’</dt>
+<dd><p>previous input PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_INT</samp>’</dt>
+<dd><p>previous input time in seconds
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTPTS</samp>’</dt>
+<dd><p>previous output PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTT</samp>’</dt>
+<dd><p>previous output time in seconds
+</p>
+</dd>
+<dt> ‘<samp>RTCTIME</samp>’</dt>
+<dd><p>wallclock (RTC) time in microseconds. This is deprecated, use time(0)
+instead.
+</p>
+</dd>
+<dt> ‘<samp>RTCSTART</samp>’</dt>
+<dd><p>wallclock (RTC) time at the start of the movie in microseconds
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+</dl>
+
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples">12.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Start counting PTS from zero
+<table><tr><td> </td><td><pre class="example">setpts=PTS-STARTPTS
+</pre></td></tr></table>
+
+</li><li>
+Apply fast motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=0.5*PTS
+</pre></td></tr></table>
+
+</li><li>
+Apply slow motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=2.0*PTS
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate of 25 frames per second:
+<table><tr><td> </td><td><pre class="example">setpts=N/(25*TB)
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate 25 fps with some jitter:
+<table><tr><td> </td><td><pre class="example">setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
+</pre></td></tr></table>
+
+</li><li>
+Apply an offset of 10 seconds to the input PTS:
+<table><tr><td> </td><td><pre class="example">setpts=PTS+10/TB
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps from a "live source" and rebase onto the current timebase:
+<table><tr><td> </td><td><pre class="example">setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps by counting samples:
+<table><tr><td> </td><td><pre class="example">asetpts=N/SR/TB
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="settb_002c-asettb"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-settb_002c-asettb">12.9 settb, asettb</a></h2>
+
+<p>Set the timebase to use for the output frames timestamps.
+It is mainly useful for testing timebase configuration.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, tb</samp>’</dt>
+<dd><p>The expression which is evaluated into the output timebase.
+</p>
+</dd>
+</dl>
+
+<p>The value for ‘<samp>tb</samp>’ is an arithmetic expression representing a
+rational. The expression can contain the constants "AVTB" (the default
+timebase), "intb" (the input timebase) and "sr" (the sample rate,
+audio only). Default value is "intb".
+</p>
+<a name="Examples-67"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-67">12.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the timebase to 1/25:
+<table><tr><td> </td><td><pre class="example">settb=expr=1/25
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1/10:
+<table><tr><td> </td><td><pre class="example">settb=expr=0.1
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1001/1000:
+<table><tr><td> </td><td><pre class="example">settb=1+0.001
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 2*intb:
+<table><tr><td> </td><td><pre class="example">settb=2*intb
+</pre></td></tr></table>
+
+</li><li>
+Set the default timebase value:
+<table><tr><td> </td><td><pre class="example">settb=AVTB
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showspectrum"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-showspectrum">12.10 showspectrum</a></h2>
+
+<p>Convert input audio to a video output, representing the audio frequency
+spectrum.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value is
+<code>640x512</code>.
+</p>
+</dd>
+<dt> ‘<samp>slide</samp>’</dt>
+<dd><p>Specify if the spectrum should slide along the window. Default value is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify display mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>combined</samp>’</dt>
+<dd><p>all channels are displayed in the same row
+</p></dd>
+<dt> ‘<samp>separate</samp>’</dt>
+<dd><p>all channels are displayed in separate rows
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>combined</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify display color mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>each channel is displayed in a separate color
+</p></dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>each channel is is displayed using the same color scheme
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>channel</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>scale</samp>’</dt>
+<dd><p>Specify scale used for calculating intensity color values.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>lin</samp>’</dt>
+<dd><p>linear
+</p></dd>
+<dt> ‘<samp>sqrt</samp>’</dt>
+<dd><p>square root, default
+</p></dd>
+<dt> ‘<samp>cbrt</samp>’</dt>
+<dd><p>cubic root
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>logarithmic
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>sqrt</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>saturation</samp>’</dt>
+<dd><p>Set saturation modifier for displayed colors. Negative values provide
+alternative color scheme. <code>0</code> is no saturation at all.
+Saturation must be in [-10.0, 10.0] range.
+Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>win_func</samp>’</dt>
+<dd><p>Set window function.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No samples pre-processing (do not expect this to be faster)
+</p></dd>
+<dt> ‘<samp>hann</samp>’</dt>
+<dd><p>Hann window
+</p></dd>
+<dt> ‘<samp>hamming</samp>’</dt>
+<dd><p>Hamming window
+</p></dd>
+<dt> ‘<samp>blackman</samp>’</dt>
+<dd><p>Blackman window
+</p></dd>
+</dl>
+
+<p>Default value is <code>hann</code>.
+</p></dd>
+</dl>
+
+<p>The usage is very similar to the showwaves filter; see the examples in that
+section.
+</p>
+<a name="Examples-68"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-68">12.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Large window with logarithmic color scaling:
+<table><tr><td> </td><td><pre class="example">showspectrum=s=1280x480:scale=log
+</pre></td></tr></table>
+
+</li><li>
+Complete example for a colored and sliding spectrum per channel using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showwaves"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-showwaves">12.11 showwaves</a></h2>
+
+<p>Convert input audio to a video output, representing the samples waves.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value
+is "600x240".
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set display mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>point</samp>’</dt>
+<dd><p>Draw a point for each sample.
+</p>
+</dd>
+<dt> ‘<samp>line</samp>’</dt>
+<dd><p>Draw a vertical line for each sample.
+</p></dd>
+</dl>
+
+<p>Default value is <code>point</code>.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of samples which are printed on the same column. A
+larger value will decrease the frame rate. Must be a positive
+integer. This option can be set only if the value for <var>rate</var>
+is not explicitly specified.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the (approximate) output frame rate. This is done by setting the
+option <var>n</var>. Default value is "25".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-47"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-47">12.11.1 Examples</a></h3>
+
+<ul>
+<li>
+Output the input file audio and the corresponding video representation
+at the same time:
+<table><tr><td> </td><td><pre class="example">amovie=a.mp3,asplit[out0],showwaves[out1]
+</pre></td></tr></table>
+
+</li><li>
+Create a synthetic signal and show it with showwaves, forcing a
+frame rate of 30 frames per second:
+<table><tr><td> </td><td><pre class="example">aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
+</pre></td></tr></table>
+</li></ul>
+
+<a name="split_002c-asplit"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-split_002c-asplit">12.12 split, asplit</a></h2>
+
+<p>Split input into several identical outputs.
+</p>
+<p><code>asplit</code> works with audio input, <code>split</code> with video.
+</p>
+<p>The filter accepts a single parameter which specifies the number of outputs. If
+unspecified, it defaults to 2.
+</p>
+<a name="Examples-63"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-63">12.12.1 Examples</a></h3>
+
+<ul>
+<li>
+Create two separate outputs from the same input:
+<table><tr><td> </td><td><pre class="example">[in] split [out0][out1]
+</pre></td></tr></table>
+
+</li><li>
+To create 3 or more outputs, you need to specify the number of
+outputs, like in:
+<table><tr><td> </td><td><pre class="example">[in] asplit=3 [out0][out1][out2]
+</pre></td></tr></table>
+
+</li><li>
+Create two separate outputs from the same input, one cropped and
+one padded:
+<table><tr><td> </td><td><pre class="example">[in] split [splitout1][splitout2];
+[splitout1] crop=100:100:0:0 [cropout];
+[splitout2] pad=200:200:100:100 [padout];
+</pre></td></tr></table>
+
+</li><li>
+Create 5 copies of the input audio with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
+</pre></td></tr></table>
+</li></ul>
+
+<a name="zmq_002c-azmq"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-zmq_002c-azmq">12.13 zmq, azmq</a></h2>
+
+<p>Receive commands sent through a libzmq client, and forward them to
+filters in the filtergraph.
+</p>
+<p><code>zmq</code> and <code>azmq</code> work as a pass-through filters. <code>zmq</code>
+must be inserted between two video filters, <code>azmq</code> between two
+audio filters.
+</p>
+<p>To enable these filters you need to install the libzmq library and
+headers and configure FFmpeg with <code>--enable-libzmq</code>.
+</p>
+<p>For more information about libzmq see:
+<a href="http://www.zeromq.org/">http://www.zeromq.org/</a>
+</p>
+<p>The <code>zmq</code> and <code>azmq</code> filters work as a libzmq server, which
+receives messages sent through a network interface defined by the
+‘<samp>bind_address</samp>’ option.
+</p>
+<p>The received message must be in the form:
+</p><table><tr><td> </td><td><pre class="example"><var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+</pre></td></tr></table>
+
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional argument list for the
+given <var>COMMAND</var>.
+</p>
+<p>Upon reception, the message is processed and the corresponding command
+is injected into the filtergraph. Depending on the result, the filter
+will send a reply to the client, adopting the format:
+</p><table><tr><td> </td><td><pre class="example"><var>ERROR_CODE</var> <var>ERROR_REASON</var>
+<var>MESSAGE</var>
+</pre></td></tr></table>
+
+<p><var>MESSAGE</var> is optional.
+</p>
+<a name="Examples-61"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-61">12.13.1 Examples</a></h3>
+
+<p>Look at ‘<tt>tools/zmqsend</tt>’ for an example of a zmq client which can
+be used to send commands processed by these filters.
+</p>
+<p>Consider the following filtergraph generated by <code>ffplay</code>
+</p><table><tr><td> </td><td><pre class="example">ffplay -dumpgraph 1 -f lavfi "
+color=s=100x100:c=red [l];
+color=s=100x100:c=blue [r];
+nullsrc=s=200x100, zmq [bg];
+[bg][l] overlay [bg+l];
+[bg+l][r] overlay=x=100 "
+</pre></td></tr></table>
+
+<p>To change the color of the left side of the video, the following
+command can be used:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_0 c yellow | tools/zmqsend
+</pre></td></tr></table>
+
+<p>To change the right side:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_1 c pink | tools/zmqsend
+</pre></td></tr></table>
+
+
+<a name="Multimedia-Sources"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Multimedia-Sources">13. Multimedia Sources</a></h1>
+
+<p>Below is a description of the currently available multimedia sources.
+</p>
+<a name="amovie"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-amovie">13.1 amovie</a></h2>
+
+<p>This is the same as <a href="#movie">movie</a> source, except it selects an audio
+stream by default.
+</p>
+<p><a name="movie"></a>
+</p><a name="movie-1"></a>
+<h2 class="section"><a href="ffmpeg-filters.html#toc-movie-1">13.2 movie</a></h2>
+
+<p>Read audio and/or video stream(s) from a movie container.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>The name of the resource to read (not necessarily a file but also a device or a
+stream accessed through some protocol).
+</p>
+</dd>
+<dt> ‘<samp>format_name, f</samp>’</dt>
+<dd><p>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 <var>movie_name</var> or by probing.
+</p>
+</dd>
+<dt> ‘<samp>seek_point, sp</samp>’</dt>
+<dd><p>Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+<code>av_strtod</code> so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+</p>
+</dd>
+<dt> ‘<samp>streams, s</samp>’</dt>
+<dd><p>Specifies the streams to read. Several streams can be specified,
+separated by "+". The source will then have as many outputs, in the
+same order. The syntax is explained in the “Stream specifiers”
+section in the ffmpeg manual. Two special names, "dv" and "da" specify
+respectively the default (best suited) video and audio stream. Default
+is "dv", or "da" if the filter is called as "amovie".
+</p>
+</dd>
+<dt> ‘<samp>stream_index, si</samp>’</dt>
+<dd><p>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". Deprecated. If the filter is called "amovie", it will select
+audio instead of video.
+</p>
+</dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Specifies how many times to read the stream in sequence.
+If the value is less than 1, the stream will be read again and again.
+Default value is "1".
+</p>
+<p>Note that when the movie is looped the source timestamps are not
+changed, so it will generate non monotonically increasing timestamps.
+</p></dd>
+</dl>
+
+<p>This filter allows one to overlay a second video on top of main input of
+a filtergraph as shown in this graph:
+</p><table><tr><td> </td><td><pre class="example">input -----------> deltapts0 --> overlay --> output
+ ^
+ |
+movie --> scale--> deltapts1 -------+
+</pre></td></tr></table>
+
+<a name="Examples-69"></a>
+<h3 class="subsection"><a href="ffmpeg-filters.html#toc-Examples-69">13.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Skip 3.2 seconds from the start of the avi file in.avi, and overlay it
+on top of the input labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read from a video4linux2 device, and overlay it on top of the input
+labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read the first video stream and the audio stream with id 0x81 from
+dvd.vob; the video is connected to the pad named "video" and the audio is
+connected to the pad named "audio":
+<table><tr><td> </td><td><pre class="example">movie=dvd.vob:s=v:0+#0x81 [video] [audio]
+</pre></td></tr></table>
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-See-Also">14. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavfilter.html">libavfilter</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-filters.html#toc-Authors">15. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Formats </title>
+
+<meta name="description" content="FFmpeg Formats Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Formats ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Formats Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Format-Options" href="#Format-Options">2. Format Options</a>
+ <ul class="toc">
+ <li><a name="toc-Format-stream-specifiers-1" href="#Format-stream-specifiers-1">2.1 Format stream specifiers</a></li>
+ </ul></li>
+ <li><a name="toc-Demuxers" href="#Demuxers">3. Demuxers</a>
+ <ul class="toc">
+ <li><a name="toc-applehttp" href="#applehttp">3.1 applehttp</a></li>
+ <li><a name="toc-asf" href="#asf">3.2 asf</a></li>
+ <li><a name="toc-concat-1" href="#concat-1">3.3 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax" href="#Syntax">3.3.1 Syntax</a></li>
+ <li><a name="toc-Options-6" href="#Options-6">3.3.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-flv" href="#flv">3.4 flv</a></li>
+ <li><a name="toc-libgme" href="#libgme">3.5 libgme</a></li>
+ <li><a name="toc-libquvi" href="#libquvi">3.6 libquvi</a></li>
+ <li><a name="toc-image2-2" href="#image2-2">3.7 image2</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-6" href="#Examples-6">3.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpegts-1" href="#mpegts-1">3.8 mpegts</a></li>
+ <li><a name="toc-rawvideo" href="#rawvideo">3.9 rawvideo</a></li>
+ <li><a name="toc-sbg" href="#sbg">3.10 sbg</a></li>
+ <li><a name="toc-tedcaptions" href="#tedcaptions">3.11 tedcaptions</a></li>
+ </ul></li>
+ <li><a name="toc-Muxers" href="#Muxers">4. Muxers</a>
+ <ul class="toc">
+ <li><a name="toc-aiff-1" href="#aiff-1">4.1 aiff</a>
+ <ul class="toc">
+ <li><a name="toc-Options-5" href="#Options-5">4.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-crc-1" href="#crc-1">4.2 crc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">4.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framecrc-1" href="#framecrc-1">4.3 framecrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-4" href="#Examples-4">4.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framemd5-1" href="#framemd5-1">4.4 framemd5</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">4.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-gif-1" href="#gif-1">4.5 gif</a></li>
+ <li><a name="toc-hls-1" href="#hls-1">4.6 hls</a>
+ <ul class="toc">
+ <li><a name="toc-Options-3" href="#Options-3">4.6.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-ico-1" href="#ico-1">4.7 ico</a></li>
+ <li><a name="toc-image2-1" href="#image2-1">4.8 image2</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-2" href="#Examples-2">4.8.1 Examples</a></li>
+ <li><a name="toc-Options-7" href="#Options-7">4.8.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-matroska" href="#matroska">4.9 matroska</a>
+ <ul class="toc">
+ <li><a name="toc-Metadata" href="#Metadata">4.9.1 Metadata</a></li>
+ <li><a name="toc-Options" href="#Options">4.9.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-md5-1" href="#md5-1">4.10 md5</a></li>
+ <li><a name="toc-mov_002c-mp4_002c-ismv" href="#mov_002c-mp4_002c-ismv">4.11 mov, mp4, ismv</a>
+ <ul class="toc">
+ <li><a name="toc-Options-2" href="#Options-2">4.11.1 Options</a></li>
+ <li><a name="toc-Example-1" href="#Example-1">4.11.2 Example</a></li>
+ </ul></li>
+ <li><a name="toc-mp3" href="#mp3">4.12 mp3</a></li>
+ <li><a name="toc-mpegts" href="#mpegts">4.13 mpegts</a>
+ <ul class="toc">
+ <li><a name="toc-Options-4" href="#Options-4">4.13.1 Options</a></li>
+ <li><a name="toc-Example" href="#Example">4.13.2 Example</a></li>
+ </ul></li>
+ <li><a name="toc-null" href="#null">4.14 null</a></li>
+ <li><a name="toc-ogg" href="#ogg">4.15 ogg</a></li>
+ <li><a name="toc-segment_002c-stream_005fsegment_002c-ssegment" href="#segment_002c-stream_005fsegment_002c-ssegment">4.16 segment, stream_segment, ssegment</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">4.16.1 Options</a></li>
+ <li><a name="toc-Examples-3" href="#Examples-3">4.16.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tee" href="#tee">4.17 tee</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-5" href="#Examples-5">4.17.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Metadata-1" href="#Metadata-1">5. Metadata</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">6. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">7. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes the supported formats (muxers and demuxers)
+provided by the libavformat library.
+</p>
+
+<a name="Format-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-Format-Options">2. Format Options</a></h1>
+
+<p>The libavformat library provides some generic global options, which
+can be set on all the muxers and demuxers. In addition each muxer or
+demuxer may support so-called private options, which are specific for
+that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>avioflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>direct</samp>’</dt>
+<dd><p>Reduce buffering.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>probesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set probing size in bytes, i.e. the size of the data to analyze to get
+stream information. A higher value will allow to detect more
+information in case it is dispersed into the stream, but will increase
+latency. Must be an integer not lesser than 32. It is 5000000 by default.
+</p>
+</dd>
+<dt> ‘<samp>packetsize <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set packet size.
+</p>
+</dd>
+<dt> ‘<samp>fflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set format flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ignidx</samp>’</dt>
+<dd><p>Ignore index.
+</p></dd>
+<dt> ‘<samp>genpts</samp>’</dt>
+<dd><p>Generate PTS.
+</p></dd>
+<dt> ‘<samp>nofillin</samp>’</dt>
+<dd><p>Do not fill in missing values that can be exactly calculated.
+</p></dd>
+<dt> ‘<samp>noparse</samp>’</dt>
+<dd><p>Disable AVParsers, this needs <code>+nofillin</code> too.
+</p></dd>
+<dt> ‘<samp>igndts</samp>’</dt>
+<dd><p>Ignore DTS.
+</p></dd>
+<dt> ‘<samp>discardcorrupt</samp>’</dt>
+<dd><p>Discard corrupted frames.
+</p></dd>
+<dt> ‘<samp>sortdts</samp>’</dt>
+<dd><p>Try to interleave output packets by DTS.
+</p></dd>
+<dt> ‘<samp>keepside</samp>’</dt>
+<dd><p>Do not merge side data.
+</p></dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Enable RTP MP4A-LATM payload.
+</p></dd>
+<dt> ‘<samp>nobuffer</samp>’</dt>
+<dd><p>Reduce the latency introduced by optional buffering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seek2any <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Allow seeking to non-keyframes on demuxer level when supported if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>analyzeduration <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Specify how many microseconds are analyzed to probe the input. A
+higher value will allow to detect more accurate information, but will
+increase latency. It defaults to 5,000,000 microseconds = 5 seconds.
+</p>
+</dd>
+<dt> ‘<samp>cryptokey <var>hexadecimal string</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set decryption key.
+</p>
+</dd>
+<dt> ‘<samp>indexmem <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for timestamp index (per stream).
+</p>
+</dd>
+<dt> ‘<samp>rtbufsize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for buffering real-time frames.
+</p>
+</dd>
+<dt> ‘<samp>fdebug <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ts</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>max_delay <var>integer</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set maximum muxing or demuxing delay in microseconds.
+</p>
+</dd>
+<dt> ‘<samp>fpsprobesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of frames used to probe fps.
+</p>
+</dd>
+<dt> ‘<samp>audio_preload <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds by which audio packets should be interleaved earlier.
+</p>
+</dd>
+<dt> ‘<samp>chunk_duration <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>chunk_size <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set size in bytes for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>err_detect, f_err_detect <var>flags</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set error detection flags. <code>f_err_detect</code> is deprecated and
+should be used only via the <code>ffmpeg</code> tool.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>Verify embedded CRCs.
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>Detect bitstream specification deviations.
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>Detect improper bitstream length.
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>Abort decoding on minor error detection.
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>Consider things that violate the spec and have not been seen in the
+wild as errors.
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>Consider all spec non compliancies as errors.
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>Consider things that a sane encoder should not do as an error.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_wallclock_as_timestamps <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Use wallclock as timestamps.
+</p>
+</dd>
+<dt> ‘<samp>avoid_negative_ts <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>make_non_negative</samp>’</dt>
+<dd><p>Shift timestamps to make them non-negative.
+Also note that this affects only leading negative timestamps, and not
+non-monotonic negative timestamps.
+</p></dd>
+<dt> ‘<samp>make_zero</samp>’</dt>
+<dd><p>Shift timestamps so that the first timestamp is 0.
+</p></dd>
+<dt> ‘<samp>auto (default)</samp>’</dt>
+<dd><p>Enables shifting when required by the target format.
+</p></dd>
+<dt> ‘<samp>disabled</samp>’</dt>
+<dd><p>Disables shifting of timestamp.
+</p></dd>
+</dl>
+
+<p>When shifting is enabled, all output timestamps are shifted by the
+same amount. Audio, video, and subtitles desynching and relative
+timestamp differences are preserved compared to how they would have
+been without shifting.
+</p>
+</dd>
+<dt> ‘<samp>skip_initial_bytes <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of bytes to skip before reading header and frames if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>correct_ts_overflow <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Correct single timestamp overflows if set to 1. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>flush_packets <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Flush the underlying I/O stream after each packet. Default 1 enables it, and
+has the effect of reducing the latency; 0 disables it and may slightly
+increase performance in some cases.
+</p>
+</dd>
+<dt> ‘<samp>output_ts_offset <var>offset</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the output time offset.
+</p>
+<p><var>offset</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#time-duration-syntax">(ffmpeg-utils)time duration syntax</a>.
+</p>
+<p>The offset is added by the muxer to the output timestamps.
+</p>
+<p>Specifying a positive offset means that the corresponding streams are
+delayed bt the time duration specified in <var>offset</var>. Default value
+is <code>0</code> (meaning that no offset is applied).
+</p></dd>
+</dl>
+
+
+<p><a name="Format-stream-specifiers"></a>
+</p><a name="Format-stream-specifiers-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-Format-stream-specifiers-1">2.1 Format stream specifiers</a></h2>
+
+<p>Format stream specifiers allow selection of one or more streams that
+match specific properties.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index.
+</p>
+</dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio,
+’s’ for subtitle, ’d’ for data, and ’t’ for attachments. If
+<var>stream_index</var> is given, then it matches the stream number
+<var>stream_index</var> of this type. Otherwise, it matches all streams of
+this type.
+</p>
+</dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number
+<var>stream_index</var> in the program with the id
+<var>program_id</var>. Otherwise, it matches all streams in the program.
+</p>
+</dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<p>The exact semantics of stream specifiers is defined by the
+<code>avformat_match_stream_specifier()</code> function declared in the
+‘<tt>libavformat/avformat.h</tt>’ header.
+</p>
+<a name="Demuxers"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-Demuxers">3. Demuxers</a></h1>
+
+<p>Demuxers are configured elements in FFmpeg that can read the
+multimedia streams from a particular type of file.
+</p>
+<p>When you configure your FFmpeg build, all the supported demuxers
+are enabled by default. You can list all available ones using the
+configure option <code>--list-demuxers</code>.
+</p>
+<p>You can disable all the demuxers using the configure option
+<code>--disable-demuxers</code>, and selectively enable a single demuxer with
+the option <code>--enable-demuxer=<var>DEMUXER</var></code>, or disable it
+with the option <code>--disable-demuxer=<var>DEMUXER</var></code>.
+</p>
+<p>The option <code>-formats</code> of the ff* tools will display the list of
+enabled demuxers.
+</p>
+<p>The description of some of the currently available demuxers follows.
+</p>
+<a name="applehttp"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-applehttp">3.1 applehttp</a></h2>
+
+<p>Apple HTTP Live Streaming demuxer.
+</p>
+<p>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".
+</p>
+<a name="asf"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-asf">3.2 asf</a></h2>
+
+<p>Advanced Systems Format demuxer.
+</p>
+<p>This demuxer is used to demux ASF files and MMS network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-no_resync_search <var>bool</var></samp>’</dt>
+<dd><p>Do not try to resynchronize by looking for a certain optional start code.
+</p></dd>
+</dl>
+
+<p><a name="concat"></a>
+</p><a name="concat-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-concat-1">3.3 concat</a></h2>
+
+<p>Virtual concatenation script demuxer.
+</p>
+<p>This demuxer reads a list of files and other directives from a text file and
+demuxes them one after the other, as if all their packet had been muxed
+together.
+</p>
+<p>The timestamps in the files are adjusted so that the first file starts at 0
+and each next file starts where the previous one finishes. Note that it is
+done globally and may cause gaps if all streams do not have exactly the same
+length.
+</p>
+<p>All files must have the same streams (same codecs, same time base, etc.).
+</p>
+<p>The duration of each file is used to adjust the timestamps of the next file:
+if the duration is incorrect (because it was computed using the bit-rate or
+because the file is truncated, for example), it can cause artifacts. The
+<code>duration</code> directive can be used to override the duration stored in
+each file.
+</p>
+<a name="Syntax"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Syntax">3.3.1 Syntax</a></h3>
+
+<p>The script is a text file in extended-ASCII, with one directive per line.
+Empty lines, leading spaces and lines starting with ’#’ are ignored. The
+following directive is recognized:
+</p>
+<dl compact="compact">
+<dt> ‘<samp><code>file <var>path</var></code></samp>’</dt>
+<dd><p>Path to a file to read; special characters and spaces must be escaped with
+backslash or single quotes.
+</p>
+<p>All subsequent directives apply to that file.
+</p>
+</dd>
+<dt> ‘<samp><code>ffconcat version 1.0</code></samp>’</dt>
+<dd><p>Identify the script type and version. It also sets the ‘<samp>safe</samp>’ option
+to 1 if it was to its default -1.
+</p>
+<p>To make FFmpeg recognize the format automatically, this directive must
+appears exactly as is (no extra space or byte-order-mark) on the very first
+line of the script.
+</p>
+</dd>
+<dt> ‘<samp><code>duration <var>dur</var></code></samp>’</dt>
+<dd><p>Duration of the file. This information can be specified from the file;
+specifying it here may be more efficient or help if the information from the
+file is not available or accurate.
+</p>
+<p>If the duration is set for all files, then it is possible to seek in the
+whole concatenated video.
+</p>
+</dd>
+</dl>
+
+<a name="Options-6"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-6">3.3.2 Options</a></h3>
+
+<p>This demuxer accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>safe</samp>’</dt>
+<dd><p>If set to 1, reject unsafe file paths. A file path is considered safe if it
+does not contain a protocol specification and is relative and all components
+only contain characters from the portable character set (letters, digits,
+period, underscore and hyphen) and have no period at the beginning of a
+component.
+</p>
+<p>If set to 0, any file name is accepted.
+</p>
+<p>The default is -1, it is equivalent to 1 if the format was automatically
+probed and 0 otherwise.
+</p>
+</dd>
+</dl>
+
+<a name="flv"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-flv">3.4 flv</a></h2>
+
+<p>Adobe Flash Video Format demuxer.
+</p>
+<p>This demuxer is used to demux FLV files and RTMP network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-flv_metadata <var>bool</var></samp>’</dt>
+<dd><p>Allocate the streams according to the onMetaData array content.
+</p></dd>
+</dl>
+
+<a name="libgme"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-libgme">3.5 libgme</a></h2>
+
+<p>The Game Music Emu library is a collection of video game music file emulators.
+</p>
+<p>See <a href="http://code.google.com/p/game-music-emu/">http://code.google.com/p/game-music-emu/</a> for more information.
+</p>
+<p>Some files have multiple tracks. The demuxer will pick the first track by
+default. The ‘<samp>track_index</samp>’ option can be used to select a different
+track. Track indexes start at 0. The demuxer exports the number of tracks as
+<var>tracks</var> meta data entry.
+</p>
+<p>For very large files, the ‘<samp>max_size</samp>’ option may have to be adjusted.
+</p>
+<a name="libquvi"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-libquvi">3.6 libquvi</a></h2>
+
+<p>Play media from Internet services using the quvi project.
+</p>
+<p>The demuxer accepts a ‘<samp>format</samp>’ option to request a specific quality. It
+is by default set to <var>best</var>.
+</p>
+<p>See <a href="http://quvi.sourceforge.net/">http://quvi.sourceforge.net/</a> for more information.
+</p>
+<p>FFmpeg needs to be built with <code>--enable-libquvi</code> for this demuxer to be
+enabled.
+</p>
+<a name="image2-2"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-image2-2">3.7 image2</a></h2>
+
+<p>Image file demuxer.
+</p>
+<p>This demuxer reads from a list of image files specified by a pattern.
+The syntax and meaning of the pattern is specified by the
+option <var>pattern_type</var>.
+</p>
+<p>The pattern may contain a suffix which is used to automatically
+determine the format of the images contained in the files.
+</p>
+<p>The size, the pixel format, and the format of each image must be the
+same for all the files in the sequence.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate for the video stream. It defaults to 25.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>If set to 1, loop over the input. Default value is 0.
+</p></dd>
+<dt> ‘<samp>pattern_type</samp>’</dt>
+<dd><p>Select the pattern type used to interpret the provided filename.
+</p>
+<p><var>pattern_type</var> accepts one of the following values.
+</p><dl compact="compact">
+<dt> ‘<samp>sequence</samp>’</dt>
+<dd><p>Select a sequence pattern type, used to specify a sequence of files
+indexed by sequential numbers.
+</p>
+<p>A sequence pattern may contain the string "%d" or "%0<var>N</var>d", which
+specifies the position of the characters representing a sequential
+number in each filename matched by the pattern. If the form
+"%d0<var>N</var>d" is used, the string representing the number in each
+filename is 0-padded and <var>N</var> is the total number of 0-padded
+digits representing the number. The literal character ’%’ can be
+specified in the pattern with the string "%%".
+</p>
+<p>If the sequence pattern contains "%d" or "%0<var>N</var>d", the first filename of
+the file list specified by the pattern must contain a number
+inclusively contained between <var>start_number</var> and
+<var>start_number</var>+<var>start_number_range</var>-1, and all the following
+numbers must be sequential.
+</p>
+<p>For example the pattern "img-%03d.bmp" will match a sequence of
+filenames of the form ‘<tt>img-001.bmp</tt>’, ‘<tt>img-002.bmp</tt>’, ...,
+‘<tt>img-010.bmp</tt>’, etc.; the pattern "i%%m%%g-%d.jpg" will match a
+sequence of filenames of the form ‘<tt>i%m%g-1.jpg</tt>’,
+‘<tt>i%m%g-2.jpg</tt>’, ..., ‘<tt>i%m%g-10.jpg</tt>’, etc.
+</p>
+<p>Note that the pattern must not necessarily contain "%d" or
+"%0<var>N</var>d", for example to convert a single image file
+‘<tt>img.jpeg</tt>’ you can employ the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i img.jpeg img.png
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>glob</samp>’</dt>
+<dd><p>Select a glob wildcard pattern type.
+</p>
+<p>The pattern is interpreted like a <code>glob()</code> pattern. This is only
+selectable if libavformat was compiled with globbing support.
+</p>
+</dd>
+<dt> ‘<samp>glob_sequence <em>(deprecated, will be removed)</em></samp>’</dt>
+<dd><p>Select a mixed glob wildcard/sequence pattern.
+</p>
+<p>If your version of libavformat was compiled with globbing support, and
+the provided pattern contains at least one glob meta character among
+<code>%*?[]{}</code> that is preceded by an unescaped "%", the pattern is
+interpreted like a <code>glob()</code> pattern, otherwise it is interpreted
+like a sequence pattern.
+</p>
+<p>All glob special characters <code>%*?[]{}</code> must be prefixed
+with "%". To escape a literal "%" you shall use "%%".
+</p>
+<p>For example the pattern <code>foo-%*.jpeg</code> will match all the
+filenames prefixed by "foo-" and terminating with ".jpeg", and
+<code>foo-%?%?%?.jpeg</code> will match all the filenames prefixed with
+"foo-", followed by a sequence of three characters, and terminating
+with ".jpeg".
+</p>
+<p>This pattern type is deprecated in favor of <var>glob</var> and
+<var>sequence</var>.
+</p></dd>
+</dl>
+
+<p>Default value is <var>glob_sequence</var>.
+</p></dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the pixel format of the images to read. If not specified the pixel
+format is guessed from the first image file in the sequence.
+</p></dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>Set the index of the file matched by the image file pattern to start
+to read from. Default value is 0.
+</p></dd>
+<dt> ‘<samp>start_number_range</samp>’</dt>
+<dd><p>Set the index interval range to check when looking for the first image
+file in the sequence, starting from <var>start_number</var>. Default value
+is 5.
+</p></dd>
+<dt> ‘<samp>ts_from_file</samp>’</dt>
+<dd><p>If set to 1, will set frame timestamp to modification time of image file. Note
+that monotonity of timestamps is not provided: images go in the same order as
+without this option. Default value is 0.
+</p></dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size of the images to read. If not specified the video
+size is guessed from the first image file in the sequence.
+</p></dd>
+</dl>
+
+<a name="Examples-6"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples-6">3.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for creating a video from the images in the file
+sequence ‘<tt>img-001.jpeg</tt>’, ‘<tt>img-002.jpeg</tt>’, ..., assuming an
+input frame rate of 10 frames per second:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+As above, but start by reading from a file with index 100 in the sequence:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+Read images matching the "*.png" glob pattern , that is all the files
+terminating with the ".png" suffix:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mpegts-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-mpegts-1">3.8 mpegts</a></h2>
+
+<p>MPEG-2 transport stream demuxer.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fix_teletext_pts</samp>’</dt>
+<dd><p>Overrides teletext packet PTS and DTS values with the timestamps calculated
+from the PCR of the first program which the teletext stream is part of and is
+not discarded. Default value is 1, set this option to 0 if you want your
+teletext packet PTS and DTS values untouched.
+</p></dd>
+</dl>
+
+<a name="rawvideo"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-rawvideo">3.9 rawvideo</a></h2>
+
+<p>Raw video demuxer.
+</p>
+<p>This demuxer allows one to read raw video data. Since there is no header
+specifying the assumed video parameters, the user must specify them
+in order to be able to decode the data correctly.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set input video frame rate. Default value is 25.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the input video pixel format. Default value is <code>yuv420p</code>.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the input video size. This value must be specified explicitly.
+</p></dd>
+</dl>
+
+<p>For example to read a rawvideo file ‘<tt>input.raw</tt>’ with
+<code>ffplay</code>, assuming a pixel format of <code>rgb24</code>, a video
+size of <code>320x240</code>, and a frame rate of 10 images per second, use
+the command:
+</p><table><tr><td> </td><td><pre class="example">ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
+</pre></td></tr></table>
+
+<a name="sbg"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-sbg">3.10 sbg</a></h2>
+
+<p>SBaGen script demuxer.
+</p>
+<p>This demuxer reads the script language used by SBaGen
+<a href="http://uazu.net/sbagen/">http://uazu.net/sbagen/</a> to generate binaural beats sessions. A SBG
+script looks like that:
+</p><table><tr><td> </td><td><pre class="example">-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
+</pre></td></tr></table>
+
+<p>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 <var>NOW</var> 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.
+</p>
+<a name="tedcaptions"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-tedcaptions">3.11 tedcaptions</a></h2>
+
+<p>JSON captions used for <a href="http://www.ted.com/">TED Talks</a>.
+</p>
+<p>TED does not provide links to the captions, but they can be guessed from the
+page. The file ‘<tt>tools/bookmarklets.html</tt>’ from the FFmpeg source tree
+contains a bookmarklet to expose them.
+</p>
+<p>This demuxer accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Set the start time of the TED talk, in milliseconds. The default is 15000
+(15s). It is used to sync the captions with the downloadable videos, because
+they include a 15s intro.
+</p></dd>
+</dl>
+
+<p>Example: convert the captions to a format most players understand:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
+</pre></td></tr></table>
+
+<a name="Muxers"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-Muxers">4. Muxers</a></h1>
+
+<p>Muxers are configured elements in FFmpeg which allow writing
+multimedia streams to a particular type of file.
+</p>
+<p>When you configure your FFmpeg build, all the supported muxers
+are enabled by default. You can list all available muxers using the
+configure option <code>--list-muxers</code>.
+</p>
+<p>You can disable all the muxers with the configure option
+<code>--disable-muxers</code> and selectively enable / disable single muxers
+with the options <code>--enable-muxer=<var>MUXER</var></code> /
+<code>--disable-muxer=<var>MUXER</var></code>.
+</p>
+<p>The option <code>-formats</code> of the ff* tools will display the list of
+enabled muxers.
+</p>
+<p>A description of some of the currently available muxers follows.
+</p>
+<p><a name="aiff"></a>
+</p><a name="aiff-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-aiff-1">4.1 aiff</a></h2>
+
+<p>Audio Interchange File Format muxer.
+</p>
+<a name="Options-5"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-5">4.1.1 Options</a></h3>
+
+<p>It accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>write_id3v2</samp>’</dt>
+<dd><p>Enable ID3v2 tags writing when set to 1. Default is 0 (disabled).
+</p>
+</dd>
+<dt> ‘<samp>id3v2_version</samp>’</dt>
+<dd><p>Select ID3v2 version to write. Currently only version 3 and 4 (aka.
+ID3v2.3 and ID3v2.4) are supported. The default is version 4.
+</p>
+</dd>
+</dl>
+
+<p><a name="crc"></a>
+</p><a name="crc-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-crc-1">4.2 crc</a></h2>
+
+<p>CRC (Cyclic Redundancy Check) testing format.
+</p>
+<p>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.
+</p>
+<p>The output of the muxer consists of a single line of the form:
+CRC=0x<var>CRC</var>, where <var>CRC</var> is a hexadecimal number 0-padded to
+8 digits containing the CRC for all the decoded input frames.
+</p>
+<p>See also the <a href="#framecrc">framecrc</a> muxer.
+</p>
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples">4.2.1 Examples</a></h3>
+
+<p>For example to compute the CRC of the input, and store it in the file
+‘<tt>out.crc</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f crc out.crc
+</pre></td></tr></table>
+
+<p>You can print the CRC to stdout with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f crc -
+</pre></td></tr></table>
+
+<p>You can select the output format of each frame with <code>ffmpeg</code> 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:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
+</pre></td></tr></table>
+
+<p><a name="framecrc"></a>
+</p><a name="framecrc-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-framecrc-1">4.3 framecrc</a></h2>
+
+<p>Per-packet CRC (Cyclic Redundancy Check) testing format.
+</p>
+<p>This muxer computes and prints the Adler-32 CRC for each audio
+and video packet. By default audio frames are converted to signed
+16-bit raw audio and video frames to raw video before computing the
+CRC.
+</p>
+<p>The output of the muxer consists of a line for each audio and video
+packet of the form:
+</p><table><tr><td> </td><td><pre class="example"><var>stream_index</var>, <var>packet_dts</var>, <var>packet_pts</var>, <var>packet_duration</var>, <var>packet_size</var>, 0x<var>CRC</var>
+</pre></td></tr></table>
+
+<p><var>CRC</var> is a hexadecimal number 0-padded to 8 digits containing the
+CRC of the packet.
+</p>
+<a name="Examples-4"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples-4">4.3.1 Examples</a></h3>
+
+<p>For example to compute the CRC of the audio and video frames in
+‘<tt>INPUT</tt>’, converted to raw audio and video packets, and store it
+in the file ‘<tt>out.crc</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framecrc out.crc
+</pre></td></tr></table>
+
+<p>To print the information to stdout, use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framecrc -
+</pre></td></tr></table>
+
+<p>With <code>ffmpeg</code>, you can select the output format to which the
+audio and video frames are encoded before computing the CRC for each
+packet by specifying the audio and video codec. 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:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
+</pre></td></tr></table>
+
+<p>See also the <a href="#crc">crc</a> muxer.
+</p>
+<p><a name="framemd5"></a>
+</p><a name="framemd5-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-framemd5-1">4.4 framemd5</a></h2>
+
+<p>Per-packet MD5 testing format.
+</p>
+<p>This muxer computes and prints the MD5 hash for each audio
+and video packet. By default audio frames are converted to signed
+16-bit raw audio and video frames to raw video before computing the
+hash.
+</p>
+<p>The output of the muxer consists of a line for each audio and video
+packet of the form:
+</p><table><tr><td> </td><td><pre class="example"><var>stream_index</var>, <var>packet_dts</var>, <var>packet_pts</var>, <var>packet_duration</var>, <var>packet_size</var>, <var>MD5</var>
+</pre></td></tr></table>
+
+<p><var>MD5</var> is a hexadecimal number representing the computed MD5 hash
+for the packet.
+</p>
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples-1">4.4.1 Examples</a></h3>
+
+<p>For example to compute the MD5 of the audio and video frames in
+‘<tt>INPUT</tt>’, converted to raw audio and video packets, and store it
+in the file ‘<tt>out.md5</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framemd5 out.md5
+</pre></td></tr></table>
+
+<p>To print the information to stdout, use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f framemd5 -
+</pre></td></tr></table>
+
+<p>See also the <a href="#md5">md5</a> muxer.
+</p>
+<p><a name="gif"></a>
+</p><a name="gif-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-gif-1">4.5 gif</a></h2>
+
+<p>Animated GIF muxer.
+</p>
+<p>It accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Set the number of times to loop the output. Use <code>-1</code> for no loop, <code>0</code>
+for looping indefinitely (default).
+</p>
+</dd>
+<dt> ‘<samp>final_delay</samp>’</dt>
+<dd><p>Force the delay (expressed in centiseconds) after the last frame. Each frame
+ends with a delay until the next frame. The default is <code>-1</code>, which is a
+special value to tell the muxer to re-use the previous delay. In case of a
+loop, you might want to customize this value to mark a pause for instance.
+</p></dd>
+</dl>
+
+<p>For example, to encode a gif looping 10 times, with a 5 seconds delay between
+the loops:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
+</pre></td></tr></table>
+
+<p>Note 1: if you wish to extract the frames in separate GIF files, you need to
+force the <a href="#image2">image2</a> muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
+</pre></td></tr></table>
+
+<p>Note 2: the GIF format has a very small time base: the delay between two frames
+can not be smaller than one centi second.
+</p>
+<p><a name="hls"></a>
+</p><a name="hls-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-hls-1">4.6 hls</a></h2>
+
+<p>Apple HTTP Live Streaming muxer that segments MPEG-TS according to
+the HTTP Live Streaming (HLS) specification.
+</p>
+<p>It creates a playlist file and numbered segment files. The output
+filename specifies the playlist filename; the segment filenames
+receive the same basename as the playlist, a sequential number and
+a .ts extension.
+</p>
+<p>For example, to convert an input file with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.nut out.m3u8
+</pre></td></tr></table>
+
+<p>See also the <a href="#segment">segment</a> muxer, which provides a more generic and
+flexible implementation of a segmenter, and can be used to perform HLS
+segmentation.
+</p>
+<a name="Options-3"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-3">4.6.1 Options</a></h3>
+
+<p>This muxer supports the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hls_time <var>seconds</var></samp>’</dt>
+<dd><p>Set the segment length in seconds. Default value is 2.
+</p>
+</dd>
+<dt> ‘<samp>hls_list_size <var>size</var></samp>’</dt>
+<dd><p>Set the maximum number of playlist entries. If set to 0 the list file
+will contain all the segments. Default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>hls_wrap <var>wrap</var></samp>’</dt>
+<dd><p>Set the number after which the segment filename number (the number
+specified in each segment file) wraps. If set to 0 the number will be
+never wrapped. Default value is 0.
+</p>
+<p>This option is useful to avoid to fill the disk with many segment
+files, and limits the maximum number of segment files written to disk
+to <var>wrap</var>.
+</p>
+</dd>
+<dt> ‘<samp>start_number <var>number</var></samp>’</dt>
+<dd><p>Start the playlist sequence number from <var>number</var>. Default value is
+0.
+</p>
+<p>Note that the playlist sequence number must be unique for each segment
+and it is not to be confused with the segment filename sequence number
+which can be cyclic, for example if the ‘<samp>wrap</samp>’ option is
+specified.
+</p></dd>
+</dl>
+
+<p><a name="ico"></a>
+</p><a name="ico-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-ico-1">4.7 ico</a></h2>
+
+<p>ICO file muxer.
+</p>
+<p>Microsoft’s icon file format (ICO) has some strict limitations that should be noted:
+</p>
+<ul>
+<li>
+Size cannot exceed 256 pixels in any dimension
+
+</li><li>
+Only BMP and PNG images can be stored
+
+</li><li>
+If a BMP image is used, it must be one of the following pixel formats:
+<table><tr><td> </td><td><pre class="example">BMP Bit Depth FFmpeg Pixel Format
+1bit pal8
+4bit pal8
+8bit pal8
+16bit rgb555le
+24bit bgr24
+32bit bgra
+</pre></td></tr></table>
+
+</li><li>
+If a BMP image is used, it must use the BITMAPINFOHEADER DIB header
+
+</li><li>
+If a PNG image is used, it must use the rgba pixel format
+</li></ul>
+
+<p><a name="image2"></a>
+</p><a name="image2-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-image2-1">4.8 image2</a></h2>
+
+<p>Image file muxer.
+</p>
+<p>The image file muxer writes video frames to image files.
+</p>
+<p>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 "%0<var>N</var>d", this string
+specifies the position of the characters representing a numbering in
+the filenames. If the form "%0<var>N</var>d" is used, the string
+representing the number in each filename is 0-padded to <var>N</var>
+digits. The literal character ’%’ can be specified in the pattern with
+the string "%%".
+</p>
+<p>If the pattern contains "%d" or "%0<var>N</var>d", the first filename of
+the file list specified will contain the number 1, all the following
+numbers will be sequential.
+</p>
+<p>The pattern may contain a suffix which is used to automatically
+determine the format of the image files to write.
+</p>
+<p>For example the pattern "img-%03d.bmp" will specify a sequence of
+filenames of the form ‘<tt>img-001.bmp</tt>’, ‘<tt>img-002.bmp</tt>’, ...,
+‘<tt>img-010.bmp</tt>’, etc.
+The pattern "img%%-%d.jpg" will specify a sequence of filenames of the
+form ‘<tt>img%-1.jpg</tt>’, ‘<tt>img%-2.jpg</tt>’, ..., ‘<tt>img%-10.jpg</tt>’,
+etc.
+</p>
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples-2">4.8.1 Examples</a></h3>
+
+<p>The following example shows how to use <code>ffmpeg</code> for creating a
+sequence of files ‘<tt>img-001.jpeg</tt>’, ‘<tt>img-002.jpeg</tt>’, ...,
+taking one image every second from the input video:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vsync 1 -r 1 -f image2 'img-%03d.jpeg'
+</pre></td></tr></table>
+
+<p>Note that with <code>ffmpeg</code>, if the format is not specified with the
+<code>-f</code> option and the output filename specifies an image file
+format, the image2 muxer is automatically selected, so the previous
+command can be written as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vsync 1 -r 1 'img-%03d.jpeg'
+</pre></td></tr></table>
+
+<p>Note also that the pattern must not necessarily contain "%d" or
+"%0<var>N</var>d", for example to create a single image file
+‘<tt>img.jpeg</tt>’ from the input video you can employ the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
+</pre></td></tr></table>
+
+<p>The ‘<samp>strftime</samp>’ option allows you to expand the filename with
+date and time information. Check the documentation of
+the <code>strftime()</code> function for the syntax.
+</p>
+<p>For example to generate image files from the <code>strftime()</code>
+"%Y-%m-%d_%H-%M-%S" pattern, the following <code>ffmpeg</code> command
+can be used:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
+</pre></td></tr></table>
+
+<a name="Options-7"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-7">4.8.2 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>Start the sequence from the specified number. Default value is 1. Must
+be a non-negative number.
+</p>
+</dd>
+<dt> ‘<samp>update</samp>’</dt>
+<dd><p>If set to 1, the filename will always be interpreted as just a
+filename, not a pattern, and the corresponding file will be continuously
+overwritten with new images. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>strftime</samp>’</dt>
+<dd><p>If set to 1, expand the filename with date and time information from
+<code>strftime()</code>. Default value is 0.
+</p></dd>
+</dl>
+
+<p>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.
+</p>
+<a name="matroska"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-matroska">4.9 matroska</a></h2>
+
+<p>Matroska container muxer.
+</p>
+<p>This muxer implements the matroska and webm container specs.
+</p>
+<a name="Metadata"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Metadata">4.9.1 Metadata</a></h3>
+
+<p>The recognized metadata settings in this muxer are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>title</samp>’</dt>
+<dd><p>Set title name provided to a single track.
+</p>
+</dd>
+<dt> ‘<samp>language</samp>’</dt>
+<dd><p>Specify the language of the track in the Matroska languages form.
+</p>
+<p>The language can be either the 3 letters bibliographic ISO-639-2 (ISO
+639-2/B) form (like "fre" for French), or a language code mixed with a
+country code for specialities in languages (like "fre-ca" for Canadian
+French).
+</p>
+</dd>
+<dt> ‘<samp>stereo_mode</samp>’</dt>
+<dd><p>Set stereo 3D video layout of two views in a single video track.
+</p>
+<p>The following values are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>video is not stereo
+</p></dd>
+<dt> ‘<samp>left_right</samp>’</dt>
+<dd><p>Both views are arranged side by side, Left-eye view is on the left
+</p></dd>
+<dt> ‘<samp>bottom_top</samp>’</dt>
+<dd><p>Both views are arranged in top-bottom orientation, Left-eye view is at bottom
+</p></dd>
+<dt> ‘<samp>top_bottom</samp>’</dt>
+<dd><p>Both views are arranged in top-bottom orientation, Left-eye view is on top
+</p></dd>
+<dt> ‘<samp>checkerboard_rl</samp>’</dt>
+<dd><p>Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first
+</p></dd>
+<dt> ‘<samp>checkerboard_lr</samp>’</dt>
+<dd><p>Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first
+</p></dd>
+<dt> ‘<samp>row_interleaved_rl</samp>’</dt>
+<dd><p>Each view is constituted by a row based interleaving, Right-eye view is first row
+</p></dd>
+<dt> ‘<samp>row_interleaved_lr</samp>’</dt>
+<dd><p>Each view is constituted by a row based interleaving, Left-eye view is first row
+</p></dd>
+<dt> ‘<samp>col_interleaved_rl</samp>’</dt>
+<dd><p>Both views are arranged in a column based interleaving manner, Right-eye view is first column
+</p></dd>
+<dt> ‘<samp>col_interleaved_lr</samp>’</dt>
+<dd><p>Both views are arranged in a column based interleaving manner, Left-eye view is first column
+</p></dd>
+<dt> ‘<samp>anaglyph_cyan_red</samp>’</dt>
+<dd><p>All frames are in anaglyph format viewable through red-cyan filters
+</p></dd>
+<dt> ‘<samp>right_left</samp>’</dt>
+<dd><p>Both views are arranged side by side, Right-eye view is on the left
+</p></dd>
+<dt> ‘<samp>anaglyph_green_magenta</samp>’</dt>
+<dd><p>All frames are in anaglyph format viewable through green-magenta filters
+</p></dd>
+<dt> ‘<samp>block_lr</samp>’</dt>
+<dd><p>Both eyes laced in one Block, Left-eye view is first
+</p></dd>
+<dt> ‘<samp>block_rl</samp>’</dt>
+<dd><p>Both eyes laced in one Block, Right-eye view is first
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>For example a 3D WebM clip can be created using the following command line:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
+</pre></td></tr></table>
+
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options">4.9.2 Options</a></h3>
+
+<p>This muxer supports the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>reserve_index_space</samp>’</dt>
+<dd><p>By default, this muxer writes the index for seeking (called cues in Matroska
+terms) at the end of the file, because it cannot know in advance how much space
+to leave for the index at the beginning of the file. However for some use cases
+– e.g. streaming where seeking is possible but slow – it is useful to put the
+index at the beginning of the file.
+</p>
+<p>If this option is set to a non-zero value, the muxer will reserve a given amount
+of space in the file header and then try to write the cues there when the muxing
+finishes. If the available space does not suffice, muxing will fail. A safe size
+for most use cases should be about 50kB per hour of video.
+</p>
+<p>Note that cues are only written if the output is seekable and this option will
+have no effect if it is not.
+</p></dd>
+</dl>
+
+<p><a name="md5"></a>
+</p><a name="md5-1"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-md5-1">4.10 md5</a></h2>
+
+<p>MD5 testing format.
+</p>
+<p>This muxer computes and prints the MD5 hash 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
+hash.
+</p>
+<p>The output of the muxer consists of a single line of the form:
+MD5=<var>MD5</var>, where <var>MD5</var> is a hexadecimal number representing
+the computed MD5 hash.
+</p>
+<p>For example to compute the MD5 hash of the input converted to raw
+audio and video, and store it in the file ‘<tt>out.md5</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f md5 out.md5
+</pre></td></tr></table>
+
+<p>You can print the MD5 to stdout with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f md5 -
+</pre></td></tr></table>
+
+<p>See also the <a href="#framemd5">framemd5</a> muxer.
+</p>
+<a name="mov_002c-mp4_002c-ismv"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-mov_002c-mp4_002c-ismv">4.11 mov, mp4, ismv</a></h2>
+
+<p>MOV/MP4/ISMV (Smooth Streaming) muxer.
+</p>
+<p>The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4
+file has all the metadata about all packets stored in one location
+(written at the end of the file, it can be moved to the start for
+better playback by adding <var>faststart</var> to the <var>movflags</var>, or
+using the <code>qt-faststart</code> tool). A fragmented
+file consists of a number of fragments, where packets and metadata
+about these packets are stored together. Writing a fragmented
+file has the advantage that the file is decodable even if the
+writing is interrupted (while a normal MOV/MP4 is undecodable if
+it is not properly finished), and it requires less memory when writing
+very long files (since writing normal MOV/MP4 files stores info about
+every single packet in memory until the file is closed). The downside
+is that it is less compatible with other applications.
+</p>
+<a name="Options-2"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-2">4.11.1 Options</a></h3>
+
+<p>Fragmentation is enabled by setting one of the AVOptions that define
+how to cut the file into fragments:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-moov_size <var>bytes</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-movflags frag_keyframe</samp>’</dt>
+<dd><p>Start a new fragment at each video keyframe.
+</p></dd>
+<dt> ‘<samp>-frag_duration <var>duration</var></samp>’</dt>
+<dd><p>Create fragments that are <var>duration</var> microseconds long.
+</p></dd>
+<dt> ‘<samp>-frag_size <var>size</var></samp>’</dt>
+<dd><p>Create fragments that contain up to <var>size</var> bytes of payload data.
+</p></dd>
+<dt> ‘<samp>-movflags frag_custom</samp>’</dt>
+<dd><p>Allow the caller to manually choose when to cut fragments, by
+calling <code>av_write_frame(ctx, NULL)</code> to write a fragment with
+the packets written so far. (This is only useful with other
+applications integrating libavformat, not from <code>ffmpeg</code>.)
+</p></dd>
+<dt> ‘<samp>-min_frag_duration <var>duration</var></samp>’</dt>
+<dd><p>Don’t create fragments that are shorter than <var>duration</var> microseconds long.
+</p></dd>
+</dl>
+
+<p>If more than one condition is specified, fragments are cut when
+one of the specified conditions is fulfilled. The exception to this is
+<code>-min_frag_duration</code>, which has to be fulfilled for any of the other
+conditions to apply.
+</p>
+<p>Additionally, the way the output file is written can be adjusted
+through a few other options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-movflags empty_moov</samp>’</dt>
+<dd><p>Write an initial moov atom directly at the start of the file, without
+describing any samples in it. Generally, an mdat/moov pair is written
+at the start of the file, as a normal MOV/MP4 file, containing only
+a short portion of the file. With this option set, there is no initial
+mdat atom, and the moov atom only describes the tracks but has
+a zero duration.
+</p>
+<p>Files written with this option set do not work in QuickTime.
+This option is implicitly set when writing ismv (Smooth Streaming) files.
+</p></dd>
+<dt> ‘<samp>-movflags separate_moof</samp>’</dt>
+<dd><p>Write a separate moof (movie fragment) atom for each track. Normally,
+packets for all tracks are written in a moof atom (which is slightly
+more efficient), but with this option set, the muxer writes one moof/mdat
+pair for each track, making it easier to separate tracks.
+</p>
+<p>This option is implicitly set when writing ismv (Smooth Streaming) files.
+</p></dd>
+<dt> ‘<samp>-movflags faststart</samp>’</dt>
+<dd><p>Run a second pass moving the index (moov atom) to the beginning of the file.
+This operation can take a while, and will not work in various situations such
+as fragmented output, thus it is not enabled by default.
+</p></dd>
+<dt> ‘<samp>-movflags rtphint</samp>’</dt>
+<dd><p>Add RTP hinting tracks to the output file.
+</p></dd>
+</dl>
+
+<a name="Example-1"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Example-1">4.11.2 Example</a></h3>
+
+<p>Smooth Streaming content can be pushed in real time to a publishing
+point on IIS with this muxer. Example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re <var><normal input/transcoding options></var> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
+</pre></td></tr></table>
+
+<a name="mp3"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-mp3">4.12 mp3</a></h2>
+
+<p>The MP3 muxer writes a raw MP3 stream with an ID3v2 header at the beginning and
+optionally an ID3v1 tag at the end. ID3v2.3 and ID3v2.4 are supported, the
+<code>id3v2_version</code> option controls which one is used. Setting
+<code>id3v2_version</code> to 0 will disable the ID3v2 header completely. The legacy
+ID3v1 tag is not written by default, but may be enabled with the
+<code>write_id3v1</code> option.
+</p>
+<p>The muxer may also write a Xing frame at the beginning, which contains the
+number of frames in the file. It is useful for computing duration of VBR files.
+The Xing frame is written if the output stream is seekable and if the
+<code>write_xing</code> option is set to 1 (the default).
+</p>
+<p>The muxer supports writing ID3v2 attached pictures (APIC frames). The pictures
+are supplied to the muxer in form of a video stream with a single packet. There
+can be any number of those streams, each will correspond to a single APIC frame.
+The stream metadata tags <var>title</var> and <var>comment</var> map to APIC
+<var>description</var> and <var>picture type</var> respectively. See
+<a href="http://id3.org/id3v2.4.0-frames">http://id3.org/id3v2.4.0-frames</a> for allowed picture types.
+</p>
+<p>Note that the APIC frames must be written at the beginning, so the muxer will
+buffer the audio frames until it gets all the pictures. It is therefore advised
+to provide the pictures as soon as possible to avoid excessive buffering.
+</p>
+<p>Examples:
+</p>
+<p>Write an mp3 with an ID3v2.3 header and an ID3v1 footer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
+</pre></td></tr></table>
+
+<p>To attach a picture to an mp3 file select both the audio and the picture stream
+with <code>map</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
+-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
+</pre></td></tr></table>
+
+<p>Write a "clean" MP3 without any extra features:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
+</pre></td></tr></table>
+
+<a name="mpegts"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-mpegts">4.13 mpegts</a></h2>
+
+<p>MPEG transport stream muxer.
+</p>
+<p>This muxer implements ISO 13818-1 and part of ETSI EN 300 468.
+</p>
+<p>The recognized metadata settings in mpegts muxer are <code>service_provider</code>
+and <code>service_name</code>. If they are not set the default for
+<code>service_provider</code> is "FFmpeg" and the default for
+<code>service_name</code> is "Service01".
+</p>
+<a name="Options-4"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-4">4.13.1 Options</a></h3>
+
+<p>The muxer options are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-mpegts_original_network_id <var>number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-mpegts_transport_stream_id <var>number</var></samp>’</dt>
+<dd><p>Set the transport_stream_id (default 0x0001). This identifies a
+transponder in DVB.
+</p></dd>
+<dt> ‘<samp>-mpegts_service_id <var>number</var></samp>’</dt>
+<dd><p>Set the service_id (default 0x0001) also known as program in DVB.
+</p></dd>
+<dt> ‘<samp>-mpegts_pmt_start_pid <var>number</var></samp>’</dt>
+<dd><p>Set the first PID for PMT (default 0x1000, max 0x1f00).
+</p></dd>
+<dt> ‘<samp>-mpegts_start_pid <var>number</var></samp>’</dt>
+<dd><p>Set the first PID for data packets (default 0x0100, max 0x0f00).
+</p></dd>
+<dt> ‘<samp>-mpegts_m2ts_mode <var>number</var></samp>’</dt>
+<dd><p>Enable m2ts mode if set to 1. Default value is -1 which disables m2ts mode.
+</p></dd>
+<dt> ‘<samp>-muxrate <var>number</var></samp>’</dt>
+<dd><p>Set muxrate.
+</p></dd>
+<dt> ‘<samp>-pes_payload_size <var>number</var></samp>’</dt>
+<dd><p>Set minimum PES packet payload in bytes.
+</p></dd>
+<dt> ‘<samp>-mpegts_flags <var>flags</var></samp>’</dt>
+<dd><p>Set flags (see below).
+</p></dd>
+<dt> ‘<samp>-mpegts_copyts <var>number</var></samp>’</dt>
+<dd><p>Preserve original timestamps, if value is set to 1. Default value is -1, which
+results in shifting timestamps so that they start from 0.
+</p></dd>
+<dt> ‘<samp>-tables_version <var>number</var></samp>’</dt>
+<dd><p>Set PAT, PMT and SDT version (default 0, valid values are from 0 to 31, inclusively).
+This option allows updating stream structure so that standard consumer may
+detect the change. To do so, reopen output AVFormatContext (in case of API
+usage) or restart ffmpeg instance, cyclically changing tables_version value:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
+ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
+...
+ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
+ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
+ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
+...
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>Option mpegts_flags may take a set of such flags:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>resend_headers</samp>’</dt>
+<dd><p>Reemit PAT/PMT before writing the next packet.
+</p></dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Use LATM packetization for AAC.
+</p></dd>
+</dl>
+
+<a name="Example"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Example">4.13.2 Example</a></h3>
+
+<table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<a name="null"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-null">4.14 null</a></h2>
+
+<p>Null muxer.
+</p>
+<p>This muxer does not generate any output file, it is mainly useful for
+testing or benchmarking purposes.
+</p>
+<p>For example to benchmark decoding with <code>ffmpeg</code> you can use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -benchmark -i INPUT -f null out.null
+</pre></td></tr></table>
+
+<p>Note that the above command does not read or write the ‘<tt>out.null</tt>’
+file, but specifying the output file is required by the <code>ffmpeg</code>
+syntax.
+</p>
+<p>Alternatively you can write the command as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -benchmark -i INPUT -f null -
+</pre></td></tr></table>
+
+<a name="ogg"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-ogg">4.15 ogg</a></h2>
+
+<p>Ogg container muxer.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-page_duration <var>duration</var></samp>’</dt>
+<dd><p>Preferred page duration, in microseconds. The muxer will attempt to create
+pages that are approximately <var>duration</var> microseconds long. This allows the
+user to compromise between seek granularity and container overhead. The default
+is 1 second. A value of 0 will fill all segments, making pages as large as
+possible. A value of 1 will effectively use 1 packet-per-page in most
+situations, giving a small seek granularity at the cost of additional container
+overhead.
+</p></dd>
+</dl>
+
+<p><a name="segment"></a>
+</p><a name="segment_002c-stream_005fsegment_002c-ssegment"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-segment_002c-stream_005fsegment_002c-ssegment">4.16 segment, stream_segment, ssegment</a></h2>
+
+<p>Basic stream segmenter.
+</p>
+<p>This muxer outputs streams to a number of separate files of nearly
+fixed duration. Output filename pattern can be set in a fashion similar to
+<a href="#image2">image2</a>.
+</p>
+<p><code>stream_segment</code> is a variant of the muxer used to write to
+streaming output formats, i.e. which do not require global headers,
+and is recommended for outputting e.g. to MPEG transport stream segments.
+<code>ssegment</code> is a shorter alias for <code>stream_segment</code>.
+</p>
+<p>Every segment starts with a keyframe of the selected reference stream,
+which is set through the ‘<samp>reference_stream</samp>’ option.
+</p>
+<p>Note that if you want accurate splitting for a video file, you need to
+make the input key frames correspond to the exact splitting times
+expected by the segmenter, or the segment muxer will start the new
+segment with the key frame found next after the specified start
+time.
+</p>
+<p>The segment muxer works best with a single constant frame rate video.
+</p>
+<p>Optionally it can generate a list of the created segments, by setting
+the option <var>segment_list</var>. The list type is specified by the
+<var>segment_list_type</var> option. The entry filenames in the segment
+list are set by default to the basename of the corresponding segment
+files.
+</p>
+<p>See also the <a href="#hls">hls</a> muxer, which provides a more specific
+implementation for HLS segmentation.
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Options-1">4.16.1 Options</a></h3>
+
+<p>The segment muxer supports the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>reference_stream <var>specifier</var></samp>’</dt>
+<dd><p>Set the reference stream, as specified by the string <var>specifier</var>.
+If <var>specifier</var> is set to <code>auto</code>, the reference is chosen
+automatically. Otherwise it must be a stream specifier (see the “Stream
+specifiers” chapter in the ffmpeg manual) which specifies the
+reference stream. The default value is <code>auto</code>.
+</p>
+</dd>
+<dt> ‘<samp>segment_format <var>format</var></samp>’</dt>
+<dd><p>Override the inner container format, by default it is guessed by the filename
+extension.
+</p>
+</dd>
+<dt> ‘<samp>segment_list <var>name</var></samp>’</dt>
+<dd><p>Generate also a listfile named <var>name</var>. If not specified no
+listfile is generated.
+</p>
+</dd>
+<dt> ‘<samp>segment_list_flags <var>flags</var></samp>’</dt>
+<dd><p>Set flags affecting the segment list generation.
+</p>
+<p>It currently supports the following flags:
+</p><dl compact="compact">
+<dt> ‘<samp>cache</samp>’</dt>
+<dd><p>Allow caching (only affects M3U8 list files).
+</p>
+</dd>
+<dt> ‘<samp>live</samp>’</dt>
+<dd><p>Allow live-friendly file generation.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>segment_list_size <var>size</var></samp>’</dt>
+<dd><p>Update the list file so that it contains at most the last <var>size</var>
+segments. If 0 the list file will contain all the segments. Default
+value is 0.
+</p>
+</dd>
+<dt> ‘<samp>segment_list_entry_prefix <var>prefix</var></samp>’</dt>
+<dd><p>Set <var>prefix</var> to prepend to the name of each entry filename. By
+default no prefix is applied.
+</p>
+</dd>
+<dt> ‘<samp>segment_list_type <var>type</var></samp>’</dt>
+<dd><p>Specify the format for the segment list file.
+</p>
+<p>The following values are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>flat</samp>’</dt>
+<dd><p>Generate a flat list for the created segments, one segment per line.
+</p>
+</dd>
+<dt> ‘<samp>csv, ext</samp>’</dt>
+<dd><p>Generate a list for the created segments, one segment per line,
+each line matching the format (comma-separated values):
+</p><table><tr><td> </td><td><pre class="example"><var>segment_filename</var>,<var>segment_start_time</var>,<var>segment_end_time</var>
+</pre></td></tr></table>
+
+<p><var>segment_filename</var> is the name of the output file generated by the
+muxer according to the provided pattern. CSV escaping (according to
+RFC4180) is applied if required.
+</p>
+<p><var>segment_start_time</var> and <var>segment_end_time</var> specify
+the segment start and end time expressed in seconds.
+</p>
+<p>A list file with the suffix <code>".csv"</code> or <code>".ext"</code> will
+auto-select this format.
+</p>
+<p>‘<samp>ext</samp>’ is deprecated in favor or ‘<samp>csv</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>ffconcat</samp>’</dt>
+<dd><p>Generate an ffconcat file for the created segments. The resulting file
+can be read using the FFmpeg <a href="#concat">concat</a> demuxer.
+</p>
+<p>A list file with the suffix <code>".ffcat"</code> or <code>".ffconcat"</code> will
+auto-select this format.
+</p>
+</dd>
+<dt> ‘<samp>m3u8</samp>’</dt>
+<dd><p>Generate an extended M3U8 file, version 3, compliant with
+<a href="http://tools.ietf.org/id/draft-pantos-http-live-streaming">http://tools.ietf.org/id/draft-pantos-http-live-streaming</a>.
+</p>
+<p>A list file with the suffix <code>".m3u8"</code> will auto-select this format.
+</p></dd>
+</dl>
+
+<p>If not specified the type is guessed from the list file name suffix.
+</p>
+</dd>
+<dt> ‘<samp>segment_time <var>time</var></samp>’</dt>
+<dd><p>Set segment duration to <var>time</var>, the value must be a duration
+specification. Default value is "2". See also the
+‘<samp>segment_times</samp>’ option.
+</p>
+<p>Note that splitting may not be accurate, unless you force the
+reference stream key-frames at the given time. See the introductory
+notice and the examples below.
+</p>
+</dd>
+<dt> ‘<samp>segment_time_delta <var>delta</var></samp>’</dt>
+<dd><p>Specify the accuracy time when selecting the start time for a
+segment, expressed as a duration specification. Default value is "0".
+</p>
+<p>When delta is specified a key-frame will start a new segment if its
+PTS satisfies the relation:
+</p><table><tr><td> </td><td><pre class="example">PTS >= start_time - time_delta
+</pre></td></tr></table>
+
+<p>This option is useful when splitting video content, which is always
+split at GOP boundaries, in case a key frame is found just before the
+specified split time.
+</p>
+<p>In particular may be used in combination with the ‘<tt>ffmpeg</tt>’ option
+<var>force_key_frames</var>. The key frame times specified by
+<var>force_key_frames</var> may not be set accurately because of rounding
+issues, with the consequence that a key frame time may result set just
+before the specified time. For constant frame rate videos a value of
+1/(2*<var>frame_rate</var>) should address the worst case mismatch between
+the specified time and the time set by <var>force_key_frames</var>.
+</p>
+</dd>
+<dt> ‘<samp>segment_times <var>times</var></samp>’</dt>
+<dd><p>Specify a list of split points. <var>times</var> contains a list of comma
+separated duration specifications, in increasing order. See also
+the ‘<samp>segment_time</samp>’ option.
+</p>
+</dd>
+<dt> ‘<samp>segment_frames <var>frames</var></samp>’</dt>
+<dd><p>Specify a list of split video frame numbers. <var>frames</var> contains a
+list of comma separated integer numbers, in increasing order.
+</p>
+<p>This option specifies to start a new segment whenever a reference
+stream key frame is found and the sequential number (starting from 0)
+of the frame is greater or equal to the next value in the list.
+</p>
+</dd>
+<dt> ‘<samp>segment_wrap <var>limit</var></samp>’</dt>
+<dd><p>Wrap around segment index once it reaches <var>limit</var>.
+</p>
+</dd>
+<dt> ‘<samp>segment_start_number <var>number</var></samp>’</dt>
+<dd><p>Set the sequence number of the first segment. Defaults to <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>reset_timestamps <var>1|0</var></samp>’</dt>
+<dd><p>Reset timestamps at the begin of each segment, so that each segment
+will start with near-zero timestamps. It is meant to ease the playback
+of the generated segments. May not work with some combinations of
+muxers/codecs. It is set to <code>0</code> by default.
+</p>
+</dd>
+<dt> ‘<samp>initial_offset <var>offset</var></samp>’</dt>
+<dd><p>Specify timestamp offset to apply to the output packet timestamps. The
+argument must be a time duration specification, and defaults to 0.
+</p></dd>
+</dl>
+
+<a name="Examples-3"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples-3">4.16.2 Examples</a></h3>
+
+<ul>
+<li>
+To remux the content of file ‘<tt>in.mkv</tt>’ to a list of segments
+‘<tt>out-000.nut</tt>’, ‘<tt>out-001.nut</tt>’, etc., and write the list of
+generated segments to ‘<tt>out.list</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.list out%03d.nut
+</pre></td></tr></table>
+
+</li><li>
+As the example above, but segment the input file according to the split
+points specified by the <var>segment_times</var> option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
+</pre></td></tr></table>
+
+</li><li>
+As the example above, but use the <code>ffmpeg</code> ‘<samp>force_key_frames</samp>’
+option to force key frames in the input at the specified location, together
+with the segment option ‘<samp>segment_time_delta</samp>’ to account for
+possible roundings operated when setting key frame times.
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \
+-f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
+</pre></td></tr></table>
+<p>In order to force key frames on the input file, transcoding is
+required.
+</p>
+</li><li>
+Segment the input file by splitting the input file according to the
+frame numbers sequence specified with the ‘<samp>segment_frames</samp>’ option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
+</pre></td></tr></table>
+
+</li><li>
+To convert the ‘<tt>in.mkv</tt>’ to TS segments using the <code>libx264</code>
+and <code>libfaac</code> encoders:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a libfaac -f ssegment -segment_list out.list out%03d.ts
+</pre></td></tr></table>
+
+</li><li>
+Segment the input file, and create an M3U8 live playlist (can be used
+as live HLS source):
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \
+-segment_list_flags +live -segment_time 10 out%03d.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tee"></a>
+<h2 class="section"><a href="ffmpeg-formats.html#toc-tee">4.17 tee</a></h2>
+
+<p>The tee muxer can be used to write the same data to several files or any
+other kind of muxer. It can be used, for example, to both stream a video to
+the network and save it to disk at the same time.
+</p>
+<p>It is different from specifying several outputs to the <code>ffmpeg</code>
+command-line tool because the audio and video data will be encoded only once
+with the tee muxer; encoding can be a very expensive process. It is not
+useful when using the libavformat API directly because it is then possible
+to feed the same packets to several muxers directly.
+</p>
+<p>The slave outputs are specified in the file name given to the muxer,
+separated by ’|’. If any of the slave name contains the ’|’ separator,
+leading or trailing spaces or any special character, it must be
+escaped (see <a href="ffmpeg-utils.html#quoting_005fand_005fescaping">(ffmpeg-utils)quoting_and_escaping</a>).
+</p>
+<p>Muxer options can be specified for each slave by prepending them as a list of
+<var>key</var>=<var>value</var> pairs separated by ’:’, between square brackets. If
+the options values contain a special character or the ’:’ separator, they
+must be escaped; note that this is a second level escaping.
+</p>
+<p>The following special options are also recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>f</samp>’</dt>
+<dd><p>Specify the format name. Useful if it cannot be guessed from the
+output name suffix.
+</p>
+</dd>
+<dt> ‘<samp>bsfs[/<var>spec</var>]</samp>’</dt>
+<dd><p>Specify a list of bitstream filters to apply to the specified
+output.
+</p>
+<p>It is possible to specify to which streams a given bitstream filter
+applies, by appending a stream specifier to the option separated by
+<code>/</code>. <var>spec</var> must be a stream specifier (see <a href="#Format-stream-specifiers">Format stream specifiers</a>). If the stream specifier is not specified, the
+bistream filters will be applied to all streams in the output.
+</p>
+<p>Several bitstream filters can be specified, separated by ",".
+</p>
+</dd>
+<dt> ‘<samp>select</samp>’</dt>
+<dd><p>Select the streams that should be mapped to the slave output,
+specified by a stream specifier. If not specified, this defaults to
+all the input streams.
+</p></dd>
+</dl>
+
+<a name="Examples-5"></a>
+<h3 class="subsection"><a href="ffmpeg-formats.html#toc-Examples-5">4.17.1 Examples</a></h3>
+
+<ul>
+<li>
+Encode something and both archive it in a WebM file and stream it
+as MPEG-TS over UDP (the streams need to be explicitly mapped):
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
+ "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to encode the input, and send the output
+to three different destinations. The <code>dump_extra</code> bitstream
+filter is used to add extradata information to all the output video
+keyframes packets, as requested by the MPEG-TS format. The select
+option is applied to ‘<tt>out.aac</tt>’ in order to make it contain only
+audio packets.
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -strict experimental
+ -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"
+</pre></td></tr></table>
+
+</li><li>
+As below, but select only stream <code>a:1</code> for the audio output. Note
+that a second level escaping must be performed, as ":" is a special
+character used to separate options.
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -strict experimental
+ -f tee "[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
+</pre></td></tr></table>
+</li></ul>
+
+<p>Note: some codecs may need different options depending on the output format;
+the auto-detection of this can not work with the tee muxer. The main example
+is the ‘<samp>global_header</samp>’ flag.
+</p>
+<a name="Metadata-1"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-Metadata-1">5. Metadata</a></h1>
+
+<p>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.
+</p>
+<p>The file format is as follows:
+</p><ol>
+<li>
+A file consists of a header and a number of metadata tags divided into sections,
+each on its own line.
+
+</li><li>
+The header is a ’;FFMETADATA’ string, followed by a version number (now 1).
+
+</li><li>
+Metadata tags are of the form ’key=value’
+
+</li><li>
+Immediately after header follows global metadata
+
+</li><li>
+After global metadata there may be sections with per-stream/per-chapter
+metadata.
+
+</li><li>
+A section starts with the section name in uppercase (i.e. STREAM or CHAPTER) in
+brackets (’[’, ’]’) and ends with next section or end of file.
+
+</li><li>
+At the beginning of a chapter section there may be an optional timebase to be
+used for start/end values. It must be in form ’TIMEBASE=num/den’, where num and
+den are integers. If the timebase is missing then start/end times are assumed to
+be in milliseconds.
+Next a chapter section must contain chapter start and end times in form
+’START=num’, ’END=num’, where num is a positive integer.
+
+</li><li>
+Empty lines and lines starting with ’;’ or ’#’ are ignored.
+
+</li><li>
+Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a
+newline) must be escaped with a backslash ’\’.
+
+</li><li>
+Note that whitespace in metadata (e.g. foo = bar) is considered to be a part of
+the tag (in the example above key is ’foo ’, value is ’ bar’).
+</li></ol>
+
+<p>A ffmetadata file might look like this:
+</p><table><tr><td> </td><td><pre class="example">;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
+</pre></td></tr></table>
+
+<p>By using the ffmetadata muxer and demuxer it is possible to extract
+metadata from an input file to an ffmetadata file, and then transcode
+the file into an output file with the edited ffmetadata file.
+</p>
+<p>Extracting an ffmetadata file with ‘<tt>ffmpeg</tt>’ goes as follows:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
+</pre></td></tr></table>
+
+<p>Reinserting edited metadata information from the FFMETADATAFILE file can
+be done as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
+</pre></td></tr></table>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-See-Also">6. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavformat.html">libavformat</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-formats.html#toc-Authors">7. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Protocols </title>
+
+<meta name="description" content="FFmpeg Protocols Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Protocols ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Protocols Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Protocols" href="#Protocols">2. Protocols</a>
+ <ul class="toc">
+ <li><a name="toc-bluray" href="#bluray">2.1 bluray</a></li>
+ <li><a name="toc-cache" href="#cache">2.2 cache</a></li>
+ <li><a name="toc-concat" href="#concat">2.3 concat</a></li>
+ <li><a name="toc-crypto" href="#crypto">2.4 crypto</a></li>
+ <li><a name="toc-data" href="#data">2.5 data</a></li>
+ <li><a name="toc-file" href="#file">2.6 file</a></li>
+ <li><a name="toc-ftp" href="#ftp">2.7 ftp</a></li>
+ <li><a name="toc-gopher" href="#gopher">2.8 gopher</a></li>
+ <li><a name="toc-hls" href="#hls">2.9 hls</a></li>
+ <li><a name="toc-http" href="#http">2.10 http</a>
+ <ul class="toc">
+ <li><a name="toc-HTTP-Cookies" href="#HTTP-Cookies">2.10.1 HTTP Cookies</a></li>
+ </ul></li>
+ <li><a name="toc-mmst" href="#mmst">2.11 mmst</a></li>
+ <li><a name="toc-mmsh" href="#mmsh">2.12 mmsh</a></li>
+ <li><a name="toc-md5" href="#md5">2.13 md5</a></li>
+ <li><a name="toc-pipe" href="#pipe">2.14 pipe</a></li>
+ <li><a name="toc-rtmp" href="#rtmp">2.15 rtmp</a></li>
+ <li><a name="toc-rtmpe" href="#rtmpe">2.16 rtmpe</a></li>
+ <li><a name="toc-rtmps" href="#rtmps">2.17 rtmps</a></li>
+ <li><a name="toc-rtmpt" href="#rtmpt">2.18 rtmpt</a></li>
+ <li><a name="toc-rtmpte" href="#rtmpte">2.19 rtmpte</a></li>
+ <li><a name="toc-rtmpts" href="#rtmpts">2.20 rtmpts</a></li>
+ <li><a name="toc-libssh" href="#libssh">2.21 libssh</a></li>
+ <li><a name="toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte" href="#librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">2.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></li>
+ <li><a name="toc-rtp" href="#rtp">2.23 rtp</a></li>
+ <li><a name="toc-rtsp" href="#rtsp">2.24 rtsp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">2.24.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sap" href="#sap">2.25 sap</a>
+ <ul class="toc">
+ <li><a name="toc-Muxer" href="#Muxer">2.25.1 Muxer</a></li>
+ <li><a name="toc-Demuxer" href="#Demuxer">2.25.2 Demuxer</a></li>
+ </ul></li>
+ <li><a name="toc-sctp" href="#sctp">2.26 sctp</a></li>
+ <li><a name="toc-srtp" href="#srtp">2.27 srtp</a></li>
+ <li><a name="toc-tcp" href="#tcp">2.28 tcp</a></li>
+ <li><a name="toc-tls" href="#tls">2.29 tls</a></li>
+ <li><a name="toc-udp" href="#udp">2.30 udp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">2.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-unix" href="#unix">2.31 unix</a></li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">3. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">4. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-protocols.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes the input and output protocols provided by the
+libavformat library.
+</p>
+
+<a name="Protocols"></a>
+<h1 class="chapter"><a href="ffmpeg-protocols.html#toc-Protocols">2. Protocols</a></h1>
+
+<p>Protocols are configured elements in FFmpeg that enable access to
+resources that require specific protocols.
+</p>
+<p>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".
+</p>
+<p>You can disable all the protocols using the configure option
+"–disable-protocols", and selectively enable a protocol using the
+option "–enable-protocol=<var>PROTOCOL</var>", or you can disable a
+particular protocol using the option
+"–disable-protocol=<var>PROTOCOL</var>".
+</p>
+<p>The option "-protocols" of the ff* tools will display the list of
+supported protocols.
+</p>
+<p>A description of the currently available protocols follows.
+</p>
+<a name="bluray"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-bluray">2.1 bluray</a></h2>
+
+<p>Read BluRay playlist.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>angle</samp>’</dt>
+<dd><p>BluRay angle
+</p>
+</dd>
+<dt> ‘<samp>chapter</samp>’</dt>
+<dd><p>Start chapter (1...N)
+</p>
+</dd>
+<dt> ‘<samp>playlist</samp>’</dt>
+<dd><p>Playlist to read (BDMV/PLAYLIST/?????.mpls)
+</p>
+</dd>
+</dl>
+
+<p>Examples:
+</p>
+<p>Read longest playlist from BluRay mounted to /mnt/bluray:
+</p><table><tr><td> </td><td><pre class="example">bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<p>Read angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2:
+</p><table><tr><td> </td><td><pre class="example">-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<a name="cache"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-cache">2.2 cache</a></h2>
+
+<p>Caching wrapper for input stream.
+</p>
+<p>Cache the input stream to temporary file. It brings seeking capability to live streams.
+</p>
+<table><tr><td> </td><td><pre class="example">cache:<var>URL</var>
+</pre></td></tr></table>
+
+<a name="concat"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-concat">2.3 concat</a></h2>
+
+<p>Physical concatenation protocol.
+</p>
+<p>Allow to read and seek from many resource in sequence as if they were
+a unique resource.
+</p>
+<p>A URL accepted by this protocol has the syntax:
+</p><table><tr><td> </td><td><pre class="example">concat:<var>URL1</var>|<var>URL2</var>|...|<var>URLN</var>
+</pre></td></tr></table>
+
+<p>where <var>URL1</var>, <var>URL2</var>, ..., <var>URLN</var> are the urls of the
+resource to be concatenated, each one possibly specifying a distinct
+protocol.
+</p>
+<p>For example to read a sequence of files ‘<tt>split1.mpeg</tt>’,
+‘<tt>split2.mpeg</tt>’, ‘<tt>split3.mpeg</tt>’ with <code>ffplay</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
+</pre></td></tr></table>
+
+<p>Note that you may need to escape the character "|" which is special for
+many shells.
+</p>
+<a name="crypto"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-crypto">2.4 crypto</a></h2>
+
+<p>AES-encrypted stream reading protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>Set the AES decryption key binary block from given hexadecimal representation.
+</p>
+</dd>
+<dt> ‘<samp>iv</samp>’</dt>
+<dd><p>Set the AES decryption initialization vector binary block from given hexadecimal representation.
+</p></dd>
+</dl>
+
+<p>Accepted URL formats:
+</p><table><tr><td> </td><td><pre class="example">crypto:<var>URL</var>
+crypto+<var>URL</var>
+</pre></td></tr></table>
+
+<a name="data"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-data">2.5 data</a></h2>
+
+<p>Data in-line in the URI. See <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">http://en.wikipedia.org/wiki/Data_URI_scheme</a>.
+</p>
+<p>For example, to convert a GIF file given inline with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
+</pre></td></tr></table>
+
+<a name="file"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-file">2.6 file</a></h2>
+
+<p>File access protocol.
+</p>
+<p>Allow to read from or write to a file.
+</p>
+<p>A file URL can have the form:
+</p><table><tr><td> </td><td><pre class="example">file:<var>filename</var>
+</pre></td></tr></table>
+
+<p>where <var>filename</var> is the path of the file to read.
+</p>
+<p>An URL that does not have a protocol prefix will be assumed to be a
+file URL. Depending on the build, an URL that looks like a Windows
+path with the drive letter at the beginning will also be assumed to be
+a file URL (usually not the case in builds for unix-like systems).
+</p>
+<p>For example to read from a file ‘<tt>input.mpeg</tt>’ with <code>ffmpeg</code>
+use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i file:input.mpeg output.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable for files on slow medium.
+</p></dd>
+</dl>
+
+<a name="ftp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-ftp">2.7 ftp</a></h2>
+
+<p>FTP (File Transfer Protocol).
+</p>
+<p>Allow to read from or write to remote resources using FTP protocol.
+</p>
+<p>Following syntax is required.
+</p><table><tr><td> </td><td><pre class="example">ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>ftp-anonymous-password</samp>’</dt>
+<dd><p>Password used when login as anonymous user. Typically an e-mail address
+should be used.
+</p>
+</dd>
+<dt> ‘<samp>ftp-write-seekable</samp>’</dt>
+<dd><p>Control seekability of connection during encoding. If set to 1 the
+resource is supposed to be seekable, if set to 0 it is assumed not
+to be seekable. Default value is 0.
+</p></dd>
+</dl>
+
+<p>NOTE: Protocol can be used as output, but it is recommended to not do
+it, unless special care is taken (tests, customized server configuration
+etc.). Different FTP servers behave in different way during seek
+operation. ff* tools may produce incomplete content due to server limitations.
+</p>
+<a name="gopher"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-gopher">2.8 gopher</a></h2>
+
+<p>Gopher protocol.
+</p>
+<a name="hls"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-hls">2.9 hls</a></h2>
+
+<p>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.
+The nested protocol is declared by specifying
+"+<var>proto</var>" after the hls URI scheme name, where <var>proto</var>
+is either "file" or "http".
+</p>
+<table><tr><td> </td><td><pre class="example">hls+http://host/path/to/remote/resource.m3u8
+hls+file://path/to/local/resource.m3u8
+</pre></td></tr></table>
+
+<p>Using this protocol is discouraged - the hls demuxer should work
+just as well (if not, please report the issues) and is more complete.
+To use the hls demuxer instead, simply use the direct URLs to the
+m3u8 files.
+</p>
+<a name="http"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-http">2.10 http</a></h2>
+
+<p>HTTP (Hyper Text Transfer Protocol).
+</p>
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>seekable</samp>’</dt>
+<dd><p>Control seekability of connection. If set to 1 the resource is
+supposed to be seekable, if set to 0 it is assumed not to be seekable,
+if set to -1 it will try to autodetect if it is seekable. Default
+value is -1.
+</p>
+</dd>
+<dt> ‘<samp>chunked_post</samp>’</dt>
+<dd><p>If set to 1 use chunked Transfer-Encoding for posts, default is 1.
+</p>
+</dd>
+<dt> ‘<samp>content_type</samp>’</dt>
+<dd><p>Set a specific content type for the POST messages.
+</p>
+</dd>
+<dt> ‘<samp>headers</samp>’</dt>
+<dd><p>Set custom HTTP headers, can override built in default headers. The
+value must be a string encoding the headers.
+</p>
+</dd>
+<dt> ‘<samp>multiple_requests</samp>’</dt>
+<dd><p>Use persistent connections if set to 1, default is 0.
+</p>
+</dd>
+<dt> ‘<samp>post_data</samp>’</dt>
+<dd><p>Set custom HTTP post data.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dt> ‘<samp>user_agent</samp>’</dt>
+<dd><p>Override the User-Agent header. If not specified the protocol will use a
+string describing the libavformat build. ("Lavf/<version>")
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>mime_type</samp>’</dt>
+<dd><p>Export the MIME type.
+</p>
+</dd>
+<dt> ‘<samp>icy</samp>’</dt>
+<dd><p>If set to 1 request ICY (SHOUTcast) metadata from the server. If the server
+supports this, the metadata has to be retrieved by the application by reading
+the ‘<samp>icy_metadata_headers</samp>’ and ‘<samp>icy_metadata_packet</samp>’ options.
+The default is 0.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_headers</samp>’</dt>
+<dd><p>If the server supports ICY metadata, this contains the ICY-specific HTTP reply
+headers, separated by newline characters.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_packet</samp>’</dt>
+<dd><p>If the server supports ICY metadata, and ‘<samp>icy</samp>’ was set to 1, this
+contains the last non-empty metadata packet sent by the server. It should be
+polled in regular intervals by applications interested in mid-stream metadata
+updates.
+</p>
+</dd>
+<dt> ‘<samp>cookies</samp>’</dt>
+<dd><p>Set the cookies to be sent in future requests. The format of each cookie is the
+same as the value of a Set-Cookie HTTP response field. Multiple cookies can be
+delimited by a newline character.
+</p>
+</dd>
+<dt> ‘<samp>offset</samp>’</dt>
+<dd><p>Set initial byte offset.
+</p>
+</dd>
+<dt> ‘<samp>end_offset</samp>’</dt>
+<dd><p>Try to limit the request to bytes preceding this offset.
+</p></dd>
+</dl>
+
+<a name="HTTP-Cookies"></a>
+<h3 class="subsection"><a href="ffmpeg-protocols.html#toc-HTTP-Cookies">2.10.1 HTTP Cookies</a></h3>
+
+<p>Some HTTP requests will be denied unless cookie values are passed in with the
+request. The ‘<samp>cookies</samp>’ option allows these cookies to be specified. At
+the very least, each cookie must specify a value along with a path and domain.
+HTTP requests that match both the domain and path will automatically include the
+cookie value in the HTTP Cookie header field. Multiple cookies can be delimited
+by a newline.
+</p>
+<p>The required syntax to play a stream specifying a cookie is:
+</p><table><tr><td> </td><td><pre class="example">ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
+</pre></td></tr></table>
+
+<a name="mmst"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-mmst">2.11 mmst</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over TCP.
+</p>
+<a name="mmsh"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-mmsh">2.12 mmsh</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over HTTP.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">mmsh://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<a name="md5"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-md5">2.13 md5</a></h2>
+
+<p>MD5 output protocol.
+</p>
+<p>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.
+</p>
+<p>Some examples follow.
+</p><table><tr><td> </td><td><pre class="example"># 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:
+</pre></td></tr></table>
+
+<p>Note that some formats (typically MOV) require the output protocol to
+be seekable, so they will fail with the MD5 output protocol.
+</p>
+<a name="pipe"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-pipe">2.14 pipe</a></h2>
+
+<p>UNIX pipe access protocol.
+</p>
+<p>Allow to read and write from UNIX pipes.
+</p>
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">pipe:[<var>number</var>]
+</pre></td></tr></table>
+
+<p><var>number</var> is the number corresponding to the file descriptor of the
+pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If <var>number</var>
+is not specified, by default the stdout file descriptor will be used
+for writing, stdin for reading.
+</p>
+<p>For example to read from stdin with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">cat test.wav | ffmpeg -i pipe:0
+# ...this is the same as...
+cat test.wav | ffmpeg -i pipe:
+</pre></td></tr></table>
+
+<p>For writing to stdout with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable if data transmission is slow.
+</p></dd>
+</dl>
+
+<p>Note that some formats (typically MOV), require the output protocol to
+be seekable, so they will fail with the pipe output protocol.
+</p>
+<a name="rtmp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtmp">2.15 rtmp</a></h2>
+
+<p>Real-Time Messaging Protocol.
+</p>
+<p>The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia
+content across a TCP/IP network.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">rtmp://[<var>username</var>:<var>password</var>@]<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>instance</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<p>The accepted parameters are:
+</p><dl compact="compact">
+<dt> ‘<samp>username</samp>’</dt>
+<dd><p>An optional username (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>password</samp>’</dt>
+<dd><p>An optional password (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>The address of the RTMP server.
+</p>
+</dd>
+<dt> ‘<samp>port</samp>’</dt>
+<dd><p>The number of the TCP port to use (by default is 1935).
+</p>
+</dd>
+<dt> ‘<samp>app</samp>’</dt>
+<dd><p>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. ‘<tt>/ondemand/</tt>’, ‘<tt>/flash/live/</tt>’, etc.). You can override
+the value parsed from the URI through the <code>rtmp_app</code> option, too.
+</p>
+</dd>
+<dt> ‘<samp>playpath</samp>’</dt>
+<dd><p>It is the path or name of the resource to play with reference to the
+application specified in <var>app</var>, may be prefixed by "mp4:". You
+can override the value parsed from the URI through the <code>rtmp_playpath</code>
+option, too.
+</p>
+</dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Maximum time to wait for the incoming connection. Implies listen.
+</p></dd>
+</dl>
+
+<p>Additionally, the following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p><dl compact="compact">
+<dt> ‘<samp>rtmp_app</samp>’</dt>
+<dd><p>Name of application to connect on the RTMP server. This option
+overrides the parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_buffer</samp>’</dt>
+<dd><p>Set the client buffer time in milliseconds. The default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_conn</samp>’</dt>
+<dd><p>Extra arbitrary AMF connection parameters, parsed from a string,
+e.g. like <code>B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0</code>.
+Each value is prefixed by a single character denoting the type,
+B for Boolean, N for number, S for string, O for object, or Z for null,
+followed by a colon. For Booleans the data must be either 0 or 1 for
+FALSE or TRUE, respectively. Likewise for Objects the data must be 0 or
+1 to end or begin an object, respectively. Data items in subobjects may
+be named, by prefixing the type with ’N’ and specifying the name before
+the value (i.e. <code>NB:myFlag:1</code>). This option may be used multiple
+times to construct arbitrary AMF sequences.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flashver</samp>’</dt>
+<dd><p>Version of the Flash plugin used to run the SWF player. The default
+is LNX 9,0,124,2. (When publishing, the default is FMLE/3.0 (compatible;
+<libavformat version>).)
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flush_interval</samp>’</dt>
+<dd><p>Number of packets flushed in the same request (RTMPT only). The default
+is 10.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_live</samp>’</dt>
+<dd><p>Specify that the media is a live stream. No resuming or seeking in
+live streams is possible. The default value is <code>any</code>, which means the
+subscriber first tries to play the live stream specified in the
+playpath. If a live stream of that name is not found, it plays the
+recorded stream. The other possible values are <code>live</code> and
+<code>recorded</code>.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_pageurl</samp>’</dt>
+<dd><p>URL of the web page in which the media was embedded. By default no
+value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_playpath</samp>’</dt>
+<dd><p>Stream identifier to play or to publish. This option overrides the
+parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_subscribe</samp>’</dt>
+<dd><p>Name of live stream to subscribe to. By default no value will be sent.
+It is only sent if the option is specified or if rtmp_live
+is set to live.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfhash</samp>’</dt>
+<dd><p>SHA256 hash of the decompressed SWF file (32 bytes).
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfsize</samp>’</dt>
+<dd><p>Size of the decompressed SWF file, required for SWFVerification.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfurl</samp>’</dt>
+<dd><p>URL of the SWF player for the media. By default no value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfverify</samp>’</dt>
+<dd><p>URL to player swf file, compute hash/size automatically.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_tcurl</samp>’</dt>
+<dd><p>URL of the target stream. Defaults to proto://host[:port]/app.
+</p>
+</dd>
+</dl>
+
+<p>For example to read with <code>ffplay</code> a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+</p><table><tr><td> </td><td><pre class="example">ffplay rtmp://myserver/vod/sample
+</pre></td></tr></table>
+
+<p>To publish to a password protected server, passing the playpath and
+app names separately:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
+</pre></td></tr></table>
+
+<a name="rtmpe"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtmpe">2.16 rtmpe</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol (RTMPE) is used for
+streaming multimedia content within standard cryptographic primitives,
+consisting of Diffie-Hellman key exchange and HMACSHA256, generating
+a pair of RC4 keys.
+</p>
+<a name="rtmps"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtmps">2.17 rtmps</a></h2>
+
+<p>Real-Time Messaging Protocol over a secure SSL connection.
+</p>
+<p>The Real-Time Messaging Protocol (RTMPS) is used for streaming
+multimedia content across an encrypted connection.
+</p>
+<a name="rtmpt"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtmpt">2.18 rtmpt</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTP (RTMPT) is used
+for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpte"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtmpte">2.19 rtmpte</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol tunneled through HTTP (RTMPTE)
+is used for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpts"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtmpts">2.20 rtmpts</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTPS.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTPS (RTMPTS) is used
+for streaming multimedia content within HTTPS requests to traverse
+firewalls.
+</p>
+<a name="libssh"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-libssh">2.21 libssh</a></h2>
+
+<p>Secure File Transfer Protocol via libssh
+</p>
+<p>Allow to read from or write to remote resources using SFTP protocol.
+</p>
+<p>Following syntax is required.
+</p>
+<table><tr><td> </td><td><pre class="example">sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout
+is not specified.
+</p>
+</dd>
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>private_key</samp>’</dt>
+<dd><p>Specify the path of the file containing private key to use during authorization.
+By default libssh searches for keys in the ‘<tt>~/.ssh/</tt>’ directory.
+</p>
+</dd>
+</dl>
+
+<p>Example: Play a file stored on remote server.
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
+</pre></td></tr></table>
+
+<a name="librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">2.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></h2>
+
+<p>Real-Time Messaging Protocol and its variants supported through
+librtmp.
+</p>
+<p>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.
+</p>
+<p>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).
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example"><var>rtmp_proto</var>://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>] <var>options</var>
+</pre></td></tr></table>
+
+<p>where <var>rtmp_proto</var> is one of the strings "rtmp", "rtmpt", "rtmpe",
+"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and
+<var>server</var>, <var>port</var>, <var>app</var> and <var>playpath</var> have the same
+meaning as specified for the RTMP native protocol.
+<var>options</var> contains a list of space-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>See the librtmp manual page (man 3 librtmp) for more information.
+</p>
+<p>For example, to stream a file in real-time to an RTMP server using
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
+</pre></td></tr></table>
+
+<p>To play the same stream using <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffplay "rtmp://myserver/live/mystream live=1"
+</pre></td></tr></table>
+
+<a name="rtp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtp">2.23 rtp</a></h2>
+
+<p>Real-time Transport Protocol.
+</p>
+<p>The required syntax for an RTP URL is:
+rtp://<var>hostname</var>[:<var>port</var>][?<var>option</var>=<var>val</var>...]
+</p>
+<p><var>port</var> specifies the RTP port to use.
+</p>
+<p>The following URL options are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ttl=<var>n</var></samp>’</dt>
+<dd><p>Set the TTL (Time-To-Live) value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>rtcpport=<var>n</var></samp>’</dt>
+<dd><p>Set the remote RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtpport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtcpport=<var>n</var>'</samp>’</dt>
+<dd><p>Set the local RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>n</var></samp>’</dt>
+<dd><p>Set max packet size (in bytes) to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>connect=0|1</samp>’</dt>
+<dd><p>Do a <code>connect()</code> on the UDP socket (if set to 1) or not (if set
+to 0).
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List allowed source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List disallowed (blocked) source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>write_to_source=0|1</samp>’</dt>
+<dd><p>Send packets to the source address of the latest received packet (if
+set to 1) or to a default remote address (if set to 0).
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+<p>This is a deprecated option. Instead, ‘<samp>localrtpport</samp>’ should be
+used.
+</p>
+</dd>
+</dl>
+
+<p>Important notes:
+</p>
+<ol>
+<li>
+If ‘<samp>rtcpport</samp>’ is not set the RTCP port will be set to the RTP
+port value plus 1.
+
+</li><li>
+If ‘<samp>localrtpport</samp>’ (the local RTP port) is not set any available
+port will be used for the local RTP and RTCP ports.
+
+</li><li>
+If ‘<samp>localrtcpport</samp>’ (the local RTCP port) is not set it will be
+set to the the local RTP port value plus 1.
+</li></ol>
+
+<a name="rtsp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-rtsp">2.24 rtsp</a></h2>
+
+<p>Real-Time Streaming Protocol.
+</p>
+<p>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).
+</p>
+<p>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
+<a href="http://github.com/revmischa/rtsp-server">RTSP server</a>).
+</p>
+<p>The required syntax for a RTSP url is:
+</p><table><tr><td> </td><td><pre class="example">rtsp://<var>hostname</var>[:<var>port</var>]/<var>path</var>
+</pre></td></tr></table>
+
+<p>Options can be set on the <code>ffmpeg</code>/<code>ffplay</code> command
+line, or set in code via <code>AVOption</code>s or in
+<code>avformat_open_input</code>.
+</p>
+<p>The following options are supported.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>initial_pause</samp>’</dt>
+<dd><p>Do not start playing the stream immediately if set to 1. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_transport</samp>’</dt>
+<dd><p>Set RTSP trasport protocols.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>udp</samp>’</dt>
+<dd><p>Use UDP as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>tcp</samp>’</dt>
+<dd><p>Use TCP (interleaving within the RTSP control channel) as lower
+transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>udp_multicast</samp>’</dt>
+<dd><p>Use UDP multicast as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>http</samp>’</dt>
+<dd><p>Use HTTP tunneling as lower transport protocol, which is useful for
+passing proxies.
+</p></dd>
+</dl>
+
+<p>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 ‘<samp>tcp</samp>’ and ‘<samp>udp</samp>’ options are supported.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_flags</samp>’</dt>
+<dd><p>Set RTSP flags.
+</p>
+<p>The following values are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>filter_src</samp>’</dt>
+<dd><p>Accept packets only from negotiated peer address and port.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>none</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>allowed_media_types</samp>’</dt>
+<dd><p>Set media types to accept from the server.
+</p>
+<p>The following flags are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dt> ‘<samp>audio</samp>’</dt>
+<dt> ‘<samp>data</samp>’</dt>
+</dl>
+
+<p>By default it accepts all media types.
+</p>
+</dd>
+<dt> ‘<samp>min_port</samp>’</dt>
+<dd><p>Set minimum local UDP port. Default value is 5000.
+</p>
+</dd>
+<dt> ‘<samp>max_port</samp>’</dt>
+<dd><p>Set maximum local UDP port. Default value is 65000.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set maximum timeout (in seconds) to wait for incoming connections.
+</p>
+<p>A value of -1 mean infinite (default). This option implies the
+‘<samp>rtsp_flags</samp>’ set to ‘<samp>listen</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>reorder_queue_size</samp>’</dt>
+<dd><p>Set number of packets to buffer for handling of reordered packets.
+</p>
+</dd>
+<dt> ‘<samp>stimeout</samp>’</dt>
+<dd><p>Set socket TCP I/O timeout in micro seconds.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dd><p>Override User-Agent header. If not specified, it default to the
+libavformat identifier string.
+</p></dd>
+</dl>
+
+<p>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). This
+can be disabled by setting the maximum demuxing delay to zero (via
+the <code>max_delay</code> field of AVFormatContext).
+</p>
+<p>When watching multi-bitrate Real-RTSP streams with <code>ffplay</code>, the
+streams to display can be chosen with <code>-vst</code> <var>n</var> and
+<code>-ast</code> <var>n</var> for video and audio respectively, and can be switched
+on the fly by pressing <code>v</code> and <code>a</code>.
+</p>
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-protocols.html#toc-Examples">2.24.1 Examples</a></h3>
+
+<p>The following examples all make use of the <code>ffplay</code> and
+<code>ffmpeg</code> tools.
+</p>
+<ul>
+<li>
+Watch a stream over UDP, with a max reordering delay of 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Watch a stream tunneled over HTTP:
+<table><tr><td> </td><td><pre class="example">ffplay -rtsp_transport http rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Send a stream in realtime to a RTSP server, for others to watch:
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
+</pre></td></tr></table>
+
+</li><li>
+Receive a stream in realtime:
+<table><tr><td> </td><td><pre class="example">ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp <var>output</var>
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sap"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-sap">2.25 sap</a></h2>
+
+<p>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.
+</p>
+<a name="Muxer"></a>
+<h3 class="subsection"><a href="ffmpeg-protocols.html#toc-Muxer">2.25.1 Muxer</a></h3>
+
+<p>The syntax for a SAP url given to the muxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://<var>destination</var>[:<var>port</var>][?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The RTP packets are sent to <var>destination</var> on port <var>port</var>,
+or to port 5004 if no port is specified.
+<var>options</var> is a <code>&</code>-separated list. The following options
+are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>announce_addr=<var>address</var></samp>’</dt>
+<dd><p>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 <var>destination</var> is an IPv6 address.
+</p>
+</dd>
+<dt> ‘<samp>announce_port=<var>port</var></samp>’</dt>
+<dd><p>Specify the port to send the announcements on, defaults to
+9875 if not specified.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Specify the time to live value for the announcements and RTP packets,
+defaults to 255.
+</p>
+</dd>
+<dt> ‘<samp>same_port=<var>0|1</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>Example command lines follow.
+</p>
+<p>To broadcast a stream on the local subnet, for watching in VLC:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255?same_port=1
+</pre></td></tr></table>
+
+<p>Similarly, for watching in <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255
+</pre></td></tr></table>
+
+<p>And for watching in <code>ffplay</code>, over IPv6:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://[ff0e::1:2:3:4]
+</pre></td></tr></table>
+
+<a name="Demuxer"></a>
+<h3 class="subsection"><a href="ffmpeg-protocols.html#toc-Demuxer">2.25.2 Demuxer</a></h3>
+
+<p>The syntax for a SAP url given to the demuxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://[<var>address</var>][:<var>port</var>]
+</pre></td></tr></table>
+
+<p><var>address</var> is the multicast address to listen for announcements on,
+if omitted, the default 224.2.127.254 (sap.mcast.net) is used. <var>port</var>
+is the port that is listened on, 9875 if omitted.
+</p>
+<p>The demuxers listens for announcements on the given address and port.
+Once an announcement is received, it tries to receive that particular stream.
+</p>
+<p>Example command lines follow.
+</p>
+<p>To play back the first stream announced on the normal SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://
+</pre></td></tr></table>
+
+<p>To play back the first stream announced on one the default IPv6 SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://[ff0e::2:7ffe]
+</pre></td></tr></table>
+
+<a name="sctp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-sctp">2.26 sctp</a></h2>
+
+<p>Stream Control Transmission Protocol.
+</p>
+<p>The accepted URL syntax is:
+</p><table><tr><td> </td><td><pre class="example">sctp://<var>host</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The protocol accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>If set to any value, listen for an incoming connection. Outgoing connection is done by default.
+</p>
+</dd>
+<dt> ‘<samp>max_streams</samp>’</dt>
+<dd><p>Set the maximum number of streams. By default no limit is set.
+</p></dd>
+</dl>
+
+<a name="srtp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-srtp">2.27 srtp</a></h2>
+
+<p>Secure Real-time Transport Protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>srtp_in_suite</samp>’</dt>
+<dt> ‘<samp>srtp_out_suite</samp>’</dt>
+<dd><p>Select input and output encoding suites.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_32</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_32</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>srtp_in_params</samp>’</dt>
+<dt> ‘<samp>srtp_out_params</samp>’</dt>
+<dd><p>Set input and output encoding parameters, which are expressed by a
+base64-encoded representation of a binary block. The first 16 bytes of
+this binary block are used as master key, the following 14 bytes are
+used as master salt.
+</p></dd>
+</dl>
+
+<a name="tcp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-tcp">2.28 tcp</a></h2>
+
+<p>Transmission Control Protocol.
+</p>
+<p>The required syntax for a TCP url is:
+</p><table><tr><td> </td><td><pre class="example">tcp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>Listen for an incoming connection. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p>
+</dd>
+<dt> ‘<samp>listen_timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set listen timeout, expressed in microseconds.
+</p></dd>
+</dl>
+
+<p>The following example shows how to setup a listening TCP connection
+with <code>ffmpeg</code>, which is then accessed with <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tcp://<var>hostname</var>:<var>port</var>?listen
+ffplay tcp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="tls"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-tls">2.29 tls</a></h2>
+
+<p>Transport Layer Security (TLS) / Secure Sockets Layer (SSL)
+</p>
+<p>The required syntax for a TLS/SSL url is:
+</p><table><tr><td> </td><td><pre class="example">tls://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ca_file, cafile=<var>filename</var></samp>’</dt>
+<dd><p>A file containing certificate authority (CA) root certificates to treat
+as trusted. If the linked TLS library contains a default this might not
+need to be specified for verification to work, but not all libraries and
+setups have defaults built in.
+The file must be in OpenSSL PEM format.
+</p>
+</dd>
+<dt> ‘<samp>tls_verify=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, try to verify the peer that we are communicating with.
+Note, if using OpenSSL, this currently only makes sure that the
+peer certificate is signed by one of the root certificates in the CA
+database, but it does not validate that the certificate actually
+matches the host name we are trying to connect to. (With GnuTLS,
+the host name is validated as well.)
+</p>
+<p>This is disabled by default since it requires a CA database to be
+provided by the caller in many cases.
+</p>
+</dd>
+<dt> ‘<samp>cert_file, cert=<var>filename</var></samp>’</dt>
+<dd><p>A file containing a certificate to use in the handshake with the peer.
+(When operating as server, in listen mode, this is more often required
+by the peer, while client certificates only are mandated in certain
+setups.)
+</p>
+</dd>
+<dt> ‘<samp>key_file, key=<var>filename</var></samp>’</dt>
+<dd><p>A file containing the private key for the certificate.
+</p>
+</dd>
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, listen for connections on the provided port, and assume
+the server role in the handshake instead of the client role.
+</p>
+</dd>
+</dl>
+
+<p>Example command lines:
+</p>
+<p>To create a TLS/SSL server that serves an input stream.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tls://<var>hostname</var>:<var>port</var>?listen&cert=<var>server.crt</var>&key=<var>server.key</var>
+</pre></td></tr></table>
+
+<p>To play back a stream from the TLS/SSL server using <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay tls://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="udp"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-udp">2.30 udp</a></h2>
+
+<p>User Datagram Protocol.
+</p>
+<p>The required syntax for an UDP URL is:
+</p><table><tr><td> </td><td><pre class="example">udp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form <var>key</var>=<var>val</var>.
+</p>
+<p>In case threading is enabled on the system, a circular buffer is used
+to store the incoming data, which allows one to reduce loss of data due to
+UDP socket buffer overruns. The <var>fifo_size</var> and
+<var>overrun_nonfatal</var> options are related to this buffer.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>buffer_size=<var>size</var></samp>’</dt>
+<dd><p>Set the UDP socket buffer size in bytes. This is used both for the
+receiving and the sending buffer size.
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>port</var></samp>’</dt>
+<dd><p>Override the local UDP port to bind with.
+</p>
+</dd>
+<dt> ‘<samp>localaddr=<var>addr</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>size</var></samp>’</dt>
+<dd><p>Set the size in bytes of UDP packets.
+</p>
+</dd>
+<dt> ‘<samp>reuse=<var>1|0</var></samp>’</dt>
+<dd><p>Explicitly allow or disallow reusing UDP sockets.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Set the time to live value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>connect=<var>1|0</var></samp>’</dt>
+<dd><p>Initialize the UDP socket with <code>connect()</code>. 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.
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Only receive packets sent to the multicast group from one of the
+specified sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Ignore packets sent to the multicast group from the specified
+sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>fifo_size=<var>units</var></samp>’</dt>
+<dd><p>Set the UDP receiving circular buffer size, expressed as a number of
+packets with size of 188 bytes. If not specified defaults to 7*4096.
+</p>
+</dd>
+<dt> ‘<samp>overrun_nonfatal=<var>1|0</var></samp>’</dt>
+<dd><p>Survive in case of UDP receiving circular buffer overrun. Default
+value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p></dd>
+</dl>
+
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-protocols.html#toc-Examples-1">2.30.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to stream over UDP to a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> udp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to stream in mpegts format over UDP using 188
+sized UDP packets, using a large input buffer:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f mpegts udp://<var>hostname</var>:<var>port</var>?pkt_size=188&buffer_size=65535
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to receive over UDP from a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i udp://[<var>multicast-address</var>]:<var>port</var> ...
+</pre></td></tr></table>
+</li></ul>
+
+<a name="unix"></a>
+<h2 class="section"><a href="ffmpeg-protocols.html#toc-unix">2.31 unix</a></h2>
+
+<p>Unix local socket
+</p>
+<p>The required syntax for a Unix socket URL is:
+</p>
+<table><tr><td> </td><td><pre class="example">unix://<var>filepath</var>
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Timeout in ms.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Create the Unix socket in listening mode.
+</p></dd>
+</dl>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-protocols.html#toc-See-Also">3. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavformat.html">libavformat</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-protocols.html#toc-Authors">4. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Resampler </title>
+
+<meta name="description" content="FFmpeg Resampler Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Resampler ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Resampler Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Resampler-Options" href="#Resampler-Options">2. Resampler Options</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">3. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">4. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-resampler.html#toc-Description">1. Description</a></h1>
+
+<p>The FFmpeg resampler provides a high-level interface to the
+libswresample library audio resampling utilities. In particular it
+allows one to perform audio resampling, audio channel layout rematrixing,
+and convert audio format and packing layout.
+</p>
+
+<a name="Resampler-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-resampler.html#toc-Resampler-Options">2. Resampler Options</a></h1>
+
+<p>The audio resampler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, <var>option</var>=<var>value</var> for the aresample filter,
+by setting the value explicitly in the
+<code>SwrContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API for
+programmatic use.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ich, in_channel_count</samp>’</dt>
+<dd><p>Set the number of input channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>in_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>och, out_channel_count</samp>’</dt>
+<dd><p>Set the number of output channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>out_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>uch, used_channel_count</samp>’</dt>
+<dd><p>Set the number of used input channels. Default value is 0. This option is
+only used for special remapping.
+</p>
+</dd>
+<dt> ‘<samp>isr, in_sample_rate</samp>’</dt>
+<dd><p>Set the input sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>osr, out_sample_rate</samp>’</dt>
+<dd><p>Set the output sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>isf, in_sample_fmt</samp>’</dt>
+<dd><p>Specify the input sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>osf, out_sample_fmt</samp>’</dt>
+<dd><p>Specify the output sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>tsf, internal_sample_fmt</samp>’</dt>
+<dd><p>Set the internal sample format. Default value is <code>none</code>.
+This will automatically be chosen when it is not explicitly set.
+</p>
+</dd>
+<dt> ‘<samp>icl, in_channel_layout</samp>’</dt>
+<dt> ‘<samp>ocl, out_channel_layout</samp>’</dt>
+<dd><p>Set the input/output channel layout.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p>
+</dd>
+<dt> ‘<samp>clev, center_mix_level</samp>’</dt>
+<dd><p>Set the center mix level. It is a value expressed in deciBel, and must be
+in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>slev, surround_mix_level</samp>’</dt>
+<dd><p>Set the surround mix level. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>lfe_mix_level</samp>’</dt>
+<dd><p>Set LFE mix into non LFE level. It is used when there is a LFE input but no
+LFE output. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>rmvol, rematrix_volume</samp>’</dt>
+<dd><p>Set rematrix volume. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>rematrix_maxval</samp>’</dt>
+<dd><p>Set maximum output value for rematrixing.
+This can be used to prevent clipping vs. preventing volumn reduction
+A value of 1.0 prevents cliping.
+</p>
+</dd>
+<dt> ‘<samp>flags, swr_flags</samp>’</dt>
+<dd><p>Set flags used by the converter. Default value is 0.
+</p>
+<p>It supports the following individual flags:
+</p><dl compact="compact">
+<dt> ‘<samp>res</samp>’</dt>
+<dd><p>force resampling, this flag forces resampling to be used even when the
+input and output sample rates match.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dither_scale</samp>’</dt>
+<dd><p>Set the dither scale. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>dither_method</samp>’</dt>
+<dd><p>Set dither method. Default value is 0.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>rectangular</samp>’</dt>
+<dd><p>select rectangular dither
+</p></dd>
+<dt> ‘<samp>triangular</samp>’</dt>
+<dd><p>select triangular dither
+</p></dd>
+<dt> ‘<samp>triangular_hp</samp>’</dt>
+<dd><p>select triangular dither with high pass
+</p></dd>
+<dt> ‘<samp>lipshitz</samp>’</dt>
+<dd><p>select lipshitz noise shaping dither
+</p></dd>
+<dt> ‘<samp>shibata</samp>’</dt>
+<dd><p>select shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>low_shibata</samp>’</dt>
+<dd><p>select low shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>high_shibata</samp>’</dt>
+<dd><p>select high shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>f_weighted</samp>’</dt>
+<dd><p>select f-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>modified_e_weighted</samp>’</dt>
+<dd><p>select modified-e-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>improved_e_weighted</samp>’</dt>
+<dd><p>select improved-e-weighted noise shaping dither
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>resampler</samp>’</dt>
+<dd><p>Set resampling engine. Default value is swr.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>swr</samp>’</dt>
+<dd><p>select the native SW Resampler; filter options precision and cheby are not
+applicable in this case.
+</p></dd>
+<dt> ‘<samp>soxr</samp>’</dt>
+<dd><p>select the SoX Resampler (where available); compensation, and filter options
+filter_size, phase_shift, filter_type & kaiser_beta, are not applicable in this
+case.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>filter_size</samp>’</dt>
+<dd><p>For swr only, set resampling filter size, default value is 32.
+</p>
+</dd>
+<dt> ‘<samp>phase_shift</samp>’</dt>
+<dd><p>For swr only, set resampling phase shift, default value is 10, and must be in
+the interval [0,30].
+</p>
+</dd>
+<dt> ‘<samp>linear_interp</samp>’</dt>
+<dd><p>Use Linear Interpolation if set to 1, default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>cutoff</samp>’</dt>
+<dd><p>Set cutoff frequency (swr: 6dB point; soxr: 0dB point) ratio; must be a float
+value between 0 and 1. Default value is 0.97 with swr, and 0.91 with soxr
+(which, with a sample-rate of 44100, preserves the entire audio band to 20kHz).
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>For soxr only, the precision in bits to which the resampled signal will be
+calculated. The default value of 20 (which, with suitable dithering, is
+appropriate for a destination bit-depth of 16) gives SoX’s ’High Quality’; a
+value of 28 gives SoX’s ’Very High Quality’.
+</p>
+</dd>
+<dt> ‘<samp>cheby</samp>’</dt>
+<dd><p>For soxr only, selects passband rolloff none (Chebyshev) & higher-precision
+approximation for ’irrational’ ratios. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>async</samp>’</dt>
+<dd><p>For swr only, simple 1 parameter audio sync to timestamps using stretching,
+squeezing, filling and trimming. Setting this to 1 will enable filling and
+trimming, larger values represent the maximum amount in samples that the data
+may be stretched or squeezed for each second.
+Default value is 0, thus no compensation is applied to make the samples match
+the audio timestamps.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>For swr only, assume the first pts should be this value. The time unit is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+<dt> ‘<samp>min_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger stretching/squeezing/filling or trimming of the
+data to make it match the timestamps. The default is that
+stretching/squeezing/filling and trimming is disabled
+(‘<samp>min_comp</samp>’ = <code>FLT_MAX</code>).
+</p>
+</dd>
+<dt> ‘<samp>min_hard_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger adding/dropping samples to make it match the
+timestamps. This option effectively is a threshold to select between
+hard (trim/fill) and soft (squeeze/stretch) compensation. Note that
+all compensation is by default disabled through ‘<samp>min_comp</samp>’.
+The default is 0.1.
+</p>
+</dd>
+<dt> ‘<samp>comp_duration</samp>’</dt>
+<dd><p>For swr only, set duration (in seconds) over which data is stretched/squeezed
+to make it match the timestamps. Must be a non-negative double float value,
+default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>max_soft_comp</samp>’</dt>
+<dd><p>For swr only, set maximum factor by which data is stretched/squeezed to make it
+match the timestamps. Must be a non-negative double float value, default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>matrix_encoding</samp>’</dt>
+<dd><p>Select matrixed stereo encoding.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>select none
+</p></dd>
+<dt> ‘<samp>dolby</samp>’</dt>
+<dd><p>select Dolby
+</p></dd>
+<dt> ‘<samp>dplii</samp>’</dt>
+<dd><p>select Dolby Pro Logic II
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>filter_type</samp>’</dt>
+<dd><p>For swr only, select resampling filter type. This only affects resampling
+operations.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>cubic</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>blackman_nuttall</samp>’</dt>
+<dd><p>select Blackman Nuttall Windowed Sinc
+</p></dd>
+<dt> ‘<samp>kaiser</samp>’</dt>
+<dd><p>select Kaiser Windowed Sinc
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>kaiser_beta</samp>’</dt>
+<dd><p>For swr only, set Kaiser Window Beta value. Must be an integer in the
+interval [2,16], default value is 9.
+</p>
+</dd>
+<dt> ‘<samp>output_sample_bits</samp>’</dt>
+<dd><p>For swr only, set number of used output sample bits for dithering. Must be an integer in the
+interval [0,64], default value is 0, which means it’s not used.
+</p>
+</dd>
+</dl>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-resampler.html#toc-See-Also">3. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libswresample.html">libswresample</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-resampler.html#toc-Authors">4. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Scaler </title>
+
+<meta name="description" content="FFmpeg Scaler Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Scaler ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Scaler Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Scaler-Options" href="#Scaler-Options">2. Scaler Options</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">3. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">4. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-scaler.html#toc-Description">1. Description</a></h1>
+
+<p>The FFmpeg rescaler provides a high-level interface to the libswscale
+library image conversion utilities. In particular it allows one to perform
+image rescaling and pixel format conversion.
+</p>
+
+<p><a name="scaler_005foptions"></a>
+</p><a name="Scaler-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-scaler.html#toc-Scaler-Options">2. Scaler Options</a></h1>
+
+<p>The video scaler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools. For programmatic use, they can be set explicitly in the
+<code>SwsContext</code> options or through the ‘<tt>libavutil/opt.h</tt>’ API.
+</p>
+<dl compact="compact">
+<dd>
+<p><a name="sws_005fflags"></a>
+</p></dd>
+<dt> ‘<samp>sws_flags</samp>’</dt>
+<dd><p>Set the scaler flags. This is also used to set the scaling
+algorithm. Only a single algorithm should be selected.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast_bilinear</samp>’</dt>
+<dd><p>Select fast bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Select bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>Select experimental scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>neighbor</samp>’</dt>
+<dd><p>Select nearest neighbor rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>area</samp>’</dt>
+<dd><p>Select averaging area rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicublin</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm for the luma component, bilinear for
+chroma components.
+</p>
+</dd>
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>Select Gaussian rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>sinc</samp>’</dt>
+<dd><p>Select sinc rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>lanczos</samp>’</dt>
+<dd><p>Select lanczos rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>spline</samp>’</dt>
+<dd><p>Select natural bicubic spline rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>print_info</samp>’</dt>
+<dd><p>Enable printing/debug logging.
+</p>
+</dd>
+<dt> ‘<samp>accurate_rnd</samp>’</dt>
+<dd><p>Enable accurate rounding.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_int</samp>’</dt>
+<dd><p>Enable full chroma interpolation.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_inp</samp>’</dt>
+<dd><p>Select full chroma input.
+</p>
+</dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Enable bitexact output.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>srcw</samp>’</dt>
+<dd><p>Set source width.
+</p>
+</dd>
+<dt> ‘<samp>srch</samp>’</dt>
+<dd><p>Set source height.
+</p>
+</dd>
+<dt> ‘<samp>dstw</samp>’</dt>
+<dd><p>Set destination width.
+</p>
+</dd>
+<dt> ‘<samp>dsth</samp>’</dt>
+<dd><p>Set destination height.
+</p>
+</dd>
+<dt> ‘<samp>src_format</samp>’</dt>
+<dd><p>Set source pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>dst_format</samp>’</dt>
+<dd><p>Set destination pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>src_range</samp>’</dt>
+<dd><p>Select source range.
+</p>
+</dd>
+<dt> ‘<samp>dst_range</samp>’</dt>
+<dd><p>Select destination range.
+</p>
+</dd>
+<dt> ‘<samp>param0, param1</samp>’</dt>
+<dd><p>Set scaling algorithm parameters. The specified values are specific of
+some scaling algorithms and ignored by others. The specified values
+are floating point number values.
+</p>
+</dd>
+<dt> ‘<samp>sws_dither</samp>’</dt>
+<dd><p>Set the dithering algorithm. Accepts one of the following
+values. Default value is ‘<samp>auto</samp>’.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>automatic choice
+</p>
+</dd>
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>no dithering
+</p>
+</dd>
+<dt> ‘<samp>bayer</samp>’</dt>
+<dd><p>bayer dither
+</p>
+</dd>
+<dt> ‘<samp>ed</samp>’</dt>
+<dd><p>error diffusion dither
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-scaler.html#toc-See-Also">3. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libswscale.html">libswscale</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-scaler.html#toc-Authors">4. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : FFmpeg Utilities </title>
+
+<meta name="description" content="FFmpeg Utilities Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : FFmpeg Utilities ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">FFmpeg Utilities Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Syntax" href="#Syntax">2. Syntax</a>
+ <ul class="toc">
+ <li><a name="toc-Quoting-and-escaping" href="#Quoting-and-escaping">2.1 Quoting and escaping</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">2.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Date" href="#Date">2.2 Date</a></li>
+ <li><a name="toc-Time-duration" href="#Time-duration">2.3 Time duration</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">2.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Video-size" href="#Video-size">2.4 Video size</a></li>
+ <li><a name="toc-Video-rate" href="#Video-rate">2.5 Video rate</a></li>
+ <li><a name="toc-Ratio" href="#Ratio">2.6 Ratio</a></li>
+ <li><a name="toc-Color" href="#Color">2.7 Color</a></li>
+ <li><a name="toc-Channel-Layout" href="#Channel-Layout">2.8 Channel Layout</a></li>
+ </ul></li>
+ <li><a name="toc-Expression-Evaluation" href="#Expression-Evaluation">3. Expression Evaluation</a></li>
+ <li><a name="toc-OpenCL-Options" href="#OpenCL-Options">4. OpenCL Options</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">5. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">6. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg-utils.html#toc-Description">1. Description</a></h1>
+
+<p>This document describes some generic features and utilities provided
+by the libavutil library.
+</p>
+
+<a name="Syntax"></a>
+<h1 class="chapter"><a href="ffmpeg-utils.html#toc-Syntax">2. Syntax</a></h1>
+
+<p>This section documents the syntax and formats employed by the FFmpeg
+libraries and tools.
+</p>
+<p><a name="quoting_005fand_005fescaping"></a>
+</p><a name="Quoting-and-escaping"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Quoting-and-escaping">2.1 Quoting and escaping</a></h2>
+
+<p>FFmpeg adopts the following quoting and escaping mechanism, unless
+explicitly specified. The following rules are applied:
+</p>
+<ul>
+<li>
+<code>'</code> and <code>\</code> are special characters (respectively used for
+quoting and escaping). In addition to them, there might be other
+special characters depending on the specific syntax where the escaping
+and quoting are employed.
+
+</li><li>
+A special character is escaped by prefixing it with a ’\’.
+
+</li><li>
+All characters enclosed between ” are included literally in the
+parsed string. The quote character <code>'</code> itself cannot be quoted,
+so you may need to close the quote and escape it.
+
+</li><li>
+Leading and trailing whitespaces, unless escaped or quoted, are
+removed from the parsed string.
+</li></ul>
+
+<p>Note that you may need to add a second level of escaping when using
+the command line or a script, which depends on the syntax of the
+adopted shell language.
+</p>
+<p>The function <code>av_get_token</code> defined in
+‘<tt>libavutil/avstring.h</tt>’ can be used to parse a token quoted or
+escaped according to the rules defined above.
+</p>
+<p>The tool ‘<tt>tools/ffescape</tt>’ in the FFmpeg source tree can be used
+to automatically quote or escape a string in a script.
+</p>
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffmpeg-utils.html#toc-Examples">2.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Escape the string <code>Crime d'Amour</code> containing the <code>'</code> special
+character:
+<table><tr><td> </td><td><pre class="example">Crime d\'Amour
+</pre></td></tr></table>
+
+</li><li>
+The string above contains a quote, so the <code>'</code> needs to be escaped
+when quoting it:
+<table><tr><td> </td><td><pre class="example">'Crime d'\''Amour'
+</pre></td></tr></table>
+
+</li><li>
+Include leading or trailing whitespaces using quoting:
+<table><tr><td> </td><td><pre class="example">' this string starts and ends with whitespaces '
+</pre></td></tr></table>
+
+</li><li>
+Escaping and quoting can be mixed together:
+<table><tr><td> </td><td><pre class="example">' The string '\'string\'' is a string '
+</pre></td></tr></table>
+
+</li><li>
+To include a literal <code>\</code> you can use either escaping or quoting:
+<table><tr><td> </td><td><pre class="example">'c:\foo' can be written as c:\\foo
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="date-syntax"></a>
+</p><a name="Date"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Date">2.2 Date</a></h2>
+
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
+now
+</pre></td></tr></table>
+
+<p>If the value is "now" it takes the current time.
+</p>
+<p>Time is local time unless 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.
+</p>
+<p><a name="time-duration-syntax"></a>
+</p><a name="Time-duration"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Time-duration">2.3 Time duration</a></h2>
+
+<p>There are two accepted syntaxes for expressing time duration.
+</p>
+<table><tr><td> </td><td><pre class="example">[-][<var>HH</var>:]<var>MM</var>:<var>SS</var>[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>HH</var> expresses the number of hours, <var>MM</var> the number of minutes
+for a maximum of 2 digits, and <var>SS</var> the number of seconds for a
+maximum of 2 digits. The <var>m</var> at the end expresses decimal value for
+<var>SS</var>.
+</p>
+<p><em>or</em>
+</p>
+<table><tr><td> </td><td><pre class="example">[-]<var>S</var>+[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>S</var> expresses the number of seconds, with the optional decimal part
+<var>m</var>.
+</p>
+<p>In both expressions, the optional ‘<samp>-</samp>’ indicates negative duration.
+</p>
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffmpeg-utils.html#toc-Examples-1">2.3.1 Examples</a></h3>
+
+<p>The following examples are all valid time duration:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>55</samp>’</dt>
+<dd><p>55 seconds
+</p>
+</dd>
+<dt> ‘<samp>12:03:45</samp>’</dt>
+<dd><p>12 hours, 03 minutes and 45 seconds
+</p>
+</dd>
+<dt> ‘<samp>23.189</samp>’</dt>
+<dd><p>23.189 seconds
+</p></dd>
+</dl>
+
+<p><a name="video-size-syntax"></a>
+</p><a name="Video-size"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Video-size">2.4 Video size</a></h2>
+<p>Specify the size of the sourced video, it may be a string of the form
+<var>width</var>x<var>height</var>, or the name of a size abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>720x480
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>720x576
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>768x576
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>sqcif</samp>’</dt>
+<dd><p>128x96
+</p></dd>
+<dt> ‘<samp>qcif</samp>’</dt>
+<dd><p>176x144
+</p></dd>
+<dt> ‘<samp>cif</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>4cif</samp>’</dt>
+<dd><p>704x576
+</p></dd>
+<dt> ‘<samp>16cif</samp>’</dt>
+<dd><p>1408x1152
+</p></dd>
+<dt> ‘<samp>qqvga</samp>’</dt>
+<dd><p>160x120
+</p></dd>
+<dt> ‘<samp>qvga</samp>’</dt>
+<dd><p>320x240
+</p></dd>
+<dt> ‘<samp>vga</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>svga</samp>’</dt>
+<dd><p>800x600
+</p></dd>
+<dt> ‘<samp>xga</samp>’</dt>
+<dd><p>1024x768
+</p></dd>
+<dt> ‘<samp>uxga</samp>’</dt>
+<dd><p>1600x1200
+</p></dd>
+<dt> ‘<samp>qxga</samp>’</dt>
+<dd><p>2048x1536
+</p></dd>
+<dt> ‘<samp>sxga</samp>’</dt>
+<dd><p>1280x1024
+</p></dd>
+<dt> ‘<samp>qsxga</samp>’</dt>
+<dd><p>2560x2048
+</p></dd>
+<dt> ‘<samp>hsxga</samp>’</dt>
+<dd><p>5120x4096
+</p></dd>
+<dt> ‘<samp>wvga</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>wxga</samp>’</dt>
+<dd><p>1366x768
+</p></dd>
+<dt> ‘<samp>wsxga</samp>’</dt>
+<dd><p>1600x1024
+</p></dd>
+<dt> ‘<samp>wuxga</samp>’</dt>
+<dd><p>1920x1200
+</p></dd>
+<dt> ‘<samp>woxga</samp>’</dt>
+<dd><p>2560x1600
+</p></dd>
+<dt> ‘<samp>wqsxga</samp>’</dt>
+<dd><p>3200x2048
+</p></dd>
+<dt> ‘<samp>wquxga</samp>’</dt>
+<dd><p>3840x2400
+</p></dd>
+<dt> ‘<samp>whsxga</samp>’</dt>
+<dd><p>6400x4096
+</p></dd>
+<dt> ‘<samp>whuxga</samp>’</dt>
+<dd><p>7680x4800
+</p></dd>
+<dt> ‘<samp>cga</samp>’</dt>
+<dd><p>320x200
+</p></dd>
+<dt> ‘<samp>ega</samp>’</dt>
+<dd><p>640x350
+</p></dd>
+<dt> ‘<samp>hd480</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>hd720</samp>’</dt>
+<dd><p>1280x720
+</p></dd>
+<dt> ‘<samp>hd1080</samp>’</dt>
+<dd><p>1920x1080
+</p></dd>
+<dt> ‘<samp>2k</samp>’</dt>
+<dd><p>2048x1080
+</p></dd>
+<dt> ‘<samp>2kflat</samp>’</dt>
+<dd><p>1998x1080
+</p></dd>
+<dt> ‘<samp>2kscope</samp>’</dt>
+<dd><p>2048x858
+</p></dd>
+<dt> ‘<samp>4k</samp>’</dt>
+<dd><p>4096x2160
+</p></dd>
+<dt> ‘<samp>4kflat</samp>’</dt>
+<dd><p>3996x2160
+</p></dd>
+<dt> ‘<samp>4kscope</samp>’</dt>
+<dd><p>4096x1716
+</p></dd>
+<dt> ‘<samp>nhd</samp>’</dt>
+<dd><p>640x360
+</p></dd>
+<dt> ‘<samp>hqvga</samp>’</dt>
+<dd><p>240x160
+</p></dd>
+<dt> ‘<samp>wqvga</samp>’</dt>
+<dd><p>400x240
+</p></dd>
+<dt> ‘<samp>fwqvga</samp>’</dt>
+<dd><p>432x240
+</p></dd>
+<dt> ‘<samp>hvga</samp>’</dt>
+<dd><p>480x320
+</p></dd>
+<dt> ‘<samp>qhd</samp>’</dt>
+<dd><p>960x540
+</p></dd>
+</dl>
+
+<p><a name="video-rate-syntax"></a>
+</p><a name="Video-rate"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Video-rate">2.5 Video rate</a></h2>
+
+<p>Specify the frame rate of a video, expressed as the number of frames
+generated per second. It has to be a string in the format
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>24/1
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>24000/1001
+</p></dd>
+</dl>
+
+<p><a name="ratio-syntax"></a>
+</p><a name="Ratio"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Ratio">2.6 Ratio</a></h2>
+
+<p>A ratio can be expressed as an expression, or in the form
+<var>numerator</var>:<var>denominator</var>.
+</p>
+<p>Note that a ratio with infinite (1/0) or negative value is
+considered valid, so you should check on the returned value if you
+want to exclude those values.
+</p>
+<p>The undefined value can be expressed using the "0:0" string.
+</p>
+<p><a name="color-syntax"></a>
+</p><a name="Color"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Color">2.7 Color</a></h2>
+
+<p>It can be the name of a color as defined below (case insensitive match) or a
+<code>[0x|#]RRGGBB[AA]</code> sequence, possibly followed by @ and a string
+representing the alpha component.
+</p>
+<p>The alpha component may be a string composed by "0x" followed by an
+hexadecimal number or a decimal number between 0.0 and 1.0, which
+represents the opacity value (‘<samp>0x00</samp>’ or ‘<samp>0.0</samp>’ means completely
+transparent, ‘<samp>0xff</samp>’ or ‘<samp>1.0</samp>’ completely opaque). If the alpha
+component is not specified then ‘<samp>0xff</samp>’ is assumed.
+</p>
+<p>The string ‘<samp>random</samp>’ will result in a random color.
+</p>
+<p>The following names of colors are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>AliceBlue</samp>’</dt>
+<dd><p>0xF0F8FF
+</p></dd>
+<dt> ‘<samp>AntiqueWhite</samp>’</dt>
+<dd><p>0xFAEBD7
+</p></dd>
+<dt> ‘<samp>Aqua</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>Aquamarine</samp>’</dt>
+<dd><p>0x7FFFD4
+</p></dd>
+<dt> ‘<samp>Azure</samp>’</dt>
+<dd><p>0xF0FFFF
+</p></dd>
+<dt> ‘<samp>Beige</samp>’</dt>
+<dd><p>0xF5F5DC
+</p></dd>
+<dt> ‘<samp>Bisque</samp>’</dt>
+<dd><p>0xFFE4C4
+</p></dd>
+<dt> ‘<samp>Black</samp>’</dt>
+<dd><p>0x000000
+</p></dd>
+<dt> ‘<samp>BlanchedAlmond</samp>’</dt>
+<dd><p>0xFFEBCD
+</p></dd>
+<dt> ‘<samp>Blue</samp>’</dt>
+<dd><p>0x0000FF
+</p></dd>
+<dt> ‘<samp>BlueViolet</samp>’</dt>
+<dd><p>0x8A2BE2
+</p></dd>
+<dt> ‘<samp>Brown</samp>’</dt>
+<dd><p>0xA52A2A
+</p></dd>
+<dt> ‘<samp>BurlyWood</samp>’</dt>
+<dd><p>0xDEB887
+</p></dd>
+<dt> ‘<samp>CadetBlue</samp>’</dt>
+<dd><p>0x5F9EA0
+</p></dd>
+<dt> ‘<samp>Chartreuse</samp>’</dt>
+<dd><p>0x7FFF00
+</p></dd>
+<dt> ‘<samp>Chocolate</samp>’</dt>
+<dd><p>0xD2691E
+</p></dd>
+<dt> ‘<samp>Coral</samp>’</dt>
+<dd><p>0xFF7F50
+</p></dd>
+<dt> ‘<samp>CornflowerBlue</samp>’</dt>
+<dd><p>0x6495ED
+</p></dd>
+<dt> ‘<samp>Cornsilk</samp>’</dt>
+<dd><p>0xFFF8DC
+</p></dd>
+<dt> ‘<samp>Crimson</samp>’</dt>
+<dd><p>0xDC143C
+</p></dd>
+<dt> ‘<samp>Cyan</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>DarkBlue</samp>’</dt>
+<dd><p>0x00008B
+</p></dd>
+<dt> ‘<samp>DarkCyan</samp>’</dt>
+<dd><p>0x008B8B
+</p></dd>
+<dt> ‘<samp>DarkGoldenRod</samp>’</dt>
+<dd><p>0xB8860B
+</p></dd>
+<dt> ‘<samp>DarkGray</samp>’</dt>
+<dd><p>0xA9A9A9
+</p></dd>
+<dt> ‘<samp>DarkGreen</samp>’</dt>
+<dd><p>0x006400
+</p></dd>
+<dt> ‘<samp>DarkKhaki</samp>’</dt>
+<dd><p>0xBDB76B
+</p></dd>
+<dt> ‘<samp>DarkMagenta</samp>’</dt>
+<dd><p>0x8B008B
+</p></dd>
+<dt> ‘<samp>DarkOliveGreen</samp>’</dt>
+<dd><p>0x556B2F
+</p></dd>
+<dt> ‘<samp>Darkorange</samp>’</dt>
+<dd><p>0xFF8C00
+</p></dd>
+<dt> ‘<samp>DarkOrchid</samp>’</dt>
+<dd><p>0x9932CC
+</p></dd>
+<dt> ‘<samp>DarkRed</samp>’</dt>
+<dd><p>0x8B0000
+</p></dd>
+<dt> ‘<samp>DarkSalmon</samp>’</dt>
+<dd><p>0xE9967A
+</p></dd>
+<dt> ‘<samp>DarkSeaGreen</samp>’</dt>
+<dd><p>0x8FBC8F
+</p></dd>
+<dt> ‘<samp>DarkSlateBlue</samp>’</dt>
+<dd><p>0x483D8B
+</p></dd>
+<dt> ‘<samp>DarkSlateGray</samp>’</dt>
+<dd><p>0x2F4F4F
+</p></dd>
+<dt> ‘<samp>DarkTurquoise</samp>’</dt>
+<dd><p>0x00CED1
+</p></dd>
+<dt> ‘<samp>DarkViolet</samp>’</dt>
+<dd><p>0x9400D3
+</p></dd>
+<dt> ‘<samp>DeepPink</samp>’</dt>
+<dd><p>0xFF1493
+</p></dd>
+<dt> ‘<samp>DeepSkyBlue</samp>’</dt>
+<dd><p>0x00BFFF
+</p></dd>
+<dt> ‘<samp>DimGray</samp>’</dt>
+<dd><p>0x696969
+</p></dd>
+<dt> ‘<samp>DodgerBlue</samp>’</dt>
+<dd><p>0x1E90FF
+</p></dd>
+<dt> ‘<samp>FireBrick</samp>’</dt>
+<dd><p>0xB22222
+</p></dd>
+<dt> ‘<samp>FloralWhite</samp>’</dt>
+<dd><p>0xFFFAF0
+</p></dd>
+<dt> ‘<samp>ForestGreen</samp>’</dt>
+<dd><p>0x228B22
+</p></dd>
+<dt> ‘<samp>Fuchsia</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Gainsboro</samp>’</dt>
+<dd><p>0xDCDCDC
+</p></dd>
+<dt> ‘<samp>GhostWhite</samp>’</dt>
+<dd><p>0xF8F8FF
+</p></dd>
+<dt> ‘<samp>Gold</samp>’</dt>
+<dd><p>0xFFD700
+</p></dd>
+<dt> ‘<samp>GoldenRod</samp>’</dt>
+<dd><p>0xDAA520
+</p></dd>
+<dt> ‘<samp>Gray</samp>’</dt>
+<dd><p>0x808080
+</p></dd>
+<dt> ‘<samp>Green</samp>’</dt>
+<dd><p>0x008000
+</p></dd>
+<dt> ‘<samp>GreenYellow</samp>’</dt>
+<dd><p>0xADFF2F
+</p></dd>
+<dt> ‘<samp>HoneyDew</samp>’</dt>
+<dd><p>0xF0FFF0
+</p></dd>
+<dt> ‘<samp>HotPink</samp>’</dt>
+<dd><p>0xFF69B4
+</p></dd>
+<dt> ‘<samp>IndianRed</samp>’</dt>
+<dd><p>0xCD5C5C
+</p></dd>
+<dt> ‘<samp>Indigo</samp>’</dt>
+<dd><p>0x4B0082
+</p></dd>
+<dt> ‘<samp>Ivory</samp>’</dt>
+<dd><p>0xFFFFF0
+</p></dd>
+<dt> ‘<samp>Khaki</samp>’</dt>
+<dd><p>0xF0E68C
+</p></dd>
+<dt> ‘<samp>Lavender</samp>’</dt>
+<dd><p>0xE6E6FA
+</p></dd>
+<dt> ‘<samp>LavenderBlush</samp>’</dt>
+<dd><p>0xFFF0F5
+</p></dd>
+<dt> ‘<samp>LawnGreen</samp>’</dt>
+<dd><p>0x7CFC00
+</p></dd>
+<dt> ‘<samp>LemonChiffon</samp>’</dt>
+<dd><p>0xFFFACD
+</p></dd>
+<dt> ‘<samp>LightBlue</samp>’</dt>
+<dd><p>0xADD8E6
+</p></dd>
+<dt> ‘<samp>LightCoral</samp>’</dt>
+<dd><p>0xF08080
+</p></dd>
+<dt> ‘<samp>LightCyan</samp>’</dt>
+<dd><p>0xE0FFFF
+</p></dd>
+<dt> ‘<samp>LightGoldenRodYellow</samp>’</dt>
+<dd><p>0xFAFAD2
+</p></dd>
+<dt> ‘<samp>LightGreen</samp>’</dt>
+<dd><p>0x90EE90
+</p></dd>
+<dt> ‘<samp>LightGrey</samp>’</dt>
+<dd><p>0xD3D3D3
+</p></dd>
+<dt> ‘<samp>LightPink</samp>’</dt>
+<dd><p>0xFFB6C1
+</p></dd>
+<dt> ‘<samp>LightSalmon</samp>’</dt>
+<dd><p>0xFFA07A
+</p></dd>
+<dt> ‘<samp>LightSeaGreen</samp>’</dt>
+<dd><p>0x20B2AA
+</p></dd>
+<dt> ‘<samp>LightSkyBlue</samp>’</dt>
+<dd><p>0x87CEFA
+</p></dd>
+<dt> ‘<samp>LightSlateGray</samp>’</dt>
+<dd><p>0x778899
+</p></dd>
+<dt> ‘<samp>LightSteelBlue</samp>’</dt>
+<dd><p>0xB0C4DE
+</p></dd>
+<dt> ‘<samp>LightYellow</samp>’</dt>
+<dd><p>0xFFFFE0
+</p></dd>
+<dt> ‘<samp>Lime</samp>’</dt>
+<dd><p>0x00FF00
+</p></dd>
+<dt> ‘<samp>LimeGreen</samp>’</dt>
+<dd><p>0x32CD32
+</p></dd>
+<dt> ‘<samp>Linen</samp>’</dt>
+<dd><p>0xFAF0E6
+</p></dd>
+<dt> ‘<samp>Magenta</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Maroon</samp>’</dt>
+<dd><p>0x800000
+</p></dd>
+<dt> ‘<samp>MediumAquaMarine</samp>’</dt>
+<dd><p>0x66CDAA
+</p></dd>
+<dt> ‘<samp>MediumBlue</samp>’</dt>
+<dd><p>0x0000CD
+</p></dd>
+<dt> ‘<samp>MediumOrchid</samp>’</dt>
+<dd><p>0xBA55D3
+</p></dd>
+<dt> ‘<samp>MediumPurple</samp>’</dt>
+<dd><p>0x9370D8
+</p></dd>
+<dt> ‘<samp>MediumSeaGreen</samp>’</dt>
+<dd><p>0x3CB371
+</p></dd>
+<dt> ‘<samp>MediumSlateBlue</samp>’</dt>
+<dd><p>0x7B68EE
+</p></dd>
+<dt> ‘<samp>MediumSpringGreen</samp>’</dt>
+<dd><p>0x00FA9A
+</p></dd>
+<dt> ‘<samp>MediumTurquoise</samp>’</dt>
+<dd><p>0x48D1CC
+</p></dd>
+<dt> ‘<samp>MediumVioletRed</samp>’</dt>
+<dd><p>0xC71585
+</p></dd>
+<dt> ‘<samp>MidnightBlue</samp>’</dt>
+<dd><p>0x191970
+</p></dd>
+<dt> ‘<samp>MintCream</samp>’</dt>
+<dd><p>0xF5FFFA
+</p></dd>
+<dt> ‘<samp>MistyRose</samp>’</dt>
+<dd><p>0xFFE4E1
+</p></dd>
+<dt> ‘<samp>Moccasin</samp>’</dt>
+<dd><p>0xFFE4B5
+</p></dd>
+<dt> ‘<samp>NavajoWhite</samp>’</dt>
+<dd><p>0xFFDEAD
+</p></dd>
+<dt> ‘<samp>Navy</samp>’</dt>
+<dd><p>0x000080
+</p></dd>
+<dt> ‘<samp>OldLace</samp>’</dt>
+<dd><p>0xFDF5E6
+</p></dd>
+<dt> ‘<samp>Olive</samp>’</dt>
+<dd><p>0x808000
+</p></dd>
+<dt> ‘<samp>OliveDrab</samp>’</dt>
+<dd><p>0x6B8E23
+</p></dd>
+<dt> ‘<samp>Orange</samp>’</dt>
+<dd><p>0xFFA500
+</p></dd>
+<dt> ‘<samp>OrangeRed</samp>’</dt>
+<dd><p>0xFF4500
+</p></dd>
+<dt> ‘<samp>Orchid</samp>’</dt>
+<dd><p>0xDA70D6
+</p></dd>
+<dt> ‘<samp>PaleGoldenRod</samp>’</dt>
+<dd><p>0xEEE8AA
+</p></dd>
+<dt> ‘<samp>PaleGreen</samp>’</dt>
+<dd><p>0x98FB98
+</p></dd>
+<dt> ‘<samp>PaleTurquoise</samp>’</dt>
+<dd><p>0xAFEEEE
+</p></dd>
+<dt> ‘<samp>PaleVioletRed</samp>’</dt>
+<dd><p>0xD87093
+</p></dd>
+<dt> ‘<samp>PapayaWhip</samp>’</dt>
+<dd><p>0xFFEFD5
+</p></dd>
+<dt> ‘<samp>PeachPuff</samp>’</dt>
+<dd><p>0xFFDAB9
+</p></dd>
+<dt> ‘<samp>Peru</samp>’</dt>
+<dd><p>0xCD853F
+</p></dd>
+<dt> ‘<samp>Pink</samp>’</dt>
+<dd><p>0xFFC0CB
+</p></dd>
+<dt> ‘<samp>Plum</samp>’</dt>
+<dd><p>0xDDA0DD
+</p></dd>
+<dt> ‘<samp>PowderBlue</samp>’</dt>
+<dd><p>0xB0E0E6
+</p></dd>
+<dt> ‘<samp>Purple</samp>’</dt>
+<dd><p>0x800080
+</p></dd>
+<dt> ‘<samp>Red</samp>’</dt>
+<dd><p>0xFF0000
+</p></dd>
+<dt> ‘<samp>RosyBrown</samp>’</dt>
+<dd><p>0xBC8F8F
+</p></dd>
+<dt> ‘<samp>RoyalBlue</samp>’</dt>
+<dd><p>0x4169E1
+</p></dd>
+<dt> ‘<samp>SaddleBrown</samp>’</dt>
+<dd><p>0x8B4513
+</p></dd>
+<dt> ‘<samp>Salmon</samp>’</dt>
+<dd><p>0xFA8072
+</p></dd>
+<dt> ‘<samp>SandyBrown</samp>’</dt>
+<dd><p>0xF4A460
+</p></dd>
+<dt> ‘<samp>SeaGreen</samp>’</dt>
+<dd><p>0x2E8B57
+</p></dd>
+<dt> ‘<samp>SeaShell</samp>’</dt>
+<dd><p>0xFFF5EE
+</p></dd>
+<dt> ‘<samp>Sienna</samp>’</dt>
+<dd><p>0xA0522D
+</p></dd>
+<dt> ‘<samp>Silver</samp>’</dt>
+<dd><p>0xC0C0C0
+</p></dd>
+<dt> ‘<samp>SkyBlue</samp>’</dt>
+<dd><p>0x87CEEB
+</p></dd>
+<dt> ‘<samp>SlateBlue</samp>’</dt>
+<dd><p>0x6A5ACD
+</p></dd>
+<dt> ‘<samp>SlateGray</samp>’</dt>
+<dd><p>0x708090
+</p></dd>
+<dt> ‘<samp>Snow</samp>’</dt>
+<dd><p>0xFFFAFA
+</p></dd>
+<dt> ‘<samp>SpringGreen</samp>’</dt>
+<dd><p>0x00FF7F
+</p></dd>
+<dt> ‘<samp>SteelBlue</samp>’</dt>
+<dd><p>0x4682B4
+</p></dd>
+<dt> ‘<samp>Tan</samp>’</dt>
+<dd><p>0xD2B48C
+</p></dd>
+<dt> ‘<samp>Teal</samp>’</dt>
+<dd><p>0x008080
+</p></dd>
+<dt> ‘<samp>Thistle</samp>’</dt>
+<dd><p>0xD8BFD8
+</p></dd>
+<dt> ‘<samp>Tomato</samp>’</dt>
+<dd><p>0xFF6347
+</p></dd>
+<dt> ‘<samp>Turquoise</samp>’</dt>
+<dd><p>0x40E0D0
+</p></dd>
+<dt> ‘<samp>Violet</samp>’</dt>
+<dd><p>0xEE82EE
+</p></dd>
+<dt> ‘<samp>Wheat</samp>’</dt>
+<dd><p>0xF5DEB3
+</p></dd>
+<dt> ‘<samp>White</samp>’</dt>
+<dd><p>0xFFFFFF
+</p></dd>
+<dt> ‘<samp>WhiteSmoke</samp>’</dt>
+<dd><p>0xF5F5F5
+</p></dd>
+<dt> ‘<samp>Yellow</samp>’</dt>
+<dd><p>0xFFFF00
+</p></dd>
+<dt> ‘<samp>YellowGreen</samp>’</dt>
+<dd><p>0x9ACD32
+</p></dd>
+</dl>
+
+<p><a name="channel-layout-syntax"></a>
+</p><a name="Channel-Layout"></a>
+<h2 class="section"><a href="ffmpeg-utils.html#toc-Channel-Layout">2.8 Channel Layout</a></h2>
+
+<p>A channel layout specifies the spatial disposition of the channels in
+a multi-channel audio stream. To specify a channel layout, FFmpeg
+makes use of a special syntax.
+</p>
+<p>Individual channels are identified by an id, as given by the table
+below:
+</p><dl compact="compact">
+<dt> ‘<samp>FL</samp>’</dt>
+<dd><p>front left
+</p></dd>
+<dt> ‘<samp>FR</samp>’</dt>
+<dd><p>front right
+</p></dd>
+<dt> ‘<samp>FC</samp>’</dt>
+<dd><p>front center
+</p></dd>
+<dt> ‘<samp>LFE</samp>’</dt>
+<dd><p>low frequency
+</p></dd>
+<dt> ‘<samp>BL</samp>’</dt>
+<dd><p>back left
+</p></dd>
+<dt> ‘<samp>BR</samp>’</dt>
+<dd><p>back right
+</p></dd>
+<dt> ‘<samp>FLC</samp>’</dt>
+<dd><p>front left-of-center
+</p></dd>
+<dt> ‘<samp>FRC</samp>’</dt>
+<dd><p>front right-of-center
+</p></dd>
+<dt> ‘<samp>BC</samp>’</dt>
+<dd><p>back center
+</p></dd>
+<dt> ‘<samp>SL</samp>’</dt>
+<dd><p>side left
+</p></dd>
+<dt> ‘<samp>SR</samp>’</dt>
+<dd><p>side right
+</p></dd>
+<dt> ‘<samp>TC</samp>’</dt>
+<dd><p>top center
+</p></dd>
+<dt> ‘<samp>TFL</samp>’</dt>
+<dd><p>top front left
+</p></dd>
+<dt> ‘<samp>TFC</samp>’</dt>
+<dd><p>top front center
+</p></dd>
+<dt> ‘<samp>TFR</samp>’</dt>
+<dd><p>top front right
+</p></dd>
+<dt> ‘<samp>TBL</samp>’</dt>
+<dd><p>top back left
+</p></dd>
+<dt> ‘<samp>TBC</samp>’</dt>
+<dd><p>top back center
+</p></dd>
+<dt> ‘<samp>TBR</samp>’</dt>
+<dd><p>top back right
+</p></dd>
+<dt> ‘<samp>DL</samp>’</dt>
+<dd><p>downmix left
+</p></dd>
+<dt> ‘<samp>DR</samp>’</dt>
+<dd><p>downmix right
+</p></dd>
+<dt> ‘<samp>WL</samp>’</dt>
+<dd><p>wide left
+</p></dd>
+<dt> ‘<samp>WR</samp>’</dt>
+<dd><p>wide right
+</p></dd>
+<dt> ‘<samp>SDL</samp>’</dt>
+<dd><p>surround direct left
+</p></dd>
+<dt> ‘<samp>SDR</samp>’</dt>
+<dd><p>surround direct right
+</p></dd>
+<dt> ‘<samp>LFE2</samp>’</dt>
+<dd><p>low frequency 2
+</p></dd>
+</dl>
+
+<p>Standard channel layout compositions can be specified by using the
+following identifiers:
+</p><dl compact="compact">
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>FC
+</p></dd>
+<dt> ‘<samp>stereo</samp>’</dt>
+<dd><p>FL+FR
+</p></dd>
+<dt> ‘<samp>2.1</samp>’</dt>
+<dd><p>FL+FR+LFE
+</p></dd>
+<dt> ‘<samp>3.0</samp>’</dt>
+<dd><p>FL+FR+FC
+</p></dd>
+<dt> ‘<samp>3.0(back)</samp>’</dt>
+<dd><p>FL+FR+BC
+</p></dd>
+<dt> ‘<samp>4.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC
+</p></dd>
+<dt> ‘<samp>quad</samp>’</dt>
+<dd><p>FL+FR+BL+BR
+</p></dd>
+<dt> ‘<samp>quad(side)</samp>’</dt>
+<dd><p>FL+FR+SL+SR
+</p></dd>
+<dt> ‘<samp>3.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE
+</p></dd>
+<dt> ‘<samp>5.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR
+</p></dd>
+<dt> ‘<samp>5.0(side)</samp>’</dt>
+<dd><p>FL+FR+FC+SL+SR
+</p></dd>
+<dt> ‘<samp>4.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC
+</p></dd>
+<dt> ‘<samp>5.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR
+</p></dd>
+<dt> ‘<samp>5.1(side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0(front)</samp>’</dt>
+<dd><p>FL+FR+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>hexagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1(front)</samp>’</dt>
+<dd><p>FL+FR+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0(front)</samp>’</dt>
+<dd><p>FL+FR+FC+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1(wide)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC
+</p></dd>
+<dt> ‘<samp>7.1(wide-side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>octagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>downmix</samp>’</dt>
+<dd><p>DL+DR
+</p></dd>
+</dl>
+
+<p>A custom channel layout can be specified as a sequence of terms, separated by
+’+’ or ’|’. Each term can be:
+</p><ul>
+<li>
+the name of a standard channel layout (e.g. ‘<samp>mono</samp>’,
+‘<samp>stereo</samp>’, ‘<samp>4.0</samp>’, ‘<samp>quad</samp>’, ‘<samp>5.0</samp>’, etc.)
+
+</li><li>
+the name of a single channel (e.g. ‘<samp>FL</samp>’, ‘<samp>FR</samp>’, ‘<samp>FC</samp>’, ‘<samp>LFE</samp>’, etc.)
+
+</li><li>
+a number of channels, in decimal, optionally followed by ’c’, yielding
+the default channel layout for that number of channels (see the
+function <code>av_get_default_channel_layout</code>)
+
+</li><li>
+a channel layout mask, in hexadecimal starting with "0x" (see the
+<code>AV_CH_*</code> macros in ‘<tt>libavutil/channel_layout.h</tt>’.
+</li></ul>
+
+<p>Starting from libavutil version 53 the trailing character "c" to
+specify a number of channels will be required, while a channel layout
+mask could also be specified as a decimal number (if and only if not
+followed by "c").
+</p>
+<p>See also the function <code>av_get_channel_layout</code> defined in
+‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<a name="Expression-Evaluation"></a>
+<h1 class="chapter"><a href="ffmpeg-utils.html#toc-Expression-Evaluation">3. Expression Evaluation</a></h1>
+
+<p>When evaluating an arithmetic expression, FFmpeg uses an internal
+formula evaluator, implemented through the ‘<tt>libavutil/eval.h</tt>’
+interface.
+</p>
+<p>An expression may contain unary, binary operators, constants, and
+functions.
+</p>
+<p>Two expressions <var>expr1</var> and <var>expr2</var> can be combined to form
+another expression "<var>expr1</var>;<var>expr2</var>".
+<var>expr1</var> and <var>expr2</var> are evaluated in turn, and the new
+expression evaluates to the value of <var>expr2</var>.
+</p>
+<p>The following binary operators are available: <code>+</code>, <code>-</code>,
+<code>*</code>, <code>/</code>, <code>^</code>.
+</p>
+<p>The following unary operators are available: <code>+</code>, <code>-</code>.
+</p>
+<p>The following functions are available:
+</p><dl compact="compact">
+<dt> ‘<samp>abs(x)</samp>’</dt>
+<dd><p>Compute absolute value of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>acos(x)</samp>’</dt>
+<dd><p>Compute arccosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>asin(x)</samp>’</dt>
+<dd><p>Compute arcsine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>atan(x)</samp>’</dt>
+<dd><p>Compute arctangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>between(x, min, max)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>min</var> and lesser than or
+equal to <var>max</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>bitand(x, y)</samp>’</dt>
+<dt> ‘<samp>bitor(x, y)</samp>’</dt>
+<dd><p>Compute bitwise and/or operation on <var>x</var> and <var>y</var>.
+</p>
+<p>The results of the evaluation of <var>x</var> and <var>y</var> are converted to
+integers before executing the bitwise operation.
+</p>
+<p>Note that both the conversion to integer and the conversion back to
+floating point can lose precision. Beware of unexpected results for
+large numbers (usually 2^53 and larger).
+</p>
+</dd>
+<dt> ‘<samp>ceil(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> upwards to the nearest
+integer. For example, "ceil(1.5)" is "2.0".
+</p>
+</dd>
+<dt> ‘<samp>cos(x)</samp>’</dt>
+<dd><p>Compute cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>cosh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>eq(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> and <var>y</var> are equivalent, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>exp(x)</samp>’</dt>
+<dd><p>Compute exponential of <var>x</var> (with base <code>e</code>, the Euler’s number).
+</p>
+</dd>
+<dt> ‘<samp>floor(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> downwards to the nearest
+integer. For example, "floor(-1.5)" is "-2.0".
+</p>
+</dd>
+<dt> ‘<samp>gauss(x)</samp>’</dt>
+<dd><p>Compute Gauss function of <var>x</var>, corresponding to
+<code>exp(-x*x/2) / sqrt(2*PI)</code>.
+</p>
+</dd>
+<dt> ‘<samp>gcd(x, y)</samp>’</dt>
+<dd><p>Return the greatest common divisor of <var>x</var> and <var>y</var>. If both <var>x</var> and
+<var>y</var> are 0 or either or both are less than zero then behavior is undefined.
+</p>
+</dd>
+<dt> ‘<samp>gt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>gte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>hypot(x, y)</samp>’</dt>
+<dd><p>This function is similar to the C function with the same name; it returns
+"sqrt(<var>x</var>*<var>x</var> + <var>y</var>*<var>y</var>)", the length of the hypotenuse of a
+right triangle with sides of length <var>x</var> and <var>y</var>, or the distance of the
+point (<var>x</var>, <var>y</var>) from the origin.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the result of
+the evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the result of the
+evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>isinf(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is +/-INFINITY, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>isnan(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is NAN, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ld(var)</samp>’</dt>
+<dd><p>Allow to load the value of the internal variable with number
+<var>var</var>, which was previously stored with st(<var>var</var>, <var>expr</var>).
+The function returns the loaded value.
+</p>
+</dd>
+<dt> ‘<samp>log(x)</samp>’</dt>
+<dd><p>Compute natural logarithm of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>lt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>lte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>max(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>min(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>mod(x, y)</samp>’</dt>
+<dd><p>Compute the remainder of division of <var>x</var> by <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>not(expr)</samp>’</dt>
+<dd><p>Return 1.0 if <var>expr</var> is zero, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>pow(x, y)</samp>’</dt>
+<dd><p>Compute the power of <var>x</var> elevated <var>y</var>, it is equivalent to
+"(<var>x</var>)^(<var>y</var>)".
+</p>
+</dd>
+<dt> ‘<samp>print(t)</samp>’</dt>
+<dt> ‘<samp>print(t, l)</samp>’</dt>
+<dd><p>Print the value of expression <var>t</var> with loglevel <var>l</var>. If
+<var>l</var> is not specified then a default log level is used.
+Returns the value of the expression printed.
+</p>
+<p>Prints t with loglevel l
+</p>
+</dd>
+<dt> ‘<samp>random(x)</samp>’</dt>
+<dd><p>Return a pseudo random value between 0.0 and 1.0. <var>x</var> is the index of the
+internal variable which will be used to save the seed/state.
+</p>
+</dd>
+<dt> ‘<samp>root(expr, max)</samp>’</dt>
+<dd><p>Find an input value for which the function represented by <var>expr</var>
+with argument <var>ld(0)</var> is 0 in the interval 0..<var>max</var>.
+</p>
+<p>The expression in <var>expr</var> must denote a continuous function or the
+result is undefined.
+</p>
+<p><var>ld(0)</var> is used to represent the function input value, which means
+that the given expression will be evaluated multiple times with
+various input values that the expression can access through
+<code>ld(0)</code>. When the expression evaluates to 0 then the
+corresponding input value will be returned.
+</p>
+</dd>
+<dt> ‘<samp>sin(x)</samp>’</dt>
+<dd><p>Compute sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sinh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sqrt(expr)</samp>’</dt>
+<dd><p>Compute the square root of <var>expr</var>. This is equivalent to
+"(<var>expr</var>)^.5".
+</p>
+</dd>
+<dt> ‘<samp>squish(x)</samp>’</dt>
+<dd><p>Compute expression <code>1/(1 + exp(4*x))</code>.
+</p>
+</dd>
+<dt> ‘<samp>st(var, expr)</samp>’</dt>
+<dd><p>Allow to store the value of the expression <var>expr</var> in an internal
+variable. <var>var</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.
+</p>
+</dd>
+<dt> ‘<samp>tan(x)</samp>’</dt>
+<dd><p>Compute tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>tanh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>taylor(expr, x)</samp>’</dt>
+<dt> ‘<samp>taylor(expr, x, id)</samp>’</dt>
+<dd><p>Evaluate a Taylor series at <var>x</var>, given an expression representing
+the <code>ld(id)</code>-th derivative of a function at 0.
+</p>
+<p>When the series does not converge the result is undefined.
+</p>
+<p><var>ld(id)</var> is used to represent the derivative order in <var>expr</var>,
+which means that the given expression will be evaluated multiple times
+with various input values that the expression can access through
+<code>ld(id)</code>. If <var>id</var> is not specified then 0 is assumed.
+</p>
+<p>Note, when you have the derivatives at y instead of 0,
+<code>taylor(expr, x-y)</code> can be used.
+</p>
+</dd>
+<dt> ‘<samp>time(0)</samp>’</dt>
+<dd><p>Return the current (wallclock) time in seconds.
+</p>
+</dd>
+<dt> ‘<samp>trunc(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> towards zero to the nearest
+integer. For example, "trunc(-1.5)" is "-1.0".
+</p>
+</dd>
+<dt> ‘<samp>while(cond, expr)</samp>’</dt>
+<dd><p>Evaluate expression <var>expr</var> while the expression <var>cond</var> is
+non-zero, and returns the value of the last <var>expr</var> evaluation, or
+NAN if <var>cond</var> was always false.
+</p></dd>
+</dl>
+
+<p>The following constants are available:
+</p><dl compact="compact">
+<dt> ‘<samp>PI</samp>’</dt>
+<dd><p>area of the unit disc, approximately 3.14
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>exp(1) (Euler’s number), approximately 2.718
+</p></dd>
+<dt> ‘<samp>PHI</samp>’</dt>
+<dd><p>golden ratio (1+sqrt(5))/2, approximately 1.618
+</p></dd>
+</dl>
+
+<p>Assuming that an expression is considered "true" if it has a non-zero
+value, note that:
+</p>
+<p><code>*</code> works like AND
+</p>
+<p><code>+</code> works like OR
+</p>
+<p>For example the construct:
+</p><table><tr><td> </td><td><pre class="example">if (A AND B) then C
+</pre></td></tr></table>
+<p>is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">if(A*B, C)
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<p>The evaluator also recognizes the International System unit prefixes.
+If ’i’ is appended after the prefix, binary prefixes are used, which
+are based on powers of 1024 instead of powers of 1000.
+The ’B’ postfix multiplies the value by 8, and can be appended after a
+unit prefix or used alone. This allows using for example ’KB’, ’MiB’,
+’G’ and ’B’ as number postfix.
+</p>
+<p>The list of available International System prefixes follows, with
+indication of the corresponding powers of 10 and of 2.
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>10^-24 / 2^-80
+</p></dd>
+<dt> ‘<samp>z</samp>’</dt>
+<dd><p>10^-21 / 2^-70
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>10^-18 / 2^-60
+</p></dd>
+<dt> ‘<samp>f</samp>’</dt>
+<dd><p>10^-15 / 2^-50
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>10^-12 / 2^-40
+</p></dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>10^-9 / 2^-30
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>10^-6 / 2^-20
+</p></dd>
+<dt> ‘<samp>m</samp>’</dt>
+<dd><p>10^-3 / 2^-10
+</p></dd>
+<dt> ‘<samp>c</samp>’</dt>
+<dd><p>10^-2
+</p></dd>
+<dt> ‘<samp>d</samp>’</dt>
+<dd><p>10^-1
+</p></dd>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>10^2
+</p></dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>K</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>M</samp>’</dt>
+<dd><p>10^6 / 2^20
+</p></dd>
+<dt> ‘<samp>G</samp>’</dt>
+<dd><p>10^9 / 2^30
+</p></dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>10^12 / 2^40
+</p></dd>
+<dt> ‘<samp>P</samp>’</dt>
+<dd><p>10^15 / 2^40
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>10^18 / 2^50
+</p></dd>
+<dt> ‘<samp>Z</samp>’</dt>
+<dd><p>10^21 / 2^60
+</p></dd>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>10^24 / 2^70
+</p></dd>
+</dl>
+
+
+<a name="OpenCL-Options"></a>
+<h1 class="chapter"><a href="ffmpeg-utils.html#toc-OpenCL-Options">4. OpenCL Options</a></h1>
+
+<p>When FFmpeg is configured with <code>--enable-opencl</code>, it is possible
+to set the options for the global OpenCL context.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>build_options</samp>’</dt>
+<dd><p>Set build options used to compile the registered kernels.
+</p>
+<p>See reference "OpenCL Specification Version: 1.2 chapter 5.6.4".
+</p>
+</dd>
+<dt> ‘<samp>platform_idx</samp>’</dt>
+<dd><p>Select the index of the platform to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list
+which can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+<dt> ‘<samp>device_idx</samp>’</dt>
+<dd><p>Select the index of the device used to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list which
+can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+</dl>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg-utils.html#toc-See-Also">5. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="libavutil.html">libavutil</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg-utils.html#toc-Authors">6. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : ffmpeg </title>
+
+<meta name="description" content="ffmpeg Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : ffmpeg ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">ffmpeg Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Synopsis" href="#Synopsis">1. Synopsis</a></li>
+ <li><a name="toc-Description" href="#Description">2. Description</a></li>
+ <li><a name="toc-Detailed-description" href="#Detailed-description">3. Detailed description</a>
+ <ul class="toc">
+ <li><a name="toc-Filtering" href="#Filtering">3.1 Filtering</a>
+ <ul class="toc">
+ <li><a name="toc-Simple-filtergraphs" href="#Simple-filtergraphs">3.1.1 Simple filtergraphs</a></li>
+ <li><a name="toc-Complex-filtergraphs" href="#Complex-filtergraphs">3.1.2 Complex filtergraphs</a></li>
+ </ul></li>
+ <li><a name="toc-Stream-copy" href="#Stream-copy">3.2 Stream copy</a></li>
+ </ul></li>
+ <li><a name="toc-Stream-selection" href="#Stream-selection">4. Stream selection</a></li>
+ <li><a name="toc-Options" href="#Options">5. Options</a>
+ <ul class="toc">
+ <li><a name="toc-Stream-specifiers-1" href="#Stream-specifiers-1">5.1 Stream specifiers</a></li>
+ <li><a name="toc-Generic-options" href="#Generic-options">5.2 Generic options</a></li>
+ <li><a name="toc-AVOptions" href="#AVOptions">5.3 AVOptions</a></li>
+ <li><a name="toc-Main-options" href="#Main-options">5.4 Main options</a></li>
+ <li><a name="toc-Video-Options" href="#Video-Options">5.5 Video Options</a></li>
+ <li><a name="toc-Advanced-Video-Options" href="#Advanced-Video-Options">5.6 Advanced Video Options</a></li>
+ <li><a name="toc-Audio-Options" href="#Audio-Options">5.7 Audio Options</a></li>
+ <li><a name="toc-Advanced-Audio-options_003a" href="#Advanced-Audio-options_003a">5.8 Advanced Audio options:</a></li>
+ <li><a name="toc-Subtitle-options_003a" href="#Subtitle-options_003a">5.9 Subtitle options:</a></li>
+ <li><a name="toc-Advanced-Subtitle-options_003a" href="#Advanced-Subtitle-options_003a">5.10 Advanced Subtitle options:</a></li>
+ <li><a name="toc-Advanced-options" href="#Advanced-options">5.11 Advanced options</a></li>
+ <li><a name="toc-Preset-files" href="#Preset-files">5.12 Preset files</a></li>
+ </ul></li>
+ <li><a name="toc-Tips" href="#Tips">6. Tips</a></li>
+ <li><a name="toc-Examples" href="#Examples">7. Examples</a>
+ <ul class="toc">
+ <li><a name="toc-Preset-files-1" href="#Preset-files-1">7.1 Preset files</a></li>
+ <li><a name="toc-Video-and-Audio-grabbing" href="#Video-and-Audio-grabbing">7.2 Video and Audio grabbing</a></li>
+ <li><a name="toc-X11-grabbing" href="#X11-grabbing">7.3 X11 grabbing</a></li>
+ <li><a name="toc-Video-and-Audio-file-format-conversion" href="#Video-and-Audio-file-format-conversion">7.4 Video and Audio file format conversion</a></li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">8. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">9. Authors</a></li>
+</ul>
+</div>
+
+<a name="Synopsis"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Synopsis">1. Synopsis</a></h1>
+
+<p>ffmpeg [<var>global_options</var>] {[<var>input_file_options</var>] -i ‘<tt>input_file</tt>’} ... {[<var>output_file_options</var>] ‘<tt>output_file</tt>’} ...
+</p>
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Description">2. Description</a></h1>
+
+<p><code>ffmpeg</code> 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.
+</p>
+<p><code>ffmpeg</code> reads from an arbitrary number of input "files" (which can be regular
+files, pipes, network streams, grabbing devices, etc.), specified by the
+<code>-i</code> 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.
+</p>
+<p>Each input or output file can, in principle, contain any number of streams of
+different types (video/audio/subtitle/attachment/data). The allowed number and/or
+types of streams may be limited by the container format. Selecting which
+streams from which inputs will go into which output is either done automatically
+or with the <code>-map</code> option (see the Stream selection chapter).
+</p>
+<p>To refer to input files in options, you must use their indices (0-based). E.g.
+the first input file is <code>0</code>, the second is <code>1</code>, etc. Similarly, streams
+within a file are referred to by their indices. E.g. <code>2:3</code> refers to the
+fourth stream in the third input file. Also see the Stream specifiers chapter.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<ul>
+<li>
+To set the video bitrate of the output file to 64 kbit/s:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
+</pre></td></tr></table>
+
+</li><li>
+To force the frame rate of the output file to 24 fps:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.avi -r 24 output.avi
+</pre></td></tr></table>
+
+</li><li>
+To force the frame rate of the input file (valid for raw formats only)
+to 1 fps and the frame rate of the output file to 24 fps:
+<table><tr><td> </td><td><pre class="example">ffmpeg -r 1 -i input.m2v -r 24 output.avi
+</pre></td></tr></table>
+</li></ul>
+
+<p>The format option may be needed for raw input files.
+</p>
+
+<a name="Detailed-description"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Detailed-description">3. Detailed description</a></h1>
+
+<p>The transcoding process in <code>ffmpeg</code> for each output can be described by
+the following diagram:
+</p>
+<table><tr><td> </td><td><pre class="example"> _______ ______________
+| | | |
+| input | demuxer | encoded data | decoder
+| file | ---------> | packets | -----+
+|_______| |______________| |
+ v
+ _________
+ | |
+ | decoded |
+ | frames |
+ ________ ______________ |_________|
+| | | | |
+| output | <-------- | encoded data | <----+
+| file | muxer | packets | encoder
+|________| |______________|
+
+
+</pre></td></tr></table>
+
+<p><code>ffmpeg</code> calls the libavformat library (containing demuxers) to read
+input files and get packets containing encoded data from them. When there are
+multiple input files, <code>ffmpeg</code> tries to keep them synchronized by
+tracking lowest timestamp on any active input stream.
+</p>
+<p>Encoded packets are then passed to the decoder (unless streamcopy is selected
+for the stream, see further for a description). The decoder produces
+uncompressed frames (raw video/PCM audio/...) which can be processed further by
+filtering (see next section). After filtering, the frames are passed to the
+encoder, which encodes them and outputs encoded packets. Finally those are
+passed to the muxer, which writes the encoded packets to the output file.
+</p>
+<a name="Filtering"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Filtering">3.1 Filtering</a></h2>
+<p>Before encoding, <code>ffmpeg</code> can process raw audio and video frames using
+filters from the libavfilter library. Several chained filters form a filter
+graph. <code>ffmpeg</code> distinguishes between two types of filtergraphs:
+simple and complex.
+</p>
+<a name="Simple-filtergraphs"></a>
+<h3 class="subsection"><a href="ffmpeg.html#toc-Simple-filtergraphs">3.1.1 Simple filtergraphs</a></h3>
+<p>Simple filtergraphs are those that have exactly one input and output, both of
+the same type. In the above diagram they can be represented by simply inserting
+an additional step between decoding and encoding:
+</p>
+<table><tr><td> </td><td><pre class="example"> _________ __________ ______________
+| | simple | | | |
+| decoded | fltrgrph | filtered | encoder | encoded data |
+| frames | ----------> | frames | ---------> | packets |
+|_________| |__________| |______________|
+
+</pre></td></tr></table>
+
+<p>Simple filtergraphs are configured with the per-stream ‘<samp>-filter</samp>’ option
+(with ‘<samp>-vf</samp>’ and ‘<samp>-af</samp>’ aliases for video and audio respectively).
+A simple filtergraph for video can look for example like this:
+</p>
+<table><tr><td> </td><td><pre class="example"> _______ _____________ _______ ________
+| | | | | | | |
+| input | ---> | deinterlace | ---> | scale | ---> | output |
+|_______| |_____________| |_______| |________|
+
+</pre></td></tr></table>
+
+<p>Note that some filters change frame properties but not frame contents. E.g. the
+<code>fps</code> filter in the example above changes number of frames, but does not
+touch the frame contents. Another example is the <code>setpts</code> filter, which
+only sets timestamps and otherwise passes the frames unchanged.
+</p>
+<a name="Complex-filtergraphs"></a>
+<h3 class="subsection"><a href="ffmpeg.html#toc-Complex-filtergraphs">3.1.2 Complex filtergraphs</a></h3>
+<p>Complex filtergraphs are those which cannot be described as simply a linear
+processing chain applied to one stream. This is the case, for example, when the graph has
+more than one input and/or output, or when output stream type is different from
+input. They can be represented with the following diagram:
+</p>
+<table><tr><td> </td><td><pre class="example"> _________
+| |
+| input 0 |\ __________
+|_________| \ | |
+ \ _________ /| output 0 |
+ \ | | / |__________|
+ _________ \| complex | /
+| | | |/
+| input 1 |---->| filter |\
+|_________| | | \ __________
+ /| graph | \ | |
+ / | | \| output 1 |
+ _________ / |_________| |__________|
+| | /
+| input 2 |/
+|_________|
+
+</pre></td></tr></table>
+
+<p>Complex filtergraphs are configured with the ‘<samp>-filter_complex</samp>’ option.
+Note that this option is global, since a complex filtergraph, by its nature,
+cannot be unambiguously associated with a single stream or file.
+</p>
+<p>The ‘<samp>-lavfi</samp>’ option is equivalent to ‘<samp>-filter_complex</samp>’.
+</p>
+<p>A trivial example of a complex filtergraph is the <code>overlay</code> filter, which
+has two video inputs and one video output, containing one video overlaid on top
+of the other. Its audio counterpart is the <code>amix</code> filter.
+</p>
+<a name="Stream-copy"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Stream-copy">3.2 Stream copy</a></h2>
+<p>Stream copy is a mode selected by supplying the <code>copy</code> parameter to the
+‘<samp>-codec</samp>’ option. It makes <code>ffmpeg</code> omit the decoding and encoding
+step for the specified stream, so it does only demuxing and muxing. It is useful
+for changing the container format or modifying container-level metadata. The
+diagram above will, in this case, simplify to this:
+</p>
+<table><tr><td> </td><td><pre class="example"> _______ ______________ ________
+| | | | | |
+| input | demuxer | encoded data | muxer | output |
+| file | ---------> | packets | -------> | file |
+|_______| |______________| |________|
+
+</pre></td></tr></table>
+
+<p>Since there is no decoding or encoding, it is very fast and there is no quality
+loss. However, it might not work in some cases because of many factors. Applying
+filters is obviously also impossible, since filters work on uncompressed data.
+</p>
+
+<a name="Stream-selection"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Stream-selection">4. Stream selection</a></h1>
+
+<p>By default, <code>ffmpeg</code> 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, it is the stream with the most channels, for
+subtitles, it is the first subtitle stream. In the case where several streams of
+the same type rate equally, the stream with the lowest index is chosen.
+</p>
+<p>You can disable some of those defaults by using the <code>-vn/-an/-sn</code> options. For
+full manual control, use the <code>-map</code> option, which disables the defaults just
+described.
+</p>
+
+<a name="Options"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Options">5. Options</a></h1>
+
+<p>All the numerical options, if not specified otherwise, accept a string
+representing a number as input, which may be followed by one of the SI
+unit prefixes, for example: ’K’, ’M’, or ’G’.
+</p>
+<p>If ’i’ is appended to the SI unit prefix, the complete prefix will be
+interpreted as a unit prefix for binary multiplies, which are based on
+powers of 1024 instead of powers of 1000. Appending ’B’ to the SI unit
+prefix multiplies the value by 8. This allows using, for example:
+’KB’, ’MiB’, ’G’ and ’B’ as number suffixes.
+</p>
+<p>Options which do not take arguments are boolean options, and set the
+corresponding value to true. They can be set to false by prefixing
+the option name with "no". For example using "-nofoo"
+will set the boolean option with name "foo" to false.
+</p>
+<p><a name="Stream-specifiers"></a>
+</p><a name="Stream-specifiers-1"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Stream-specifiers-1">5.1 Stream specifiers</a></h2>
+<p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
+are used to precisely specify which stream(s) a given option belongs to.
+</p>
+<p>A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. <code>-codec:a:1 ac3</code> contains the
+<code>a:1</code> stream specifier, which matches the second audio stream. Therefore, it
+would select the ac3 codec for the second audio stream.
+</p>
+<p>A stream specifier can match several streams, so that the option is applied to all
+of them. E.g. the stream specifier in <code>-b:a 128k</code> matches all audio
+streams.
+</p>
+<p>An empty stream specifier matches all streams. For example, <code>-codec copy</code>
+or <code>-codec: copy</code> would copy all the streams without reencoding.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index. E.g. <code>-threads:1 4</code> would set the
+thread count for the second stream to 4.
+</p></dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle,
+’d’ for data, and ’t’ for attachments. If <var>stream_index</var> is given, then it matches
+stream number <var>stream_index</var> of this type. Otherwise, it matches all
+streams of this type.
+</p></dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number <var>stream_index</var>
+in the program with the id <var>program_id</var>. Otherwise, it matches all streams in the
+program.
+</p></dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<a name="Generic-options"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Generic-options">5.2 Generic options</a></h2>
+
+<p>These options are shared amongst the ff* tools.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-L</samp>’</dt>
+<dd><p>Show license.
+</p>
+</dd>
+<dt> ‘<samp>-h, -?, -help, --help [<var>arg</var>]</samp>’</dt>
+<dd><p>Show help. An optional parameter may be specified to print help about a specific
+item. If no argument is specified, only basic (non advanced) tool
+options are shown.
+</p>
+<p>Possible values of <var>arg</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>long</samp>’</dt>
+<dd><p>Print advanced tool options in addition to the basic tool options.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Print complete list of options, including shared and private options
+for encoders, decoders, demuxers, muxers, filters, etc.
+</p>
+</dd>
+<dt> ‘<samp>decoder=<var>decoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the decoder named <var>decoder_name</var>. Use the
+‘<samp>-decoders</samp>’ option to get a list of all decoders.
+</p>
+</dd>
+<dt> ‘<samp>encoder=<var>encoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the encoder named <var>encoder_name</var>. Use the
+‘<samp>-encoders</samp>’ option to get a list of all encoders.
+</p>
+</dd>
+<dt> ‘<samp>demuxer=<var>demuxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the demuxer named <var>demuxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all demuxers and muxers.
+</p>
+</dd>
+<dt> ‘<samp>muxer=<var>muxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the muxer named <var>muxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all muxers and demuxers.
+</p>
+</dd>
+<dt> ‘<samp>filter=<var>filter_name</var></samp>’</dt>
+<dd><p>Print detailed information about the filter name <var>filter_name</var>. Use the
+‘<samp>-filters</samp>’ option to get a list of all filters.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-version</samp>’</dt>
+<dd><p>Show version.
+</p>
+</dd>
+<dt> ‘<samp>-formats</samp>’</dt>
+<dd><p>Show available formats.
+</p>
+</dd>
+<dt> ‘<samp>-codecs</samp>’</dt>
+<dd><p>Show all codecs known to libavcodec.
+</p>
+<p>Note that the term ’codec’ is used throughout this documentation as a shortcut
+for what is more correctly called a media bitstream format.
+</p>
+</dd>
+<dt> ‘<samp>-decoders</samp>’</dt>
+<dd><p>Show available decoders.
+</p>
+</dd>
+<dt> ‘<samp>-encoders</samp>’</dt>
+<dd><p>Show all available encoders.
+</p>
+</dd>
+<dt> ‘<samp>-bsfs</samp>’</dt>
+<dd><p>Show available bitstream filters.
+</p>
+</dd>
+<dt> ‘<samp>-protocols</samp>’</dt>
+<dd><p>Show available protocols.
+</p>
+</dd>
+<dt> ‘<samp>-filters</samp>’</dt>
+<dd><p>Show available libavfilter filters.
+</p>
+</dd>
+<dt> ‘<samp>-pix_fmts</samp>’</dt>
+<dd><p>Show available pixel formats.
+</p>
+</dd>
+<dt> ‘<samp>-sample_fmts</samp>’</dt>
+<dd><p>Show available sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-layouts</samp>’</dt>
+<dd><p>Show channel names and standard channel layouts.
+</p>
+</dd>
+<dt> ‘<samp>-colors</samp>’</dt>
+<dd><p>Show recognized color names.
+</p>
+</dd>
+<dt> ‘<samp>-loglevel [repeat+]<var>loglevel</var> | -v [repeat+]<var>loglevel</var></samp>’</dt>
+<dd><p>Set the logging level used by the library.
+Adding "repeat+" indicates that repeated log output should not be compressed
+to the first line and the "Last message repeated n times" line will be
+omitted. "repeat" can also be used alone.
+If "repeat" is used alone, and with no prior loglevel set, the default
+loglevel will be used. If multiple loglevel parameters are given, using
+’repeat’ will not change the loglevel.
+<var>loglevel</var> is a number or a string containing one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>quiet</samp>’</dt>
+<dd><p>Show nothing at all; be silent.
+</p></dd>
+<dt> ‘<samp>panic</samp>’</dt>
+<dd><p>Only show fatal errors which could lead the process to crash, such as
+and assert failure. This is not currently used for anything.
+</p></dd>
+<dt> ‘<samp>fatal</samp>’</dt>
+<dd><p>Only show fatal errors. These are errors after which the process absolutely
+cannot continue after.
+</p></dd>
+<dt> ‘<samp>error</samp>’</dt>
+<dd><p>Show all errors, including ones which can be recovered from.
+</p></dd>
+<dt> ‘<samp>warning</samp>’</dt>
+<dd><p>Show all warnings and errors. Any message related to possibly
+incorrect or unexpected events will be shown.
+</p></dd>
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>Show informative messages during processing. This is in addition to
+warnings and errors. This is the default value.
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>Same as <code>info</code>, except more verbose.
+</p></dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Show everything, including debugging information.
+</p></dd>
+</dl>
+
+<p>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
+<code>AV_LOG_FORCE_NOCOLOR</code> or <code>NO_COLOR</code>, or can be forced setting
+the environment variable <code>AV_LOG_FORCE_COLOR</code>.
+The use of the environment variable <code>NO_COLOR</code> is deprecated and
+will be dropped in a following FFmpeg version.
+</p>
+</dd>
+<dt> ‘<samp>-report</samp>’</dt>
+<dd><p>Dump full command line and console output to a file named
+<code><var>program</var>-<var>YYYYMMDD</var>-<var>HHMMSS</var>.log</code> in the current
+directory.
+This file can be useful for bug reports.
+It also implies <code>-loglevel verbose</code>.
+</p>
+<p>Setting the environment variable <code>FFREPORT</code> to any value has the
+same effect. If the value is a ’:’-separated key=value sequence, these
+options will affect the report; options values must be escaped if they
+contain special characters or the options delimiter ’:’ (see the
+“Quoting and escaping” section in the ffmpeg-utils manual). The
+following option is recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>set the file name to use for the report; <code>%p</code> is expanded to the name
+of the program, <code>%t</code> is expanded to a timestamp, <code>%%</code> is expanded
+to a plain <code>%</code>
+</p></dd>
+</dl>
+
+<p>Errors in parsing the environment variable are not fatal, and will not
+appear in the report.
+</p>
+</dd>
+<dt> ‘<samp>-hide_banner</samp>’</dt>
+<dd><p>Suppress printing banner.
+</p>
+<p>All FFmpeg tools will normally show a copyright notice, build options
+and library versions. This option can be used to suppress printing
+this information.
+</p>
+</dd>
+<dt> ‘<samp>-cpuflags flags (<em>global</em>)</samp>’</dt>
+<dd><p>Allows setting and clearing cpu flags. This option is intended
+for testing. Do not use it unless you know what you’re doing.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -cpuflags -sse+mmx ...
+ffmpeg -cpuflags mmx ...
+ffmpeg -cpuflags 0 ...
+</pre></td></tr></table>
+<p>Possible flags for this option are:
+</p><dl compact="compact">
+<dt> ‘<samp>x86</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>mmxext</samp>’</dt>
+<dt> ‘<samp>sse</samp>’</dt>
+<dt> ‘<samp>sse2</samp>’</dt>
+<dt> ‘<samp>sse2slow</samp>’</dt>
+<dt> ‘<samp>sse3</samp>’</dt>
+<dt> ‘<samp>sse3slow</samp>’</dt>
+<dt> ‘<samp>ssse3</samp>’</dt>
+<dt> ‘<samp>atom</samp>’</dt>
+<dt> ‘<samp>sse4.1</samp>’</dt>
+<dt> ‘<samp>sse4.2</samp>’</dt>
+<dt> ‘<samp>avx</samp>’</dt>
+<dt> ‘<samp>xop</samp>’</dt>
+<dt> ‘<samp>fma4</samp>’</dt>
+<dt> ‘<samp>3dnow</samp>’</dt>
+<dt> ‘<samp>3dnowext</samp>’</dt>
+<dt> ‘<samp>cmov</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>ARM</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>armv5te</samp>’</dt>
+<dt> ‘<samp>armv6</samp>’</dt>
+<dt> ‘<samp>armv6t2</samp>’</dt>
+<dt> ‘<samp>vfp</samp>’</dt>
+<dt> ‘<samp>vfpv3</samp>’</dt>
+<dt> ‘<samp>neon</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>PowerPC</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>altivec</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>Specific Processors</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>pentium2</samp>’</dt>
+<dt> ‘<samp>pentium3</samp>’</dt>
+<dt> ‘<samp>pentium4</samp>’</dt>
+<dt> ‘<samp>k6</samp>’</dt>
+<dt> ‘<samp>k62</samp>’</dt>
+<dt> ‘<samp>athlon</samp>’</dt>
+<dt> ‘<samp>athlonxp</samp>’</dt>
+<dt> ‘<samp>k8</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-opencl_bench</samp>’</dt>
+<dd><p>Benchmark all available OpenCL devices and show the results. This option
+is only available when FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+</dd>
+<dt> ‘<samp>-opencl_options options (<em>global</em>)</samp>’</dt>
+<dd><p>Set OpenCL environment options. This option is only available when
+FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+<p><var>options</var> must be a list of <var>key</var>=<var>value</var> option pairs
+separated by ’:’. See the “OpenCL Options” section in the
+ffmpeg-utils manual for the list of supported options.
+</p></dd>
+</dl>
+
+<a name="AVOptions"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-AVOptions">5.3 AVOptions</a></h2>
+
+<p>These options are provided directly by the libavformat, libavdevice and
+libavcodec libraries. To see the list of available AVOptions, use the
+‘<samp>-help</samp>’ option. They are separated into two categories:
+</p><dl compact="compact">
+<dt> ‘<samp>generic</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>private</samp>’</dt>
+<dd><p>These options are specific to the given container, device or codec. Private
+options are listed under their corresponding containers/devices/codecs.
+</p></dd>
+</dl>
+
+<p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
+an MP3 file, use the ‘<samp>id3v2_version</samp>’ private option of the MP3
+muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.flac -id3v2_version 3 out.mp3
+</pre></td></tr></table>
+
+<p>All codec AVOptions are per-stream, and thus a stream specifier
+should be attached to them.
+</p>
+<p>Note: the ‘<samp>-nooption</samp>’ syntax cannot be used for boolean
+AVOptions, use ‘<samp>-option 0</samp>’/‘<samp>-option 1</samp>’.
+</p>
+<p>Note: the 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.
+</p>
+<a name="Main-options"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Main-options">5.4 Main options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-f <var>fmt</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Force input or output file format. The format is normally auto detected for input
+files and guessed from the file extension for output files, so this option is not
+needed in most cases.
+</p>
+</dd>
+<dt> ‘<samp>-i <var>filename</var> (<em>input</em>)</samp>’</dt>
+<dd><p>input file name
+</p>
+</dd>
+<dt> ‘<samp>-y (<em>global</em>)</samp>’</dt>
+<dd><p>Overwrite output files without asking.
+</p>
+</dd>
+<dt> ‘<samp>-n (<em>global</em>)</samp>’</dt>
+<dd><p>Do not overwrite output files, and exit immediately if a specified
+output file already exists.
+</p>
+</dd>
+<dt> ‘<samp>-c[:<var>stream_specifier</var>] <var>codec</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dt> ‘<samp>-codec[:<var>stream_specifier</var>] <var>codec</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Select an encoder (when used before an output file) or a decoder (when used
+before an input file) for one or more streams. <var>codec</var> is the name of a
+decoder/encoder or a special value <code>copy</code> (output only) to indicate that
+the stream is not to be re-encoded.
+</p>
+<p>For example
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
+</pre></td></tr></table>
+<p>encodes all video streams with libx264 and copies all audio streams.
+</p>
+<p>For each stream, the last matching <code>c</code> option is applied, so
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
+</pre></td></tr></table>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>-t <var>duration</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Stop writing the output after its duration reaches <var>duration</var>.
+<var>duration</var> may be a number in seconds, or in <code>hh:mm:ss[.xxx]</code> form.
+</p>
+<p>-to and -t are mutually exclusive and -t has priority.
+</p>
+</dd>
+<dt> ‘<samp>-to <var>position</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Stop writing the output at <var>position</var>.
+<var>position</var> may be a number in seconds, or in <code>hh:mm:ss[.xxx]</code> form.
+</p>
+<p>-to and -t are mutually exclusive and -t has priority.
+</p>
+</dd>
+<dt> ‘<samp>-fs <var>limit_size</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the file size limit, expressed in bytes.
+</p>
+</dd>
+<dt> ‘<samp>-ss <var>position</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>When used as an input option (before <code>-i</code>), seeks in this input file to
+<var>position</var>. Note the in most formats it is not possible to seek exactly, so
+<code>ffmpeg</code> will seek to the closest seek point before <var>position</var>.
+When transcoding and ‘<samp>-accurate_seek</samp>’ is enabled (the default), this
+extra segment between the seek point and <var>position</var> will be decoded and
+discarded. When doing stream copy or when ‘<samp>-noaccurate_seek</samp>’ is used, it
+will be preserved.
+</p>
+<p>When used as an output option (before an output filename), decodes but discards
+input until the timestamps reach <var>position</var>.
+</p>
+<p><var>position</var> may be either in seconds or in <code>hh:mm:ss[.xxx]</code> form.
+</p>
+</dd>
+<dt> ‘<samp>-itsoffset <var>offset</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set the input time offset.
+</p>
+<p><var>offset</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#time-duration-syntax">(ffmpeg-utils)time duration syntax</a>.
+</p>
+<p>The offset is added to the timestamps of the input files. Specifying
+a positive offset means that the corresponding streams are delayed by
+the time duration specified in <var>offset</var>.
+</p>
+</dd>
+<dt> ‘<samp>-timestamp <var>date</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the recording timestamp in the container.
+</p>
+<p><var>date</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#date-syntax">(ffmpeg-utils)date syntax</a>.
+</p>
+</dd>
+<dt> ‘<samp>-metadata[:metadata_specifier] <var>key</var>=<var>value</var> (<em>output,per-metadata</em>)</samp>’</dt>
+<dd><p>Set a metadata key/value pair.
+</p>
+<p>An optional <var>metadata_specifier</var> may be given to set metadata
+on streams or chapters. See <code>-map_metadata</code> documentation for
+details.
+</p>
+<p>This option overrides metadata set with <code>-map_metadata</code>. It is
+also possible to delete metadata by using an empty value.
+</p>
+<p>For example, for setting the title in the output file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -metadata title="my title" out.flv
+</pre></td></tr></table>
+
+<p>To set the language of the first audio stream:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-target <var>type</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Specify target file type (<code>vcd</code>, <code>svcd</code>, <code>dvd</code>, <code>dv</code>,
+<code>dv50</code>). <var>type</var> may be prefixed with <code>pal-</code>, <code>ntsc-</code> or
+<code>film-</code> to use the corresponding standard. All the format options
+(bitrate, codecs, buffer sizes) are then set automatically. You can just type:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
+</pre></td></tr></table>
+
+<p>Nevertheless you can specify additional options as long as you know
+they do not conflict with the standard, as in:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-dframes <var>number</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the number of data frames to record. This is an alias for <code>-frames:d</code>.
+</p>
+</dd>
+<dt> ‘<samp>-frames[:<var>stream_specifier</var>] <var>framecount</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Stop writing to the stream after <var>framecount</var> frames.
+</p>
+</dd>
+<dt> ‘<samp>-q[:<var>stream_specifier</var>] <var>q</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dt> ‘<samp>-qscale[:<var>stream_specifier</var>] <var>q</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Use fixed quality scale (VBR). The meaning of <var>q</var>/<var>qscale</var> is
+codec-dependent.
+If <var>qscale</var> is used without a <var>stream_specifier</var> then it applies only
+to the video stream, this is to maintain compatibility with previous behavior
+and as specifying the same codec specific value to 2 different codecs that is
+audio and video generally is not what is intended when no stream_specifier is
+used.
+</p>
+<p><a name="filter_005foption"></a>
+</p></dd>
+<dt> ‘<samp>-filter[:<var>stream_specifier</var>] <var>filtergraph</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the stream.
+</p>
+<p><var>filtergraph</var> is a description of the filtergraph to apply to
+the stream, and must have a single input and a single output of the
+same type of the stream. In the filtergraph, the input is associated
+to the label <code>in</code>, and the output to the label <code>out</code>. See
+the ffmpeg-filters manual for more information about the filtergraph
+syntax.
+</p>
+<p>See the <a href="#filter_005fcomplex_005foption">-filter_complex option</a> if you
+want to create filtergraphs with multiple inputs and/or outputs.
+</p>
+</dd>
+<dt> ‘<samp>-filter_script[:<var>stream_specifier</var>] <var>filename</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>This option is similar to ‘<samp>-filter</samp>’, the only difference is that its
+argument is the name of the file from which a filtergraph description is to be
+read.
+</p>
+</dd>
+<dt> ‘<samp>-pre[:<var>stream_specifier</var>] <var>preset_name</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Specify the preset for matching stream(s).
+</p>
+</dd>
+<dt> ‘<samp>-stats (<em>global</em>)</samp>’</dt>
+<dd><p>Print encoding progress/statistics. It is on by default, to explicitly
+disable it you need to specify <code>-nostats</code>.
+</p>
+</dd>
+<dt> ‘<samp>-progress <var>url</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Send program-friendly progress information to <var>url</var>.
+</p>
+<p>Progress information is written approximately every second and at the end of
+the encoding process. It is made of "<var>key</var>=<var>value</var>" lines. <var>key</var>
+consists of only alphanumeric characters. The last key of a sequence of
+progress information is always "progress".
+</p>
+</dd>
+<dt> ‘<samp>-stdin</samp>’</dt>
+<dd><p>Enable interaction on standard input. On by default unless standard input is
+used as an input. To explicitly disable interaction you need to specify
+<code>-nostdin</code>.
+</p>
+<p>Disabling interaction on standard input is useful, for example, if
+ffmpeg is in the background process group. Roughly the same result can
+be achieved with <code>ffmpeg ... < /dev/null</code> but it requires a
+shell.
+</p>
+</dd>
+<dt> ‘<samp>-debug_ts (<em>global</em>)</samp>’</dt>
+<dd><p>Print timestamp information. It is off by default. This option is
+mostly useful for testing and debugging purposes, and the output
+format may change from one version to another, so it should not be
+employed by portable scripts.
+</p>
+<p>See also the option <code>-fdebug ts</code>.
+</p>
+</dd>
+<dt> ‘<samp>-attach <var>filename</var> (<em>output</em>)</samp>’</dt>
+<dd><p>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 <code>-map</code> or automatic mappings).
+</p>
+<p>Note that for Matroska you also have to set the mimetype metadata tag:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
+</pre></td></tr></table>
+<p>(assuming that the attachment stream will be third in the output file).
+</p>
+</dd>
+<dt> ‘<samp>-dump_attachment[:<var>stream_specifier</var>] <var>filename</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>Extract the matching attachment stream into a file named <var>filename</var>. If
+<var>filename</var> is empty, then the value of the <code>filename</code> metadata tag
+will be used.
+</p>
+<p>E.g. to extract the first attachment to a file named ’out.ttf’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
+</pre></td></tr></table>
+<p>To extract all attachments to files determined by the <code>filename</code> tag:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -dump_attachment:t "" -i INPUT
+</pre></td></tr></table>
+
+<p>Technical note – attachments are implemented as codec extradata, so this
+option can actually be used to extract extradata from any stream, not just
+attachments.
+</p>
+</dd>
+</dl>
+
+<a name="Video-Options"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Video-Options">5.5 Video Options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-vframes <var>number</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the number of video frames to record. This is an alias for <code>-frames:v</code>.
+</p></dd>
+<dt> ‘<samp>-r[:<var>stream_specifier</var>] <var>fps</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Set frame rate (Hz value, fraction or abbreviation).
+</p>
+<p>As an input option, ignore any timestamps stored in the file and instead
+generate timestamps assuming constant frame rate <var>fps</var>.
+</p>
+<p>As an output option, duplicate or drop input frames to achieve constant output
+frame rate <var>fps</var>.
+</p>
+</dd>
+<dt> ‘<samp>-s[:<var>stream_specifier</var>] <var>size</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Set frame size.
+</p>
+<p>As an input option, this is a shortcut for the ‘<samp>video_size</samp>’ private
+option, recognized by some demuxers for which the frame size is either not
+stored in the file or is configurable – e.g. raw video or video grabbers.
+</p>
+<p>As an output option, this inserts the <code>scale</code> video filter to the
+<em>end</em> of the corresponding filtergraph. Please use the <code>scale</code> filter
+directly to insert it at the beginning or some other place.
+</p>
+<p>The format is ‘<samp>wxh</samp>’ (default - same as source).
+</p>
+</dd>
+<dt> ‘<samp>-aspect[:<var>stream_specifier</var>] <var>aspect</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set the video display aspect ratio specified by <var>aspect</var>.
+</p>
+<p><var>aspect</var> can be a floating point number string, or a string of the
+form <var>num</var>:<var>den</var>, where <var>num</var> and <var>den</var> are the
+numerator and denominator of the aspect ratio. For example "4:3",
+"16:9", "1.3333", and "1.7777" are valid argument values.
+</p>
+<p>If used together with ‘<samp>-vcodec copy</samp>’, it will affect the aspect ratio
+stored at container level, but not the aspect ratio stored in encoded
+frames, if it exists.
+</p>
+</dd>
+<dt> ‘<samp>-vn (<em>output</em>)</samp>’</dt>
+<dd><p>Disable video recording.
+</p>
+</dd>
+<dt> ‘<samp>-vcodec <var>codec</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the video codec. This is an alias for <code>-codec:v</code>.
+</p>
+</dd>
+<dt> ‘<samp>-pass[:<var>stream_specifier</var>] <var>n</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>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:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-passlogfile[:<var>stream_specifier</var>] <var>prefix</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set two-pass log file name prefix to <var>prefix</var>, the default file name
+prefix is “ffmpeg2pass”. The complete file name will be
+‘<tt>PREFIX-N.log</tt>’, where N is a number specific to the output
+stream
+</p>
+</dd>
+<dt> ‘<samp>-vf <var>filtergraph</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the stream.
+</p>
+<p>This is an alias for <code>-filter:v</code>, see the <a href="#filter_005foption">-filter option</a>.
+</p></dd>
+</dl>
+
+<a name="Advanced-Video-Options"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Advanced-Video-Options">5.6 Advanced Video Options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-pix_fmt[:<var>stream_specifier</var>] <var>format</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Set pixel format. Use <code>-pix_fmts</code> to show all the supported
+pixel formats.
+If the selected pixel format can not be selected, ffmpeg will print a
+warning and select the best pixel format supported by the encoder.
+If <var>pix_fmt</var> is prefixed by a <code>+</code>, ffmpeg will exit with an error
+if the requested pixel format can not be selected, and automatic conversions
+inside filtergraphs are disabled.
+If <var>pix_fmt</var> is a single <code>+</code>, ffmpeg selects the same pixel format
+as the input (or graph output) and automatic conversions are disabled.
+</p>
+</dd>
+<dt> ‘<samp>-sws_flags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set SwScaler flags.
+</p></dd>
+<dt> ‘<samp>-vdt <var>n</var></samp>’</dt>
+<dd><p>Discard threshold.
+</p>
+</dd>
+<dt> ‘<samp>-rc_override[:<var>stream_specifier</var>] <var>override</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>-ilme</samp>’</dt>
+<dd><p>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
+‘<samp>-deinterlace</samp>’, but deinterlacing introduces losses.
+</p></dd>
+<dt> ‘<samp>-psnr</samp>’</dt>
+<dd><p>Calculate PSNR of compressed frames.
+</p></dd>
+<dt> ‘<samp>-vstats</samp>’</dt>
+<dd><p>Dump video coding statistics to ‘<tt>vstats_HHMMSS.log</tt>’.
+</p></dd>
+<dt> ‘<samp>-vstats_file <var>file</var></samp>’</dt>
+<dd><p>Dump video coding statistics to <var>file</var>.
+</p></dd>
+<dt> ‘<samp>-top[:<var>stream_specifier</var>] <var>n</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>top=1/bottom=0/auto=-1 field first
+</p></dd>
+<dt> ‘<samp>-dc <var>precision</var></samp>’</dt>
+<dd><p>Intra_dc_precision.
+</p></dd>
+<dt> ‘<samp>-vtag <var>fourcc/tag</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Force video tag/fourcc. This is an alias for <code>-tag:v</code>.
+</p></dd>
+<dt> ‘<samp>-qphist (<em>global</em>)</samp>’</dt>
+<dd><p>Show QP histogram
+</p></dd>
+<dt> ‘<samp>-vbsf <var>bitstream_filter</var></samp>’</dt>
+<dd><p>Deprecated see -bsf
+</p>
+</dd>
+<dt> ‘<samp>-force_key_frames[:<var>stream_specifier</var>] <var>time</var>[,<var>time</var>...] (<em>output,per-stream</em>)</samp>’</dt>
+<dt> ‘<samp>-force_key_frames[:<var>stream_specifier</var>] expr:<var>expr</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Force key frames at the specified timestamps, more precisely at the first
+frames after each specified time.
+</p>
+<p>If the argument is prefixed with <code>expr:</code>, the string <var>expr</var>
+is interpreted like an expression and is evaluated for each frame. A
+key frame is forced in case the evaluation is non-zero.
+</p>
+<p>If one of the times is "<code>chapters</code>[<var>delta</var>]", it is expanded into
+the time of the beginning of all chapters in the file, shifted by
+<var>delta</var>, expressed as a time in seconds.
+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.
+</p>
+<p>For example, to insert a key frame at 5 minutes, plus key frames 0.1 second
+before the beginning of every chapter:
+</p><table><tr><td> </td><td><pre class="example">-force_key_frames 0:05:00,chapters-0.1
+</pre></td></tr></table>
+
+<p>The expression in <var>expr</var> can contain the following constants:
+</p><dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of current processed frame, starting from 0
+</p></dd>
+<dt> ‘<samp>n_forced</samp>’</dt>
+<dd><p>the number of forced frames
+</p></dd>
+<dt> ‘<samp>prev_forced_n</samp>’</dt>
+<dd><p>the number of the previous forced frame, it is <code>NAN</code> when no
+keyframe was forced yet
+</p></dd>
+<dt> ‘<samp>prev_forced_t</samp>’</dt>
+<dd><p>the time of the previous forced frame, it is <code>NAN</code> when no
+keyframe was forced yet
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the time of the current processed frame
+</p></dd>
+</dl>
+
+<p>For example to force a key frame every 5 seconds, you can specify:
+</p><table><tr><td> </td><td><pre class="example">-force_key_frames expr:gte(t,n_forced*5)
+</pre></td></tr></table>
+
+<p>To force a key frame 5 seconds after the time of the last forced one,
+starting from second 13:
+</p><table><tr><td> </td><td><pre class="example">-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
+</pre></td></tr></table>
+
+<p>Note that forcing too many keyframes is very harmful for the lookahead
+algorithms of certain encoders: using fixed-GOP options or similar
+would be more efficient.
+</p>
+</dd>
+<dt> ‘<samp>-copyinkf[:<var>stream_specifier</var>] (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>When doing stream copy, copy also non-key frames found at the
+beginning.
+</p>
+</dd>
+<dt> ‘<samp>-hwaccel[:<var>stream_specifier</var>] <var>hwaccel</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>Use hardware acceleration to decode the matching stream(s). The allowed values
+of <var>hwaccel</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do not use any hardware acceleration (the default).
+</p>
+</dd>
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatically select the hardware acceleration method.
+</p>
+</dd>
+<dt> ‘<samp>vdpau</samp>’</dt>
+<dd><p>Use VDPAU (Video Decode and Presentation API for Unix) hardware acceleration.
+</p></dd>
+</dl>
+
+<p>This option has no effect if the selected hwaccel is not available or not
+supported by the chosen decoder.
+</p>
+<p>Note that most acceleration methods are intended for playback and will not be
+faster than software decoding on modern CPUs. Additionally, <code>ffmpeg</code>
+will usually need to copy the decoded frames from the GPU memory into the system
+memory, resulting in further performance loss. This option is thus mainly
+useful for testing.
+</p>
+</dd>
+<dt> ‘<samp>-hwaccel_device[:<var>stream_specifier</var>] <var>hwaccel_device</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>Select a device to use for hardware acceleration.
+</p>
+<p>This option only makes sense when the ‘<samp>-hwaccel</samp>’ option is also
+specified. Its exact meaning depends on the specific hardware acceleration
+method chosen.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>vdpau</samp>’</dt>
+<dd><p>For VDPAU, this option specifies the X11 display/screen to use. If this option
+is not specified, the value of the <var>DISPLAY</var> environment variable is used
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Audio-Options"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Audio-Options">5.7 Audio Options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-aframes <var>number</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the number of audio frames to record. This is an alias for <code>-frames:a</code>.
+</p></dd>
+<dt> ‘<samp>-ar[:<var>stream_specifier</var>] <var>freq</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-aq <var>q</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the audio quality (codec-specific, VBR). This is an alias for -q:a.
+</p></dd>
+<dt> ‘<samp>-ac[:<var>stream_specifier</var>] <var>channels</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-an (<em>output</em>)</samp>’</dt>
+<dd><p>Disable audio recording.
+</p></dd>
+<dt> ‘<samp>-acodec <var>codec</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set the audio codec. This is an alias for <code>-codec:a</code>.
+</p></dd>
+<dt> ‘<samp>-sample_fmt[:<var>stream_specifier</var>] <var>sample_fmt</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set the audio sample format. Use <code>-sample_fmts</code> to get a list
+of supported sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-af <var>filtergraph</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the stream.
+</p>
+<p>This is an alias for <code>-filter:a</code>, see the <a href="#filter_005foption">-filter option</a>.
+</p></dd>
+</dl>
+
+<a name="Advanced-Audio-options_003a"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Advanced-Audio-options_003a">5.8 Advanced Audio options:</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-atag <var>fourcc/tag</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Force audio tag/fourcc. This is an alias for <code>-tag:a</code>.
+</p></dd>
+<dt> ‘<samp>-absf <var>bitstream_filter</var></samp>’</dt>
+<dd><p>Deprecated, see -bsf
+</p></dd>
+<dt> ‘<samp>-guess_layout_max <var>channels</var> (<em>input,per-stream</em>)</samp>’</dt>
+<dd><p>If some input channel layout is not known, try to guess only if it
+corresponds to at most the specified number of channels. For example, 2
+tells to <code>ffmpeg</code> to recognize 1 channel as mono and 2 channels as
+stereo but not 6 channels as 5.1. The default is to always try to guess. Use
+0 to disable all guessing.
+</p></dd>
+</dl>
+
+<a name="Subtitle-options_003a"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Subtitle-options_003a">5.9 Subtitle options:</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-scodec <var>codec</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set the subtitle codec. This is an alias for <code>-codec:s</code>.
+</p></dd>
+<dt> ‘<samp>-sn (<em>output</em>)</samp>’</dt>
+<dd><p>Disable subtitle recording.
+</p></dd>
+<dt> ‘<samp>-sbsf <var>bitstream_filter</var></samp>’</dt>
+<dd><p>Deprecated, see -bsf
+</p></dd>
+</dl>
+
+<a name="Advanced-Subtitle-options_003a"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Advanced-Subtitle-options_003a">5.10 Advanced Subtitle options:</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-fix_sub_duration</samp>’</dt>
+<dd><p>Fix subtitles durations. For each subtitle, wait for the next packet in the
+same stream and adjust the duration of the first to avoid overlap. This is
+necessary with some subtitles codecs, especially DVB subtitles, because the
+duration in the original packet is only a rough estimate and the end is
+actually marked by an empty subtitle frame. Failing to use this option when
+necessary can result in exaggerated durations or muxing failures due to
+non-monotonic timestamps.
+</p>
+<p>Note that this option will delay the output of all data until the next
+subtitle packet is decoded: it may increase memory consumption and latency a
+lot.
+</p>
+</dd>
+<dt> ‘<samp>-canvas_size <var>size</var></samp>’</dt>
+<dd><p>Set the size of the canvas used to render subtitles.
+</p>
+</dd>
+</dl>
+
+<a name="Advanced-options"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Advanced-options">5.11 Advanced options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-map [-]<var>input_file_id</var>[:<var>stream_specifier</var>][,<var>sync_file_id</var>[:<var>stream_specifier</var>]] | <var>[linklabel]</var> (<em>output</em>)</samp>’</dt>
+<dd>
+<p>Designate one or more input streams as a source for the output file. Each input
+stream is identified by the input file index <var>input_file_id</var> and
+the input stream index <var>input_stream_id</var> within the input
+file. Both indices start at 0. If specified,
+<var>sync_file_id</var>:<var>stream_specifier</var> sets which input stream
+is used as a presentation sync reference.
+</p>
+<p>The first <code>-map</code> option on the command line specifies the
+source for output stream 0, the second <code>-map</code> option specifies
+the source for output stream 1, etc.
+</p>
+<p>A <code>-</code> character before the stream identifier creates a "negative" mapping.
+It disables matching streams from already created mappings.
+</p>
+<p>An alternative <var>[linklabel]</var> form will map outputs from complex filter
+graphs (see the ‘<samp>-filter_complex</samp>’ option) to the output file.
+<var>linklabel</var> must correspond to a defined output link label in the graph.
+</p>
+<p>For example, to map ALL streams from the first input file to output
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 output
+</pre></td></tr></table>
+
+<p>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
+<code>-map</code> to select which streams to place in an output file. For
+example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0:1 out.wav
+</pre></td></tr></table>
+<p>will map the input stream in ‘<tt>INPUT</tt>’ identified by "0:1" to
+the (single) output stream in ‘<tt>out.wav</tt>’.
+</p>
+<p>For example, to select the stream with index 2 from input file
+‘<tt>a.mov</tt>’ (specified by the identifier "0:2"), and stream with
+index 6 from input ‘<tt>b.mov</tt>’ (specified by the identifier "1:6"),
+and copy them to the output file ‘<tt>out.mov</tt>’:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
+</pre></td></tr></table>
+
+<p>To select all video and the third audio stream from an input file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
+</pre></td></tr></table>
+
+<p>To map all the streams except the second audio, use negative mappings
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
+</pre></td></tr></table>
+
+<p>Note that using this option disables the default mappings for this output file.
+</p>
+</dd>
+<dt> ‘<samp>-map_channel [<var>input_file_id</var>.<var>stream_specifier</var>.<var>channel_id</var>|-1][:<var>output_file_id</var>.<var>stream_specifier</var>]</samp>’</dt>
+<dd><p>Map an audio channel from a given input to an output. If
+<var>output_file_id</var>.<var>stream_specifier</var> is not set, the audio channel will
+be mapped on all the audio streams.
+</p>
+<p>Using "-1" instead of
+<var>input_file_id</var>.<var>stream_specifier</var>.<var>channel_id</var> will map a muted
+channel.
+</p>
+<p>For example, assuming <var>INPUT</var> is a stereo audio file, you can switch the
+two audio channels with the following command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
+</pre></td></tr></table>
+
+<p>If you want to mute the first channel and keep the second:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
+</pre></td></tr></table>
+
+<p>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
+input and output channel layouts don’t match (for instance two "-map_channel"
+options and "-ac 6").
+</p>
+<p>You can also extract each channel of an input to specific outputs; the following
+command extracts two channels of the <var>INPUT</var> audio stream (file 0, stream 0)
+to the respective <var>OUTPUT_CH0</var> and <var>OUTPUT_CH1</var> outputs:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
+</pre></td></tr></table>
+
+<p>The following example splits the channels of a stereo input into two separate
+streams, which are put into the same output file:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>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 splitting a stereo stream into two single channel mono streams
+is possible.
+</p>
+<p>If you need this feature, a possible workaround is to use the <em>amerge</em>
+filter. For example, if you need to merge a media (here ‘<tt>input.mkv</tt>’) with 2
+mono audio streams into one single stereo channel audio stream (and keep the
+video stream), you can use the following command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-map_metadata[:<var>metadata_spec_out</var>] <var>infile</var>[:<var>metadata_spec_in</var>] (<em>output,per-metadata</em>)</samp>’</dt>
+<dd><p>Set metadata information of the next output file from <var>infile</var>. Note that
+those are file indices (zero-based), not filenames.
+Optional <var>metadata_spec_in/out</var> parameters specify, which metadata to copy.
+A metadata specifier can have the following forms:
+</p><dl compact="compact">
+<dt> ‘<samp><var>g</var></samp>’</dt>
+<dd><p>global metadata, i.e. metadata that applies to the whole file
+</p>
+</dd>
+<dt> ‘<samp><var>s</var>[:<var>stream_spec</var>]</samp>’</dt>
+<dd><p>per-stream metadata. <var>stream_spec</var> is a stream specifier as described
+in the <a href="#Stream-specifiers">Stream specifiers</a> chapter. In an input metadata specifier, the first
+matching stream is copied from. In an output metadata specifier, all matching
+streams are copied to.
+</p>
+</dd>
+<dt> ‘<samp><var>c</var>:<var>chapter_index</var></samp>’</dt>
+<dd><p>per-chapter metadata. <var>chapter_index</var> is the zero-based chapter index.
+</p>
+</dd>
+<dt> ‘<samp><var>p</var>:<var>program_index</var></samp>’</dt>
+<dd><p>per-program metadata. <var>program_index</var> is the zero-based program index.
+</p></dd>
+</dl>
+<p>If metadata specifier is omitted, it defaults to global.
+</p>
+<p>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.
+</p>
+<p>For example to copy metadata from the first stream of the input file to global metadata
+of the output file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
+</pre></td></tr></table>
+
+<p>To do the reverse, i.e. copy global metadata to all audio streams:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
+</pre></td></tr></table>
+<p>Note that simple <code>0</code> would work as well in this example, since global
+metadata is assumed by default.
+</p>
+</dd>
+<dt> ‘<samp>-map_chapters <var>input_file_index</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Copy chapters from input file with index <var>input_file_index</var> 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.
+</p>
+</dd>
+<dt> ‘<samp>-benchmark (<em>global</em>)</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-benchmark_all (<em>global</em>)</samp>’</dt>
+<dd><p>Show benchmarking information during the encode.
+Shows CPU time used in various steps (audio/video encode/decode).
+</p></dd>
+<dt> ‘<samp>-timelimit <var>duration</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Exit after ffmpeg has been running for <var>duration</var> seconds.
+</p></dd>
+<dt> ‘<samp>-dump (<em>global</em>)</samp>’</dt>
+<dd><p>Dump each input packet to stderr.
+</p></dd>
+<dt> ‘<samp>-hex (<em>global</em>)</samp>’</dt>
+<dd><p>When dumping packets, also dump the payload.
+</p></dd>
+<dt> ‘<samp>-re (<em>input</em>)</samp>’</dt>
+<dd><p>Read input at native frame rate. Mainly used to simulate a grab device.
+or live input stream (e.g. when reading from a file). Should not be used
+with actual grab devices or live input streams (where it can cause packet
+loss).
+By default <code>ffmpeg</code> attempts to read the input(s) as fast as possible.
+This option will slow down the reading of the input(s) to the native frame rate
+of the input(s). It is useful for real-time output (e.g. live streaming).
+</p></dd>
+<dt> ‘<samp>-loop_input</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-loop_output <var>number_of_times</var></samp>’</dt>
+<dd><p>Repeatedly loop output for formats that support looping such as animated GIF
+(0 will loop the output infinitely).
+This option is deprecated, use -loop.
+</p></dd>
+<dt> ‘<samp>-vsync <var>parameter</var></samp>’</dt>
+<dd><p>Video sync method.
+For compatibility reasons old values can be specified as numbers.
+Newly added values will have to be specified as strings always.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, passthrough</samp>’</dt>
+<dd><p>Each frame is passed with its timestamp from the demuxer to the muxer.
+</p></dd>
+<dt> ‘<samp>1, cfr</samp>’</dt>
+<dd><p>Frames will be duplicated and dropped to achieve exactly the requested
+constant frame rate.
+</p></dd>
+<dt> ‘<samp>2, vfr</samp>’</dt>
+<dd><p>Frames are passed through with their timestamp or dropped so as to
+prevent 2 frames from having the same timestamp.
+</p></dd>
+<dt> ‘<samp>drop</samp>’</dt>
+<dd><p>As passthrough but destroys all timestamps, making the muxer generate
+fresh timestamps based on frame-rate.
+</p></dd>
+<dt> ‘<samp>-1, auto</samp>’</dt>
+<dd><p>Chooses between 1 and 2 depending on muxer capabilities. This is the
+default method.
+</p></dd>
+</dl>
+
+<p>Note that the timestamps may be further modified by the muxer, after this.
+For example, in the case that the format option ‘<samp>avoid_negative_ts</samp>’
+is enabled.
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>-async <var>samples_per_second</var></samp>’</dt>
+<dd><p>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.
+</p>
+<p>Note that the timestamps may be further modified by the muxer, after this.
+For example, in the case that the format option ‘<samp>avoid_negative_ts</samp>’
+is enabled.
+</p>
+<p>This option has been deprecated. Use the <code>aresample</code> audio filter instead.
+</p>
+</dd>
+<dt> ‘<samp>-copyts</samp>’</dt>
+<dd><p>Do not process input timestamps, but keep their values without trying
+to sanitize them. In particular, do not remove the initial start time
+offset value.
+</p>
+<p>Note that, depending on the ‘<samp>vsync</samp>’ option or on specific muxer
+processing (e.g. in case the format option ‘<samp>avoid_negative_ts</samp>’
+is enabled) the output timestamps may mismatch with the input
+timestamps even when this option is selected.
+</p>
+</dd>
+<dt> ‘<samp>-copytb <var>mode</var></samp>’</dt>
+<dd><p>Specify how to set the encoder timebase when stream copying. <var>mode</var> is an
+integer numeric value, and can assume one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Use the demuxer timebase.
+</p>
+<p>The time base is copied to the output encoder from the corresponding input
+demuxer. This is sometimes required to avoid non monotonically increasing
+timestamps when copying video streams with variable frame rate.
+</p>
+</dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>Use the decoder timebase.
+</p>
+<p>The time base is copied to the output encoder from the corresponding input
+decoder.
+</p>
+</dd>
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>Try to make the choice automatically, in order to generate a sane output.
+</p></dd>
+</dl>
+
+<p>Default value is -1.
+</p>
+</dd>
+<dt> ‘<samp>-shortest (<em>output</em>)</samp>’</dt>
+<dd><p>Finish encoding when the shortest input stream ends.
+</p></dd>
+<dt> ‘<samp>-dts_delta_threshold</samp>’</dt>
+<dd><p>Timestamp discontinuity delta threshold.
+</p></dd>
+<dt> ‘<samp>-muxdelay <var>seconds</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set the maximum demux-decode delay.
+</p></dd>
+<dt> ‘<samp>-muxpreload <var>seconds</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set the initial demux-decode delay.
+</p></dd>
+<dt> ‘<samp>-streamid <var>output-stream-index</var>:<var>new-value</var> (<em>output</em>)</samp>’</dt>
+<dd><p>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.
+</p>
+<p>For example, to set the stream 0 PID to 33 and the stream 1 PID to 36 for
+an output mpegts file:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-bsf[:<var>stream_specifier</var>] <var>bitstream_filters</var> (<em>output,per-stream</em>)</samp>’</dt>
+<dd><p>Set bitstream filters for matching streams. <var>bitstream_filters</var> is
+a comma-separated list of bitstream filters. Use the <code>-bsfs</code> option
+to get the list of bitstream filters.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
+</pre></td></tr></table>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-tag[:<var>stream_specifier</var>] <var>codec_tag</var> (<em>input/output,per-stream</em>)</samp>’</dt>
+<dd><p>Force a tag/fourcc for matching streams.
+</p>
+</dd>
+<dt> ‘<samp>-timecode <var>hh</var>:<var>mm</var>:<var>ss</var>SEP<var>ff</var></samp>’</dt>
+<dd><p>Specify Timecode for writing. <var>SEP</var> is ’:’ for non drop timecode and ’;’
+(or ’.’) for drop.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
+</pre></td></tr></table>
+
+<p><a name="filter_005fcomplex_005foption"></a>
+</p></dd>
+<dt> ‘<samp>-filter_complex <var>filtergraph</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
+outputs. For simple graphs – those with one input and one output of the same
+type – see the ‘<samp>-filter</samp>’ options. <var>filtergraph</var> is a description of
+the filtergraph, as described in the “Filtergraph syntax” section of the
+ffmpeg-filters manual.
+</p>
+<p>Input link labels must refer to input streams using the
+<code>[file_index:stream_specifier]</code> syntax (i.e. the same as ‘<samp>-map</samp>’
+uses). If <var>stream_specifier</var> matches multiple streams, the first one will be
+used. An unlabeled input will be connected to the first unused input stream of
+the matching type.
+</p>
+<p>Output link labels are referred to with ‘<samp>-map</samp>’. Unlabeled outputs are
+added to the first output file.
+</p>
+<p>Note that with this option it is possible to use only lavfi sources without
+normal input files.
+</p>
+<p>For example, to overlay an image over video
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
+'[out]' out.mkv
+</pre></td></tr></table>
+<p>Here <code>[0:v]</code> refers to the first video stream in the first input file,
+which is linked to the first (main) input of the overlay filter. Similarly the
+first video stream in the second input is linked to the second (overlay) input
+of overlay.
+</p>
+<p>Assuming there is only one video stream in each input file, we can omit input
+labels, so the above is equivalent to
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
+'[out]' out.mkv
+</pre></td></tr></table>
+
+<p>Furthermore we can omit the output label and the single output from the filter
+graph will be added to the output file automatically, so we can simply write
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
+</pre></td></tr></table>
+
+<p>To generate 5 seconds of pure red video using lavfi <code>color</code> source:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-lavfi <var>filtergraph</var> (<em>global</em>)</samp>’</dt>
+<dd><p>Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
+outputs. Equivalent to ‘<samp>-filter_complex</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>-filter_complex_script <var>filename</var> (<em>global</em>)</samp>’</dt>
+<dd><p>This option is similar to ‘<samp>-filter_complex</samp>’, the only difference is that
+its argument is the name of the file from which a complex filtergraph
+description is to be read.
+</p>
+</dd>
+<dt> ‘<samp>-accurate_seek (<em>input</em>)</samp>’</dt>
+<dd><p>This option enables or disables accurate seeking in input files with the
+‘<samp>-ss</samp>’ option. It is enabled by default, so seeking is accurate when
+transcoding. Use ‘<samp>-noaccurate_seek</samp>’ to disable it, which may be useful
+e.g. when copying some streams and transcoding the others.
+</p>
+</dd>
+<dt> ‘<samp>-override_ffserver (<em>global</em>)</samp>’</dt>
+<dd><p>Overrides the input specifications from <code>ffserver</code>. Using this
+option you can map any input stream to <code>ffserver</code> and control
+many aspects of the encoding from <code>ffmpeg</code>. Without this
+option <code>ffmpeg</code> will transmit to <code>ffserver</code> what is
+requested by <code>ffserver</code>.
+</p>
+<p>The option is intended for cases where features are needed that cannot be
+specified to <code>ffserver</code> but can be to <code>ffmpeg</code>.
+</p>
+</dd>
+</dl>
+
+<p>As a special exception, you can use a bitmap subtitle stream as input: it
+will be converted into a video with the same size as the largest video in
+the file, or 720x576 if no video is present. Note that this is an
+experimental and temporary solution. It will be removed once libavfilter has
+proper support for subtitles.
+</p>
+<p>For example, to hardcode subtitles on top of a DVB-T recording stored in
+MPEG-TS format, delaying the subtitles by 1 second:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.ts -filter_complex \
+ '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
+ -sn -map '#0x2dc' output.mkv
+</pre></td></tr></table>
+<p>(0x2d0, 0x2dc and 0x2ef are the MPEG-TS PIDs of respectively the video,
+audio and subtitles streams; 0:0, 0:3 and 0:7 would have worked too)
+</p>
+<a name="Preset-files"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Preset-files">5.12 Preset files</a></h2>
+<p>A preset file contains a sequence of <var>option</var>=<var>value</var> 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 ‘<tt>presets</tt>’ directory in the FFmpeg source tree for examples.
+</p>
+<p>Preset files are specified with the <code>vpre</code>, <code>apre</code>,
+<code>spre</code>, and <code>fpre</code> options. The <code>fpre</code> 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 <code>vpre</code>, <code>apre</code>, and
+<code>spre</code> options, the options specified in a preset file are
+applied to the currently selected codec of the same type as the preset
+option.
+</p>
+<p>The argument passed to the <code>vpre</code>, <code>apre</code>, and <code>spre</code>
+preset options identifies the preset file to use according to the
+following rules:
+</p>
+<p>First ffmpeg searches for a file named <var>arg</var>.ffpreset in the
+directories ‘<tt>$FFMPEG_DATADIR</tt>’ (if set), and ‘<tt>$HOME/.ffmpeg</tt>’, and in
+the datadir defined at configuration time (usually ‘<tt>PREFIX/share/ffmpeg</tt>’)
+or in a ‘<tt>ffpresets</tt>’ folder along the executable on win32,
+in that order. For example, if the argument is <code>libvpx-1080p</code>, it will
+search for the file ‘<tt>libvpx-1080p.ffpreset</tt>’.
+</p>
+<p>If no such file is found, then ffmpeg will search for a file named
+<var>codec_name</var>-<var>arg</var>.ffpreset in the above-mentioned
+directories, where <var>codec_name</var> is the name of the codec to which
+the preset file options will be applied. For example, if you select
+the video codec with <code>-vcodec libvpx</code> and use <code>-vpre 1080p</code>,
+then it will search for the file ‘<tt>libvpx-1080p.ffpreset</tt>’.
+</p>
+<a name="Tips"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Tips">6. Tips</a></h1>
+
+<ul>
+<li>
+For streaming at very low bitrates, use a low frame rate
+and a small GOP size. This is especially true for RealVideo where
+the Linux player does not seem to be very fast, so it can miss
+frames. An example is:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -g 3 -r 3 -t 10 -b:v 50k -s qcif -f rv10 /tmp/b.rm
+</pre></td></tr></table>
+
+</li><li>
+The parameter ’q’ which is displayed while encoding is the current
+quantizer. The value 1 indicates that a very good quality could
+be achieved. The value 31 indicates the worst quality. If q=31 appears
+too often, it means that the encoder cannot compress enough to meet
+your bitrate. You must either increase the bitrate, decrease the
+frame rate or decrease the frame size.
+
+</li><li>
+If your computer is not fast enough, you can speed up the
+compression at the expense of the compression ratio. You can use
+’-me zero’ to speed up motion estimation, and ’-g 0’ to disable
+motion estimation completely (you have only I-frames, which means it
+is about as good as JPEG compression).
+
+</li><li>
+To have very low audio bitrates, reduce the sampling frequency
+(down to 22050 Hz for MPEG audio, 22050 or 11025 for AC-3).
+
+</li><li>
+To have a constant quality (but a variable bitrate), use the option
+’-qscale n’ when ’n’ is between 1 (excellent quality) and 31 (worst
+quality).
+
+</li></ul>
+
+<a name="Examples"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Examples">7. Examples</a></h1>
+
+<a name="Preset-files-1"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Preset-files-1">7.1 Preset files</a></h2>
+
+<p>A preset file contains a sequence of <var>option=value</var> 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
+‘<tt>presets</tt>’ directory in the FFmpeg source tree for examples.
+</p>
+<p>Preset files are specified with the <code>pre</code> option, this option takes a
+preset name as input. FFmpeg searches for a file named <var>preset_name</var>.avpreset in
+the directories ‘<tt>$AVCONV_DATADIR</tt>’ (if set), and ‘<tt>$HOME/.ffmpeg</tt>’, and in
+the data directory defined at configuration time (usually ‘<tt>$PREFIX/share/ffmpeg</tt>’)
+in that order. For example, if the argument is <code>libx264-max</code>, it will
+search for the file ‘<tt>libx264-max.avpreset</tt>’.
+</p>
+<a name="Video-and-Audio-grabbing"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Video-and-Audio-grabbing">7.2 Video and Audio grabbing</a></h2>
+
+<p>If you specify the input format and device then ffmpeg can grab video
+and audio directly.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>Or with an ALSA audio source (mono input, card id 1) instead of OSS:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>Note that you must activate the right video source and channel before
+launching ffmpeg with any TV viewer such as
+<a href="http://linux.bytesex.org/xawtv/">xawtv</a> by Gerd Knorr. You also
+have to set the audio recording levels correctly with a
+standard mixer.
+</p>
+<a name="X11-grabbing"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-X11-grabbing">7.3 X11 grabbing</a></h2>
+
+<p>Grab the X11 display with ffmpeg via
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>0.0 is display.screen number of your X11 server, same as
+the DISPLAY environment variable.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<a name="Video-and-Audio-file-format-conversion"></a>
+<h2 class="section"><a href="ffmpeg.html#toc-Video-and-Audio-file-format-conversion">7.4 Video and Audio file format conversion</a></h2>
+
+<p>Any supported file format and protocol can serve as input to ffmpeg:
+</p>
+<p>Examples:
+</p><ul>
+<li>
+You can use YUV files as input:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
+</pre></td></tr></table>
+
+<p>It will use the files:
+</p><table><tr><td> </td><td><pre class="example">/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
+/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
+</pre></td></tr></table>
+
+<p>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 ‘<samp>-s</samp>’ option
+if ffmpeg cannot guess it.
+</p>
+</li><li>
+You can input from a raw YUV420P file:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/test.yuv /tmp/out.avi
+</pre></td></tr></table>
+
+<p>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.
+</p>
+</li><li>
+You can output to a raw YUV420P file:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i mydivx.avi hugefile.yuv
+</pre></td></tr></table>
+
+</li><li>
+You can set several input files and output files:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
+</pre></td></tr></table>
+
+<p>Converts the audio file a.wav and the raw YUV video file a.yuv
+to MPEG file a.mpg.
+</p>
+</li><li>
+You can also do audio and video conversions at the same time:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
+</pre></td></tr></table>
+
+<p>Converts a.wav to MPEG audio at 22050 Hz sample rate.
+</p>
+</li><li>
+You can encode to several formats at the same time and define a
+mapping from input stream to output streams:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
+</pre></td></tr></table>
+
+<p>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.
+</p>
+</li><li>
+You can transcode decrypted VOBs:
+
+<table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>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 <code>--enable-libmp3lame</code> to configure.
+The mapping is particularly useful for DVD transcoding
+to get the desired audio language.
+</p>
+<p>NOTE: To see the supported input formats, use <code>ffmpeg -formats</code>.
+</p>
+</li><li>
+You can extract images from a video, or create a video from many images:
+
+<p>For extracting images from a video:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
+</pre></td></tr></table>
+
+<p>This will extract one video frame per second from the video and will
+output them in files named ‘<tt>foo-001.jpeg</tt>’, ‘<tt>foo-002.jpeg</tt>’,
+etc. Images will be rescaled to fit the new WxH values.
+</p>
+<p>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.
+</p>
+<p>For creating a video from many images:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
+</pre></td></tr></table>
+
+<p>The syntax <code>foo-%03d.jpeg</code> 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.
+</p>
+<p>When importing an image sequence, -i also supports expanding
+shell-like wildcard patterns (globbing) internally, by selecting the
+image2-specific <code>-pattern_type glob</code> option.
+</p>
+<p>For example, for creating a video from filenames matching the glob pattern
+<code>foo-*.jpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f image2 -pattern_type glob -i 'foo-*.jpeg' -r 12 -s WxH foo.avi
+</pre></td></tr></table>
+
+</li><li>
+You can put many streams of the same type in the output:
+
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test1.avi -i test2.avi -map 0:3 -map 0:2 -map 0:1 -map 0:0 -c copy test12.nut
+</pre></td></tr></table>
+
+<p>The resulting output file ‘<tt>test12.avi</tt>’ will contain first four streams from
+the input file in reverse order.
+</p>
+</li><li>
+To force CBR video output:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
+</pre></td></tr></table>
+
+</li><li>
+The four options lmin, lmax, mblmin and mblmax use ’lambda’ units,
+but you may use the QP2LAMBDA constant to easily convert from ’q’ units:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-See-Also">8. See Also</a></h1>
+
+<p><a href="ffmpeg-all.html">ffmpeg-all</a>,
+<a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
+<a href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffmpeg.html#toc-Authors">9. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : ffplay </title>
+
+<meta name="description" content="ffplay Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : ffplay ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">ffplay Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Synopsis" href="#Synopsis">1. Synopsis</a></li>
+ <li><a name="toc-Description" href="#Description">2. Description</a></li>
+ <li><a name="toc-Options-10" href="#Options-10">3. Options</a>
+ <ul class="toc">
+ <li><a name="toc-Stream-specifiers-1" href="#Stream-specifiers-1">3.1 Stream specifiers</a></li>
+ <li><a name="toc-Generic-options" href="#Generic-options">3.2 Generic options</a></li>
+ <li><a name="toc-AVOptions" href="#AVOptions">3.3 AVOptions</a></li>
+ <li><a name="toc-Main-options" href="#Main-options">3.4 Main options</a></li>
+ <li><a name="toc-Advanced-options" href="#Advanced-options">3.5 Advanced options</a></li>
+ <li><a name="toc-While-playing" href="#While-playing">3.6 While playing</a></li>
+ </ul></li>
+ <li><a name="toc-Syntax" href="#Syntax">4. Syntax</a>
+ <ul class="toc">
+ <li><a name="toc-Quoting-and-escaping" href="#Quoting-and-escaping">4.1 Quoting and escaping</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-10" href="#Examples-10">4.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Date" href="#Date">4.2 Date</a></li>
+ <li><a name="toc-Time-duration" href="#Time-duration">4.3 Time duration</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-56" href="#Examples-56">4.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Video-size" href="#Video-size">4.4 Video size</a></li>
+ <li><a name="toc-Video-rate" href="#Video-rate">4.5 Video rate</a></li>
+ <li><a name="toc-Ratio" href="#Ratio">4.6 Ratio</a></li>
+ <li><a name="toc-Color" href="#Color">4.7 Color</a></li>
+ <li><a name="toc-Channel-Layout" href="#Channel-Layout">4.8 Channel Layout</a></li>
+ </ul></li>
+ <li><a name="toc-Expression-Evaluation" href="#Expression-Evaluation">5. Expression Evaluation</a></li>
+ <li><a name="toc-OpenCL-Options" href="#OpenCL-Options">6. OpenCL Options</a></li>
+ <li><a name="toc-Codec-Options" href="#Codec-Options">7. Codec Options</a></li>
+ <li><a name="toc-Decoders" href="#Decoders">8. Decoders</a></li>
+ <li><a name="toc-Video-Decoders" href="#Video-Decoders">9. Video Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-rawvideo-1" href="#rawvideo-1">9.1 rawvideo</a>
+ <ul class="toc">
+ <li><a name="toc-Options-4" href="#Options-4">9.1.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Decoders" href="#Audio-Decoders">10. Audio Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-ac3" href="#ac3">10.1 ac3</a>
+ <ul class="toc">
+ <li><a name="toc-AC_002d3-Decoder-Options" href="#AC_002d3-Decoder-Options">10.1.1 AC-3 Decoder Options</a></li>
+ </ul></li>
+ <li><a name="toc-ffwavesynth" href="#ffwavesynth">10.2 ffwavesynth</a></li>
+ <li><a name="toc-libcelt" href="#libcelt">10.3 libcelt</a></li>
+ <li><a name="toc-libgsm" href="#libgsm">10.4 libgsm</a></li>
+ <li><a name="toc-libilbc" href="#libilbc">10.5 libilbc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-12" href="#Options-12">10.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopencore_002damrnb" href="#libopencore_002damrnb">10.6 libopencore-amrnb</a></li>
+ <li><a name="toc-libopencore_002damrwb" href="#libopencore_002damrwb">10.7 libopencore-amrwb</a></li>
+ <li><a name="toc-libopus" href="#libopus">10.8 libopus</a></li>
+ </ul></li>
+ <li><a name="toc-Subtitles-Decoders" href="#Subtitles-Decoders">11. Subtitles Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-dvdsub" href="#dvdsub">11.1 dvdsub</a>
+ <ul class="toc">
+ <li><a name="toc-Options" href="#Options">11.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libzvbi_002dteletext" href="#libzvbi_002dteletext">11.2 libzvbi-teletext</a>
+ <ul class="toc">
+ <li><a name="toc-Options-8" href="#Options-8">11.2.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Bitstream-Filters" href="#Bitstream-Filters">12. Bitstream Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aac_005fadtstoasc" href="#aac_005fadtstoasc">12.1 aac_adtstoasc</a></li>
+ <li><a name="toc-chomp" href="#chomp">12.2 chomp</a></li>
+ <li><a name="toc-dump_005fextra" href="#dump_005fextra">12.3 dump_extra</a></li>
+ <li><a name="toc-h264_005fmp4toannexb" href="#h264_005fmp4toannexb">12.4 h264_mp4toannexb</a></li>
+ <li><a name="toc-imx_005fdump_005fheader" href="#imx_005fdump_005fheader">12.5 imx_dump_header</a></li>
+ <li><a name="toc-mjpeg2jpeg" href="#mjpeg2jpeg">12.6 mjpeg2jpeg</a></li>
+ <li><a name="toc-mjpega_005fdump_005fheader" href="#mjpega_005fdump_005fheader">12.7 mjpega_dump_header</a></li>
+ <li><a name="toc-movsub" href="#movsub">12.8 movsub</a></li>
+ <li><a name="toc-mp3_005fheader_005fdecompress" href="#mp3_005fheader_005fdecompress">12.9 mp3_header_decompress</a></li>
+ <li><a name="toc-noise" href="#noise">12.10 noise</a></li>
+ <li><a name="toc-remove_005fextra" href="#remove_005fextra">12.11 remove_extra</a></li>
+ </ul></li>
+ <li><a name="toc-Format-Options" href="#Format-Options">13. Format Options</a>
+ <ul class="toc">
+ <li><a name="toc-Format-stream-specifiers-1" href="#Format-stream-specifiers-1">13.1 Format stream specifiers</a></li>
+ </ul></li>
+ <li><a name="toc-Demuxers" href="#Demuxers">14. Demuxers</a>
+ <ul class="toc">
+ <li><a name="toc-applehttp" href="#applehttp">14.1 applehttp</a></li>
+ <li><a name="toc-asf" href="#asf">14.2 asf</a></li>
+ <li><a name="toc-concat-1" href="#concat-1">14.3 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax-1" href="#Syntax-1">14.3.1 Syntax</a></li>
+ <li><a name="toc-Options-11" href="#Options-11">14.3.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-flv" href="#flv">14.4 flv</a></li>
+ <li><a name="toc-libgme" href="#libgme">14.5 libgme</a></li>
+ <li><a name="toc-libquvi" href="#libquvi">14.6 libquvi</a></li>
+ <li><a name="toc-image2" href="#image2">14.7 image2</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-53" href="#Examples-53">14.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpegts" href="#mpegts">14.8 mpegts</a></li>
+ <li><a name="toc-rawvideo" href="#rawvideo">14.9 rawvideo</a></li>
+ <li><a name="toc-sbg" href="#sbg">14.10 sbg</a></li>
+ <li><a name="toc-tedcaptions" href="#tedcaptions">14.11 tedcaptions</a></li>
+ </ul></li>
+ <li><a name="toc-Metadata" href="#Metadata">15. Metadata</a></li>
+ <li><a name="toc-Protocols" href="#Protocols">16. Protocols</a>
+ <ul class="toc">
+ <li><a name="toc-bluray" href="#bluray">16.1 bluray</a></li>
+ <li><a name="toc-cache" href="#cache">16.2 cache</a></li>
+ <li><a name="toc-concat-3" href="#concat-3">16.3 concat</a></li>
+ <li><a name="toc-crypto" href="#crypto">16.4 crypto</a></li>
+ <li><a name="toc-data" href="#data">16.5 data</a></li>
+ <li><a name="toc-file" href="#file">16.6 file</a></li>
+ <li><a name="toc-ftp" href="#ftp">16.7 ftp</a></li>
+ <li><a name="toc-gopher" href="#gopher">16.8 gopher</a></li>
+ <li><a name="toc-hls" href="#hls">16.9 hls</a></li>
+ <li><a name="toc-http" href="#http">16.10 http</a>
+ <ul class="toc">
+ <li><a name="toc-HTTP-Cookies" href="#HTTP-Cookies">16.10.1 HTTP Cookies</a></li>
+ </ul></li>
+ <li><a name="toc-mmst" href="#mmst">16.11 mmst</a></li>
+ <li><a name="toc-mmsh" href="#mmsh">16.12 mmsh</a></li>
+ <li><a name="toc-md5" href="#md5">16.13 md5</a></li>
+ <li><a name="toc-pipe" href="#pipe">16.14 pipe</a></li>
+ <li><a name="toc-rtmp" href="#rtmp">16.15 rtmp</a></li>
+ <li><a name="toc-rtmpe" href="#rtmpe">16.16 rtmpe</a></li>
+ <li><a name="toc-rtmps" href="#rtmps">16.17 rtmps</a></li>
+ <li><a name="toc-rtmpt" href="#rtmpt">16.18 rtmpt</a></li>
+ <li><a name="toc-rtmpte" href="#rtmpte">16.19 rtmpte</a></li>
+ <li><a name="toc-rtmpts" href="#rtmpts">16.20 rtmpts</a></li>
+ <li><a name="toc-libssh" href="#libssh">16.21 libssh</a></li>
+ <li><a name="toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte" href="#librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">16.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></li>
+ <li><a name="toc-rtp" href="#rtp">16.23 rtp</a></li>
+ <li><a name="toc-rtsp" href="#rtsp">16.24 rtsp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-66" href="#Examples-66">16.24.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sap" href="#sap">16.25 sap</a>
+ <ul class="toc">
+ <li><a name="toc-Muxer" href="#Muxer">16.25.1 Muxer</a></li>
+ <li><a name="toc-Demuxer" href="#Demuxer">16.25.2 Demuxer</a></li>
+ </ul></li>
+ <li><a name="toc-sctp" href="#sctp">16.26 sctp</a></li>
+ <li><a name="toc-srtp" href="#srtp">16.27 srtp</a></li>
+ <li><a name="toc-tcp" href="#tcp">16.28 tcp</a></li>
+ <li><a name="toc-tls" href="#tls">16.29 tls</a></li>
+ <li><a name="toc-udp" href="#udp">16.30 udp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-6" href="#Examples-6">16.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-unix" href="#unix">16.31 unix</a></li>
+ </ul></li>
+ <li><a name="toc-Device-Options" href="#Device-Options">17. Device Options</a></li>
+ <li><a name="toc-Input-Devices" href="#Input-Devices">18. Input Devices</a>
+ <ul class="toc">
+ <li><a name="toc-alsa" href="#alsa">18.1 alsa</a></li>
+ <li><a name="toc-bktr" href="#bktr">18.2 bktr</a></li>
+ <li><a name="toc-dshow" href="#dshow">18.3 dshow</a>
+ <ul class="toc">
+ <li><a name="toc-Options-9" href="#Options-9">18.3.1 Options</a></li>
+ <li><a name="toc-Examples-7" href="#Examples-7">18.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dv1394" href="#dv1394">18.4 dv1394</a></li>
+ <li><a name="toc-fbdev" href="#fbdev">18.5 fbdev</a></li>
+ <li><a name="toc-iec61883" href="#iec61883">18.6 iec61883</a>
+ <ul class="toc">
+ <li><a name="toc-Options-7" href="#Options-7">18.6.1 Options</a></li>
+ <li><a name="toc-Examples-23" href="#Examples-23">18.6.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-jack" href="#jack">18.7 jack</a></li>
+ <li><a name="toc-lavfi" href="#lavfi">18.8 lavfi</a>
+ <ul class="toc">
+ <li><a name="toc-Options-14" href="#Options-14">18.8.1 Options</a></li>
+ <li><a name="toc-Examples-39" href="#Examples-39">18.8.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libdc1394" href="#libdc1394">18.9 libdc1394</a></li>
+ <li><a name="toc-openal" href="#openal">18.10 openal</a>
+ <ul class="toc">
+ <li><a name="toc-Options-5" href="#Options-5">18.10.1 Options</a></li>
+ <li><a name="toc-Examples-14" href="#Examples-14">18.10.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-oss" href="#oss">18.11 oss</a></li>
+ <li><a name="toc-pulse" href="#pulse">18.12 pulse</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">18.12.1 Options</a></li>
+ <li><a name="toc-Examples-71" href="#Examples-71">18.12.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sndio" href="#sndio">18.13 sndio</a></li>
+ <li><a name="toc-video4linux2_002c-v4l2" href="#video4linux2_002c-v4l2">18.14 video4linux2, v4l2</a>
+ <ul class="toc">
+ <li><a name="toc-Options-3" href="#Options-3">18.14.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-vfwcap" href="#vfwcap">18.15 vfwcap</a></li>
+ <li><a name="toc-x11grab" href="#x11grab">18.16 x11grab</a>
+ <ul class="toc">
+ <li><a name="toc-Options-2" href="#Options-2">18.16.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Resampler-Options" href="#Resampler-Options">19. Resampler Options</a></li>
+ <li><a name="toc-Scaler-Options" href="#Scaler-Options">20. Scaler Options</a></li>
+ <li><a name="toc-Filtering-Introduction" href="#Filtering-Introduction">21. Filtering Introduction</a></li>
+ <li><a name="toc-graph2dot" href="#graph2dot">22. graph2dot</a></li>
+ <li><a name="toc-Filtergraph-description" href="#Filtergraph-description">23. Filtergraph description</a>
+ <ul class="toc">
+ <li><a name="toc-Filtergraph-syntax-1" href="#Filtergraph-syntax-1">23.1 Filtergraph syntax</a></li>
+ <li><a name="toc-Notes-on-filtergraph-escaping" href="#Notes-on-filtergraph-escaping">23.2 Notes on filtergraph escaping</a></li>
+ </ul></li>
+ <li><a name="toc-Timeline-editing" href="#Timeline-editing">24. Timeline editing</a></li>
+ <li><a name="toc-Audio-Filters" href="#Audio-Filters">25. Audio Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aconvert" href="#aconvert">25.1 aconvert</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-47" href="#Examples-47">25.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-adelay" href="#adelay">25.2 adelay</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-31" href="#Examples-31">25.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aecho" href="#aecho">25.3 aecho</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-75" href="#Examples-75">25.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aeval" href="#aeval">25.4 aeval</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-82" href="#Examples-82">25.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-afade" href="#afade">25.5 afade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-33" href="#Examples-33">25.5.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aformat-1" href="#aformat-1">25.6 aformat</a></li>
+ <li><a name="toc-allpass" href="#allpass">25.7 allpass</a></li>
+ <li><a name="toc-amerge" href="#amerge">25.8 amerge</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-67" href="#Examples-67">25.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-amix" href="#amix">25.9 amix</a></li>
+ <li><a name="toc-anull" href="#anull">25.10 anull</a></li>
+ <li><a name="toc-apad" href="#apad">25.11 apad</a></li>
+ <li><a name="toc-aphaser" href="#aphaser">25.12 aphaser</a></li>
+ <li><a name="toc-aresample-1" href="#aresample-1">25.13 aresample</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-38" href="#Examples-38">25.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asetnsamples" href="#asetnsamples">25.14 asetnsamples</a></li>
+ <li><a name="toc-asetrate" href="#asetrate">25.15 asetrate</a></li>
+ <li><a name="toc-ashowinfo" href="#ashowinfo">25.16 ashowinfo</a></li>
+ <li><a name="toc-astats" href="#astats">25.17 astats</a></li>
+ <li><a name="toc-astreamsync" href="#astreamsync">25.18 astreamsync</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-41" href="#Examples-41">25.18.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asyncts" href="#asyncts">25.19 asyncts</a></li>
+ <li><a name="toc-atempo" href="#atempo">25.20 atempo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-81" href="#Examples-81">25.20.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-atrim" href="#atrim">25.21 atrim</a></li>
+ <li><a name="toc-bandpass" href="#bandpass">25.22 bandpass</a></li>
+ <li><a name="toc-bandreject" href="#bandreject">25.23 bandreject</a></li>
+ <li><a name="toc-bass" href="#bass">25.24 bass</a></li>
+ <li><a name="toc-biquad" href="#biquad">25.25 biquad</a></li>
+ <li><a name="toc-channelmap" href="#channelmap">25.26 channelmap</a></li>
+ <li><a name="toc-channelsplit" href="#channelsplit">25.27 channelsplit</a></li>
+ <li><a name="toc-compand" href="#compand">25.28 compand</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-21" href="#Examples-21">25.28.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-earwax" href="#earwax">25.29 earwax</a></li>
+ <li><a name="toc-equalizer" href="#equalizer">25.30 equalizer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-70" href="#Examples-70">25.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-highpass" href="#highpass">25.31 highpass</a></li>
+ <li><a name="toc-join" href="#join">25.32 join</a></li>
+ <li><a name="toc-ladspa" href="#ladspa">25.33 ladspa</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-45" href="#Examples-45">25.33.1 Examples</a></li>
+ <li><a name="toc-Commands-2" href="#Commands-2">25.33.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-lowpass" href="#lowpass">25.34 lowpass</a></li>
+ <li><a name="toc-pan" href="#pan">25.35 pan</a>
+ <ul class="toc">
+ <li><a name="toc-Mixing-examples" href="#Mixing-examples">25.35.1 Mixing examples</a></li>
+ <li><a name="toc-Remapping-examples" href="#Remapping-examples">25.35.2 Remapping examples</a></li>
+ </ul></li>
+ <li><a name="toc-replaygain" href="#replaygain">25.36 replaygain</a></li>
+ <li><a name="toc-resample" href="#resample">25.37 resample</a></li>
+ <li><a name="toc-silencedetect" href="#silencedetect">25.38 silencedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-8" href="#Examples-8">25.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-treble" href="#treble">25.39 treble</a></li>
+ <li><a name="toc-volume" href="#volume">25.40 volume</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-1" href="#Commands-1">25.40.1 Commands</a></li>
+ <li><a name="toc-Examples-22" href="#Examples-22">25.40.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-volumedetect" href="#volumedetect">25.41 volumedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-74" href="#Examples-74">25.41.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sources" href="#Audio-Sources">26. Audio Sources</a>
+ <ul class="toc">
+ <li><a name="toc-abuffer" href="#abuffer">26.1 abuffer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-83" href="#Examples-83">26.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aevalsrc" href="#aevalsrc">26.2 aevalsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-55" href="#Examples-55">26.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-anullsrc" href="#anullsrc">26.3 anullsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-40" href="#Examples-40">26.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-flite" href="#flite">26.4 flite</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-42" href="#Examples-42">26.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sine" href="#sine">26.5 sine</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-20" href="#Examples-20">26.5.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sinks" href="#Audio-Sinks">27. Audio Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-abuffersink" href="#abuffersink">27.1 abuffersink</a></li>
+ <li><a name="toc-anullsink" href="#anullsink">27.2 anullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Filters" href="#Video-Filters">28. Video Filters</a>
+ <ul class="toc">
+ <li><a name="toc-alphaextract" href="#alphaextract">28.1 alphaextract</a></li>
+ <li><a name="toc-alphamerge" href="#alphamerge">28.2 alphamerge</a></li>
+ <li><a name="toc-ass" href="#ass">28.3 ass</a></li>
+ <li><a name="toc-bbox" href="#bbox">28.4 bbox</a></li>
+ <li><a name="toc-blackdetect" href="#blackdetect">28.5 blackdetect</a></li>
+ <li><a name="toc-blackframe" href="#blackframe">28.6 blackframe</a></li>
+ <li><a name="toc-blend" href="#blend">28.7 blend</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-63" href="#Examples-63">28.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-boxblur" href="#boxblur">28.8 boxblur</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-36" href="#Examples-36">28.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorbalance" href="#colorbalance">28.9 colorbalance</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-78" href="#Examples-78">28.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorchannelmixer" href="#colorchannelmixer">28.10 colorchannelmixer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">28.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colormatrix" href="#colormatrix">28.11 colormatrix</a></li>
+ <li><a name="toc-copy" href="#copy">28.12 copy</a></li>
+ <li><a name="toc-crop" href="#crop">28.13 crop</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-73" href="#Examples-73">28.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-cropdetect" href="#cropdetect">28.14 cropdetect</a></li>
+ <li><a name="toc-curves-1" href="#curves-1">28.15 curves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-61" href="#Examples-61">28.15.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dctdnoiz" href="#dctdnoiz">28.16 dctdnoiz</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-25" href="#Examples-25">28.16.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-decimate-1" href="#decimate-1">28.17 decimate</a></li>
+ <li><a name="toc-dejudder" href="#dejudder">28.18 dejudder</a></li>
+ <li><a name="toc-delogo" href="#delogo">28.19 delogo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-37" href="#Examples-37">28.19.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-deshake" href="#deshake">28.20 deshake</a></li>
+ <li><a name="toc-drawbox" href="#drawbox">28.21 drawbox</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-50" href="#Examples-50">28.21.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawgrid" href="#drawgrid">28.22 drawgrid</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-30" href="#Examples-30">28.22.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawtext-1" href="#drawtext-1">28.23 drawtext</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax-2" href="#Syntax-2">28.23.1 Syntax</a></li>
+ <li><a name="toc-Text-expansion" href="#Text-expansion">28.23.2 Text expansion</a></li>
+ <li><a name="toc-Examples-62" href="#Examples-62">28.23.3 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-edgedetect" href="#edgedetect">28.24 edgedetect</a></li>
+ <li><a name="toc-extractplanes" href="#extractplanes">28.25 extractplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-26" href="#Examples-26">28.25.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-elbg" href="#elbg">28.26 elbg</a></li>
+ <li><a name="toc-fade" href="#fade">28.27 fade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-52" href="#Examples-52">28.27.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-field" href="#field">28.28 field</a></li>
+ <li><a name="toc-fieldmatch" href="#fieldmatch">28.29 fieldmatch</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn_002fu_002fb-meaning-1" href="#p_002fc_002fn_002fu_002fb-meaning-1">28.29.1 p/c/n/u/b meaning</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn" href="#p_002fc_002fn">28.29.1.1 p/c/n</a></li>
+ <li><a name="toc-u_002fb" href="#u_002fb">28.29.1.2 u/b</a></li>
+ </ul></li>
+ <li><a name="toc-Examples-16" href="#Examples-16">28.29.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fieldorder" href="#fieldorder">28.30 fieldorder</a></li>
+ <li><a name="toc-fifo" href="#fifo">28.31 fifo</a></li>
+ <li><a name="toc-format-1" href="#format-1">28.32 format</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-57" href="#Examples-57">28.32.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fps-1" href="#fps-1">28.33 fps</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-72" href="#Examples-72">28.33.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framepack" href="#framepack">28.34 framepack</a></li>
+ <li><a name="toc-framestep" href="#framestep">28.35 framestep</a></li>
+ <li><a name="toc-frei0r-1" href="#frei0r-1">28.36 frei0r</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-49" href="#Examples-49">28.36.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-geq" href="#geq">28.37 geq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-19" href="#Examples-19">28.37.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-gradfun" href="#gradfun">28.38 gradfun</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-24" href="#Examples-24">28.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-haldclut-1" href="#haldclut-1">28.39 haldclut</a>
+ <ul class="toc">
+ <li><a name="toc-Workflow-examples" href="#Workflow-examples">28.39.1 Workflow examples</a>
+ <ul class="toc">
+ <li><a name="toc-Hald-CLUT-video-stream" href="#Hald-CLUT-video-stream">28.39.1.1 Hald CLUT video stream</a></li>
+ <li><a name="toc-Hald-CLUT-with-preview" href="#Hald-CLUT-with-preview">28.39.1.2 Hald CLUT with preview</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-hflip" href="#hflip">28.40 hflip</a></li>
+ <li><a name="toc-histeq" href="#histeq">28.41 histeq</a></li>
+ <li><a name="toc-histogram" href="#histogram">28.42 histogram</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-58" href="#Examples-58">28.42.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-hqdn3d-1" href="#hqdn3d-1">28.43 hqdn3d</a></li>
+ <li><a name="toc-hue" href="#hue">28.44 hue</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-59" href="#Examples-59">28.44.1 Examples</a></li>
+ <li><a name="toc-Commands-4" href="#Commands-4">28.44.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-idet" href="#idet">28.45 idet</a></li>
+ <li><a name="toc-il" href="#il">28.46 il</a></li>
+ <li><a name="toc-interlace" href="#interlace">28.47 interlace</a></li>
+ <li><a name="toc-kerndeint" href="#kerndeint">28.48 kerndeint</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-13" href="#Examples-13">28.48.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-lut3d-1" href="#lut3d-1">28.49 lut3d</a></li>
+ <li><a name="toc-lut_002c-lutrgb_002c-lutyuv" href="#lut_002c-lutrgb_002c-lutyuv">28.50 lut, lutrgb, lutyuv</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-44" href="#Examples-44">28.50.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mergeplanes" href="#mergeplanes">28.51 mergeplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-4" href="#Examples-4">28.51.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mcdeint" href="#mcdeint">28.52 mcdeint</a></li>
+ <li><a name="toc-mp" href="#mp">28.53 mp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-84" href="#Examples-84">28.53.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpdecimate" href="#mpdecimate">28.54 mpdecimate</a></li>
+ <li><a name="toc-negate" href="#negate">28.55 negate</a></li>
+ <li><a name="toc-noformat" href="#noformat">28.56 noformat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-68" href="#Examples-68">28.56.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-noise-1" href="#noise-1">28.57 noise</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-80" href="#Examples-80">28.57.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-null" href="#null">28.58 null</a></li>
+ <li><a name="toc-ocv" href="#ocv">28.59 ocv</a>
+ <ul class="toc">
+ <li><a name="toc-dilate-1" href="#dilate-1">28.59.1 dilate</a></li>
+ <li><a name="toc-erode" href="#erode">28.59.2 erode</a></li>
+ <li><a name="toc-smooth" href="#smooth">28.59.3 smooth</a></li>
+ </ul></li>
+ <li><a name="toc-overlay-1" href="#overlay-1">28.60 overlay</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-3" href="#Commands-3">28.60.1 Commands</a></li>
+ <li><a name="toc-Examples-5" href="#Examples-5">28.60.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-owdenoise" href="#owdenoise">28.61 owdenoise</a></li>
+ <li><a name="toc-pad" href="#pad">28.62 pad</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-17" href="#Examples-17">28.62.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perspective" href="#perspective">28.63 perspective</a></li>
+ <li><a name="toc-phase" href="#phase">28.64 phase</a></li>
+ <li><a name="toc-pixdesctest" href="#pixdesctest">28.65 pixdesctest</a></li>
+ <li><a name="toc-pp" href="#pp">28.66 pp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-48" href="#Examples-48">28.66.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-psnr" href="#psnr">28.67 psnr</a></li>
+ <li><a name="toc-pullup-1" href="#pullup-1">28.68 pullup</a></li>
+ <li><a name="toc-removelogo" href="#removelogo">28.69 removelogo</a></li>
+ <li><a name="toc-rotate" href="#rotate">28.70 rotate</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-65" href="#Examples-65">28.70.1 Examples</a></li>
+ <li><a name="toc-Commands" href="#Commands">28.70.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-sab" href="#sab">28.71 sab</a></li>
+ <li><a name="toc-scale-1" href="#scale-1">28.72 scale</a>
+ <ul class="toc">
+ <li><a name="toc-Options-6" href="#Options-6">28.72.1 Options</a></li>
+ <li><a name="toc-Examples-18" href="#Examples-18">28.72.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-separatefields" href="#separatefields">28.73 separatefields</a></li>
+ <li><a name="toc-setdar_002c-setsar" href="#setdar_002c-setsar">28.74 setdar, setsar</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-76" href="#Examples-76">28.74.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setfield-1" href="#setfield-1">28.75 setfield</a></li>
+ <li><a name="toc-showinfo" href="#showinfo">28.76 showinfo</a></li>
+ <li><a name="toc-smartblur-1" href="#smartblur-1">28.77 smartblur</a></li>
+ <li><a name="toc-stereo3d" href="#stereo3d">28.78 stereo3d</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-64" href="#Examples-64">28.78.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-spp" href="#spp">28.79 spp</a></li>
+ <li><a name="toc-subtitles-1" href="#subtitles-1">28.80 subtitles</a></li>
+ <li><a name="toc-super2xsai" href="#super2xsai">28.81 super2xsai</a></li>
+ <li><a name="toc-swapuv" href="#swapuv">28.82 swapuv</a></li>
+ <li><a name="toc-telecine" href="#telecine">28.83 telecine</a></li>
+ <li><a name="toc-thumbnail" href="#thumbnail">28.84 thumbnail</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-54" href="#Examples-54">28.84.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tile" href="#tile">28.85 tile</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-51" href="#Examples-51">28.85.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tinterlace" href="#tinterlace">28.86 tinterlace</a></li>
+ <li><a name="toc-transpose" href="#transpose">28.87 transpose</a></li>
+ <li><a name="toc-trim" href="#trim">28.88 trim</a></li>
+ <li><a name="toc-unsharp" href="#unsharp">28.89 unsharp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-27" href="#Examples-27">28.89.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabdetect-1" href="#vidstabdetect-1">28.90 vidstabdetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-32" href="#Examples-32">28.90.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabtransform-1" href="#vidstabtransform-1">28.91 vidstabtransform</a>
+ <ul class="toc">
+ <li><a name="toc-Options-13" href="#Options-13">28.91.1 Options</a></li>
+ <li><a name="toc-Examples-29" href="#Examples-29">28.91.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vflip" href="#vflip">28.92 vflip</a></li>
+ <li><a name="toc-vignette" href="#vignette">28.93 vignette</a>
+ <ul class="toc">
+ <li><a name="toc-Expressions" href="#Expressions">28.93.1 Expressions</a></li>
+ <li><a name="toc-Examples-15" href="#Examples-15">28.93.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-w3fdif" href="#w3fdif">28.94 w3fdif</a></li>
+ <li><a name="toc-yadif-1" href="#yadif-1">28.95 yadif</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Sources" href="#Video-Sources">29. Video Sources</a>
+ <ul class="toc">
+ <li><a name="toc-buffer" href="#buffer">29.1 buffer</a></li>
+ <li><a name="toc-cellauto" href="#cellauto">29.2 cellauto</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-77" href="#Examples-77">29.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mandelbrot" href="#mandelbrot">29.3 mandelbrot</a></li>
+ <li><a name="toc-mptestsrc" href="#mptestsrc">29.4 mptestsrc</a></li>
+ <li><a name="toc-frei0r_005fsrc" href="#frei0r_005fsrc">29.5 frei0r_src</a></li>
+ <li><a name="toc-life" href="#life">29.6 life</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-69" href="#Examples-69">29.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc" href="#color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">29.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-5" href="#Commands-5">29.7.1 Commands</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Video-Sinks" href="#Video-Sinks">30. Video Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-buffersink" href="#buffersink">30.1 buffersink</a></li>
+ <li><a name="toc-nullsink" href="#nullsink">30.2 nullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Filters" href="#Multimedia-Filters">31. Multimedia Filters</a>
+ <ul class="toc">
+ <li><a name="toc-avectorscope" href="#avectorscope">31.1 avectorscope</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-2" href="#Examples-2">31.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-concat-2" href="#concat-2">31.2 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-28" href="#Examples-28">31.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-ebur128" href="#ebur128">31.3 ebur128</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-34" href="#Examples-34">31.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-interleave_002c-ainterleave" href="#interleave_002c-ainterleave">31.4 interleave, ainterleave</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-79" href="#Examples-79">31.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perms_002c-aperms" href="#perms_002c-aperms">31.5 perms, aperms</a></li>
+ <li><a name="toc-select_002c-aselect" href="#select_002c-aselect">31.6 select, aselect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-35" href="#Examples-35">31.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sendcmd_002c-asendcmd" href="#sendcmd_002c-asendcmd">31.7 sendcmd, asendcmd</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-syntax" href="#Commands-syntax">31.7.1 Commands syntax</a></li>
+ <li><a name="toc-Examples-60" href="#Examples-60">31.7.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setpts_002c-asetpts" href="#setpts_002c-asetpts">31.8 setpts, asetpts</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">31.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-settb_002c-asettb" href="#settb_002c-asettb">31.9 settb, asettb</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-43" href="#Examples-43">31.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showspectrum" href="#showspectrum">31.10 showspectrum</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-46" href="#Examples-46">31.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showwaves" href="#showwaves">31.11 showwaves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-9" href="#Examples-9">31.11.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-split_002c-asplit" href="#split_002c-asplit">31.12 split, asplit</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-11" href="#Examples-11">31.12.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-zmq_002c-azmq" href="#zmq_002c-azmq">31.13 zmq, azmq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-3" href="#Examples-3">31.13.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Sources" href="#Multimedia-Sources">32. Multimedia Sources</a>
+ <ul class="toc">
+ <li><a name="toc-amovie" href="#amovie">32.1 amovie</a></li>
+ <li><a name="toc-movie-1" href="#movie-1">32.2 movie</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-12" href="#Examples-12">32.2.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">33. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">34. Authors</a></li>
+</ul>
+</div>
+
+<a name="Synopsis"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Synopsis">1. Synopsis</a></h1>
+
+<p>ffplay [<var>options</var>] [‘<tt>input_file</tt>’]
+</p>
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Description">2. Description</a></h1>
+
+<p>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.
+</p>
+<a name="Options-10"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Options-10">3. Options</a></h1>
+
+<p>All the numerical options, if not specified otherwise, accept a string
+representing a number as input, which may be followed by one of the SI
+unit prefixes, for example: ’K’, ’M’, or ’G’.
+</p>
+<p>If ’i’ is appended to the SI unit prefix, the complete prefix will be
+interpreted as a unit prefix for binary multiplies, which are based on
+powers of 1024 instead of powers of 1000. Appending ’B’ to the SI unit
+prefix multiplies the value by 8. This allows using, for example:
+’KB’, ’MiB’, ’G’ and ’B’ as number suffixes.
+</p>
+<p>Options which do not take arguments are boolean options, and set the
+corresponding value to true. They can be set to false by prefixing
+the option name with "no". For example using "-nofoo"
+will set the boolean option with name "foo" to false.
+</p>
+<p><a name="Stream-specifiers"></a>
+</p><a name="Stream-specifiers-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Stream-specifiers-1">3.1 Stream specifiers</a></h2>
+<p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
+are used to precisely specify which stream(s) a given option belongs to.
+</p>
+<p>A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. <code>-codec:a:1 ac3</code> contains the
+<code>a:1</code> stream specifier, which matches the second audio stream. Therefore, it
+would select the ac3 codec for the second audio stream.
+</p>
+<p>A stream specifier can match several streams, so that the option is applied to all
+of them. E.g. the stream specifier in <code>-b:a 128k</code> matches all audio
+streams.
+</p>
+<p>An empty stream specifier matches all streams. For example, <code>-codec copy</code>
+or <code>-codec: copy</code> would copy all the streams without reencoding.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index. E.g. <code>-threads:1 4</code> would set the
+thread count for the second stream to 4.
+</p></dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle,
+’d’ for data, and ’t’ for attachments. If <var>stream_index</var> is given, then it matches
+stream number <var>stream_index</var> of this type. Otherwise, it matches all
+streams of this type.
+</p></dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number <var>stream_index</var>
+in the program with the id <var>program_id</var>. Otherwise, it matches all streams in the
+program.
+</p></dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<a name="Generic-options"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Generic-options">3.2 Generic options</a></h2>
+
+<p>These options are shared amongst the ff* tools.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-L</samp>’</dt>
+<dd><p>Show license.
+</p>
+</dd>
+<dt> ‘<samp>-h, -?, -help, --help [<var>arg</var>]</samp>’</dt>
+<dd><p>Show help. An optional parameter may be specified to print help about a specific
+item. If no argument is specified, only basic (non advanced) tool
+options are shown.
+</p>
+<p>Possible values of <var>arg</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>long</samp>’</dt>
+<dd><p>Print advanced tool options in addition to the basic tool options.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Print complete list of options, including shared and private options
+for encoders, decoders, demuxers, muxers, filters, etc.
+</p>
+</dd>
+<dt> ‘<samp>decoder=<var>decoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the decoder named <var>decoder_name</var>. Use the
+‘<samp>-decoders</samp>’ option to get a list of all decoders.
+</p>
+</dd>
+<dt> ‘<samp>encoder=<var>encoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the encoder named <var>encoder_name</var>. Use the
+‘<samp>-encoders</samp>’ option to get a list of all encoders.
+</p>
+</dd>
+<dt> ‘<samp>demuxer=<var>demuxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the demuxer named <var>demuxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all demuxers and muxers.
+</p>
+</dd>
+<dt> ‘<samp>muxer=<var>muxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the muxer named <var>muxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all muxers and demuxers.
+</p>
+</dd>
+<dt> ‘<samp>filter=<var>filter_name</var></samp>’</dt>
+<dd><p>Print detailed information about the filter name <var>filter_name</var>. Use the
+‘<samp>-filters</samp>’ option to get a list of all filters.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-version</samp>’</dt>
+<dd><p>Show version.
+</p>
+</dd>
+<dt> ‘<samp>-formats</samp>’</dt>
+<dd><p>Show available formats.
+</p>
+</dd>
+<dt> ‘<samp>-codecs</samp>’</dt>
+<dd><p>Show all codecs known to libavcodec.
+</p>
+<p>Note that the term ’codec’ is used throughout this documentation as a shortcut
+for what is more correctly called a media bitstream format.
+</p>
+</dd>
+<dt> ‘<samp>-decoders</samp>’</dt>
+<dd><p>Show available decoders.
+</p>
+</dd>
+<dt> ‘<samp>-encoders</samp>’</dt>
+<dd><p>Show all available encoders.
+</p>
+</dd>
+<dt> ‘<samp>-bsfs</samp>’</dt>
+<dd><p>Show available bitstream filters.
+</p>
+</dd>
+<dt> ‘<samp>-protocols</samp>’</dt>
+<dd><p>Show available protocols.
+</p>
+</dd>
+<dt> ‘<samp>-filters</samp>’</dt>
+<dd><p>Show available libavfilter filters.
+</p>
+</dd>
+<dt> ‘<samp>-pix_fmts</samp>’</dt>
+<dd><p>Show available pixel formats.
+</p>
+</dd>
+<dt> ‘<samp>-sample_fmts</samp>’</dt>
+<dd><p>Show available sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-layouts</samp>’</dt>
+<dd><p>Show channel names and standard channel layouts.
+</p>
+</dd>
+<dt> ‘<samp>-colors</samp>’</dt>
+<dd><p>Show recognized color names.
+</p>
+</dd>
+<dt> ‘<samp>-loglevel [repeat+]<var>loglevel</var> | -v [repeat+]<var>loglevel</var></samp>’</dt>
+<dd><p>Set the logging level used by the library.
+Adding "repeat+" indicates that repeated log output should not be compressed
+to the first line and the "Last message repeated n times" line will be
+omitted. "repeat" can also be used alone.
+If "repeat" is used alone, and with no prior loglevel set, the default
+loglevel will be used. If multiple loglevel parameters are given, using
+’repeat’ will not change the loglevel.
+<var>loglevel</var> is a number or a string containing one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>quiet</samp>’</dt>
+<dd><p>Show nothing at all; be silent.
+</p></dd>
+<dt> ‘<samp>panic</samp>’</dt>
+<dd><p>Only show fatal errors which could lead the process to crash, such as
+and assert failure. This is not currently used for anything.
+</p></dd>
+<dt> ‘<samp>fatal</samp>’</dt>
+<dd><p>Only show fatal errors. These are errors after which the process absolutely
+cannot continue after.
+</p></dd>
+<dt> ‘<samp>error</samp>’</dt>
+<dd><p>Show all errors, including ones which can be recovered from.
+</p></dd>
+<dt> ‘<samp>warning</samp>’</dt>
+<dd><p>Show all warnings and errors. Any message related to possibly
+incorrect or unexpected events will be shown.
+</p></dd>
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>Show informative messages during processing. This is in addition to
+warnings and errors. This is the default value.
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>Same as <code>info</code>, except more verbose.
+</p></dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Show everything, including debugging information.
+</p></dd>
+</dl>
+
+<p>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
+<code>AV_LOG_FORCE_NOCOLOR</code> or <code>NO_COLOR</code>, or can be forced setting
+the environment variable <code>AV_LOG_FORCE_COLOR</code>.
+The use of the environment variable <code>NO_COLOR</code> is deprecated and
+will be dropped in a following FFmpeg version.
+</p>
+</dd>
+<dt> ‘<samp>-report</samp>’</dt>
+<dd><p>Dump full command line and console output to a file named
+<code><var>program</var>-<var>YYYYMMDD</var>-<var>HHMMSS</var>.log</code> in the current
+directory.
+This file can be useful for bug reports.
+It also implies <code>-loglevel verbose</code>.
+</p>
+<p>Setting the environment variable <code>FFREPORT</code> to any value has the
+same effect. If the value is a ’:’-separated key=value sequence, these
+options will affect the report; options values must be escaped if they
+contain special characters or the options delimiter ’:’ (see the
+“Quoting and escaping” section in the ffmpeg-utils manual). The
+following option is recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>set the file name to use for the report; <code>%p</code> is expanded to the name
+of the program, <code>%t</code> is expanded to a timestamp, <code>%%</code> is expanded
+to a plain <code>%</code>
+</p></dd>
+</dl>
+
+<p>Errors in parsing the environment variable are not fatal, and will not
+appear in the report.
+</p>
+</dd>
+<dt> ‘<samp>-hide_banner</samp>’</dt>
+<dd><p>Suppress printing banner.
+</p>
+<p>All FFmpeg tools will normally show a copyright notice, build options
+and library versions. This option can be used to suppress printing
+this information.
+</p>
+</dd>
+<dt> ‘<samp>-cpuflags flags (<em>global</em>)</samp>’</dt>
+<dd><p>Allows setting and clearing cpu flags. This option is intended
+for testing. Do not use it unless you know what you’re doing.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -cpuflags -sse+mmx ...
+ffmpeg -cpuflags mmx ...
+ffmpeg -cpuflags 0 ...
+</pre></td></tr></table>
+<p>Possible flags for this option are:
+</p><dl compact="compact">
+<dt> ‘<samp>x86</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>mmxext</samp>’</dt>
+<dt> ‘<samp>sse</samp>’</dt>
+<dt> ‘<samp>sse2</samp>’</dt>
+<dt> ‘<samp>sse2slow</samp>’</dt>
+<dt> ‘<samp>sse3</samp>’</dt>
+<dt> ‘<samp>sse3slow</samp>’</dt>
+<dt> ‘<samp>ssse3</samp>’</dt>
+<dt> ‘<samp>atom</samp>’</dt>
+<dt> ‘<samp>sse4.1</samp>’</dt>
+<dt> ‘<samp>sse4.2</samp>’</dt>
+<dt> ‘<samp>avx</samp>’</dt>
+<dt> ‘<samp>xop</samp>’</dt>
+<dt> ‘<samp>fma4</samp>’</dt>
+<dt> ‘<samp>3dnow</samp>’</dt>
+<dt> ‘<samp>3dnowext</samp>’</dt>
+<dt> ‘<samp>cmov</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>ARM</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>armv5te</samp>’</dt>
+<dt> ‘<samp>armv6</samp>’</dt>
+<dt> ‘<samp>armv6t2</samp>’</dt>
+<dt> ‘<samp>vfp</samp>’</dt>
+<dt> ‘<samp>vfpv3</samp>’</dt>
+<dt> ‘<samp>neon</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>PowerPC</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>altivec</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>Specific Processors</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>pentium2</samp>’</dt>
+<dt> ‘<samp>pentium3</samp>’</dt>
+<dt> ‘<samp>pentium4</samp>’</dt>
+<dt> ‘<samp>k6</samp>’</dt>
+<dt> ‘<samp>k62</samp>’</dt>
+<dt> ‘<samp>athlon</samp>’</dt>
+<dt> ‘<samp>athlonxp</samp>’</dt>
+<dt> ‘<samp>k8</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-opencl_bench</samp>’</dt>
+<dd><p>Benchmark all available OpenCL devices and show the results. This option
+is only available when FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+</dd>
+<dt> ‘<samp>-opencl_options options (<em>global</em>)</samp>’</dt>
+<dd><p>Set OpenCL environment options. This option is only available when
+FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+<p><var>options</var> must be a list of <var>key</var>=<var>value</var> option pairs
+separated by ’:’. See the “OpenCL Options” section in the
+ffmpeg-utils manual for the list of supported options.
+</p></dd>
+</dl>
+
+<a name="AVOptions"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-AVOptions">3.3 AVOptions</a></h2>
+
+<p>These options are provided directly by the libavformat, libavdevice and
+libavcodec libraries. To see the list of available AVOptions, use the
+‘<samp>-help</samp>’ option. They are separated into two categories:
+</p><dl compact="compact">
+<dt> ‘<samp>generic</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>private</samp>’</dt>
+<dd><p>These options are specific to the given container, device or codec. Private
+options are listed under their corresponding containers/devices/codecs.
+</p></dd>
+</dl>
+
+<p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
+an MP3 file, use the ‘<samp>id3v2_version</samp>’ private option of the MP3
+muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.flac -id3v2_version 3 out.mp3
+</pre></td></tr></table>
+
+<p>All codec AVOptions are per-stream, and thus a stream specifier
+should be attached to them.
+</p>
+<p>Note: the ‘<samp>-nooption</samp>’ syntax cannot be used for boolean
+AVOptions, use ‘<samp>-option 0</samp>’/‘<samp>-option 1</samp>’.
+</p>
+<p>Note: the 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.
+</p>
+<a name="Main-options"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Main-options">3.4 Main options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-x <var>width</var></samp>’</dt>
+<dd><p>Force displayed width.
+</p></dd>
+<dt> ‘<samp>-y <var>height</var></samp>’</dt>
+<dd><p>Force displayed height.
+</p></dd>
+<dt> ‘<samp>-s <var>size</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-an</samp>’</dt>
+<dd><p>Disable audio.
+</p></dd>
+<dt> ‘<samp>-vn</samp>’</dt>
+<dd><p>Disable video.
+</p></dd>
+<dt> ‘<samp>-ss <var>pos</var></samp>’</dt>
+<dd><p>Seek to a given position in seconds.
+</p></dd>
+<dt> ‘<samp>-t <var>duration</var></samp>’</dt>
+<dd><p>play <duration> seconds of audio/video
+</p></dd>
+<dt> ‘<samp>-bytes</samp>’</dt>
+<dd><p>Seek by bytes.
+</p></dd>
+<dt> ‘<samp>-nodisp</samp>’</dt>
+<dd><p>Disable graphical display.
+</p></dd>
+<dt> ‘<samp>-f <var>fmt</var></samp>’</dt>
+<dd><p>Force format.
+</p></dd>
+<dt> ‘<samp>-window_title <var>title</var></samp>’</dt>
+<dd><p>Set window title (default is the input filename).
+</p></dd>
+<dt> ‘<samp>-loop <var>number</var></samp>’</dt>
+<dd><p>Loops movie playback <number> times. 0 means forever.
+</p></dd>
+<dt> ‘<samp>-showmode <var>mode</var></samp>’</dt>
+<dd><p>Set the show mode to use.
+Available values for <var>mode</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>0, video</samp>’</dt>
+<dd><p>show video
+</p></dd>
+<dt> ‘<samp>1, waves</samp>’</dt>
+<dd><p>show audio waves
+</p></dd>
+<dt> ‘<samp>2, rdft</samp>’</dt>
+<dd><p>show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform)
+</p></dd>
+</dl>
+
+<p>Default value is "video", if video is not present or cannot be played
+"rdft" is automatically selected.
+</p>
+<p>You can interactively cycle through the available show modes by
+pressing the key <w>.
+</p>
+</dd>
+<dt> ‘<samp>-vf <var>filtergraph</var></samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the video stream.
+</p>
+<p><var>filtergraph</var> is a description of the filtergraph to apply to
+the stream, and must have a single video input and a single video
+output. In the filtergraph, the input is associated to the label
+<code>in</code>, and the output to the label <code>out</code>. See the
+ffmpeg-filters manual for more information about the filtergraph
+syntax.
+</p>
+</dd>
+<dt> ‘<samp>-af <var>filtergraph</var></samp>’</dt>
+<dd><p><var>filtergraph</var> is a description of the filtergraph to apply to
+the input audio.
+Use the option "-filters" to show all the available filters (including
+sources and sinks).
+</p>
+</dd>
+<dt> ‘<samp>-i <var>input_file</var></samp>’</dt>
+<dd><p>Read <var>input_file</var>.
+</p></dd>
+</dl>
+
+<a name="Advanced-options"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Advanced-options">3.5 Advanced options</a></h2>
+<dl compact="compact">
+<dt> ‘<samp>-pix_fmt <var>format</var></samp>’</dt>
+<dd><p>Set pixel format.
+This option has been deprecated in favor of private options, try -pixel_format.
+</p>
+</dd>
+<dt> ‘<samp>-stats</samp>’</dt>
+<dd><p>Print several playback statistics, in particular show the stream
+duration, the codec parameters, the current position in the stream and
+the audio/video synchronisation drift. It is on by default, to
+explicitly disable it you need to specify <code>-nostats</code>.
+</p>
+</dd>
+<dt> ‘<samp>-bug</samp>’</dt>
+<dd><p>Work around bugs.
+</p></dd>
+<dt> ‘<samp>-fast</samp>’</dt>
+<dd><p>Non-spec-compliant optimizations.
+</p></dd>
+<dt> ‘<samp>-genpts</samp>’</dt>
+<dd><p>Generate pts.
+</p></dd>
+<dt> ‘<samp>-rtp_tcp</samp>’</dt>
+<dd><p>Force RTP/TCP protocol usage instead of RTP/UDP. It is only meaningful
+if you are streaming with the RTSP protocol.
+</p></dd>
+<dt> ‘<samp>-sync <var>type</var></samp>’</dt>
+<dd><p>Set the master clock to audio (<code>type=audio</code>), video
+(<code>type=video</code>) or external (<code>type=ext</code>). 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.
+</p></dd>
+<dt> ‘<samp>-threads <var>count</var></samp>’</dt>
+<dd><p>Set the thread count.
+</p></dd>
+<dt> ‘<samp>-ast <var>audio_stream_number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-vst <var>video_stream_number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-sst <var>subtitle_stream_number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-autoexit</samp>’</dt>
+<dd><p>Exit when video is done playing.
+</p></dd>
+<dt> ‘<samp>-exitonkeydown</samp>’</dt>
+<dd><p>Exit if any key is pressed.
+</p></dd>
+<dt> ‘<samp>-exitonmousedown</samp>’</dt>
+<dd><p>Exit if any mouse button is pressed.
+</p>
+</dd>
+<dt> ‘<samp>-codec:<var>media_specifier</var> <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific decoder implementation for the stream identified by
+<var>media_specifier</var>, which can assume the values <code>a</code> (audio),
+<code>v</code> (video), and <code>s</code> subtitle.
+</p>
+</dd>
+<dt> ‘<samp>-acodec <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific audio decoder.
+</p>
+</dd>
+<dt> ‘<samp>-vcodec <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific video decoder.
+</p>
+</dd>
+<dt> ‘<samp>-scodec <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific subtitle decoder.
+</p></dd>
+</dl>
+
+<a name="While-playing"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-While-playing">3.6 While playing</a></h2>
+
+<dl compact="compact">
+<dt> <q, ESC></dt>
+<dd><p>Quit.
+</p>
+</dd>
+<dt> <f></dt>
+<dd><p>Toggle full screen.
+</p>
+</dd>
+<dt> <p, SPC></dt>
+<dd><p>Pause.
+</p>
+</dd>
+<dt> <a></dt>
+<dd><p>Cycle audio channel in the curret program.
+</p>
+</dd>
+<dt> <v></dt>
+<dd><p>Cycle video channel.
+</p>
+</dd>
+<dt> <t></dt>
+<dd><p>Cycle subtitle channel in the current program.
+</p>
+</dd>
+<dt> <c></dt>
+<dd><p>Cycle program.
+</p>
+</dd>
+<dt> <w></dt>
+<dd><p>Show audio waves.
+</p>
+</dd>
+<dt> <s></dt>
+<dd><p>Step to the next frame.
+</p>
+<p>Pause if the stream is not already paused, step to the next video
+frame, and pause.
+</p>
+</dd>
+<dt> <left/right></dt>
+<dd><p>Seek backward/forward 10 seconds.
+</p>
+</dd>
+<dt> <down/up></dt>
+<dd><p>Seek backward/forward 1 minute.
+</p>
+</dd>
+<dt> <page down/page up></dt>
+<dd><p>Seek to the previous/next chapter.
+or if there are no chapters
+Seek backward/forward 10 minutes.
+</p>
+</dd>
+<dt> <mouse click></dt>
+<dd><p>Seek to percentage in file corresponding to fraction of width.
+</p>
+</dd>
+</dl>
+
+
+<a name="Syntax"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Syntax">4. Syntax</a></h1>
+
+<p>This section documents the syntax and formats employed by the FFmpeg
+libraries and tools.
+</p>
+<p><a name="quoting_005fand_005fescaping"></a>
+</p><a name="Quoting-and-escaping"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Quoting-and-escaping">4.1 Quoting and escaping</a></h2>
+
+<p>FFmpeg adopts the following quoting and escaping mechanism, unless
+explicitly specified. The following rules are applied:
+</p>
+<ul>
+<li>
+<code>'</code> and <code>\</code> are special characters (respectively used for
+quoting and escaping). In addition to them, there might be other
+special characters depending on the specific syntax where the escaping
+and quoting are employed.
+
+</li><li>
+A special character is escaped by prefixing it with a ’\’.
+
+</li><li>
+All characters enclosed between ” are included literally in the
+parsed string. The quote character <code>'</code> itself cannot be quoted,
+so you may need to close the quote and escape it.
+
+</li><li>
+Leading and trailing whitespaces, unless escaped or quoted, are
+removed from the parsed string.
+</li></ul>
+
+<p>Note that you may need to add a second level of escaping when using
+the command line or a script, which depends on the syntax of the
+adopted shell language.
+</p>
+<p>The function <code>av_get_token</code> defined in
+‘<tt>libavutil/avstring.h</tt>’ can be used to parse a token quoted or
+escaped according to the rules defined above.
+</p>
+<p>The tool ‘<tt>tools/ffescape</tt>’ in the FFmpeg source tree can be used
+to automatically quote or escape a string in a script.
+</p>
+<a name="Examples-10"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-10">4.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Escape the string <code>Crime d'Amour</code> containing the <code>'</code> special
+character:
+<table><tr><td> </td><td><pre class="example">Crime d\'Amour
+</pre></td></tr></table>
+
+</li><li>
+The string above contains a quote, so the <code>'</code> needs to be escaped
+when quoting it:
+<table><tr><td> </td><td><pre class="example">'Crime d'\''Amour'
+</pre></td></tr></table>
+
+</li><li>
+Include leading or trailing whitespaces using quoting:
+<table><tr><td> </td><td><pre class="example">' this string starts and ends with whitespaces '
+</pre></td></tr></table>
+
+</li><li>
+Escaping and quoting can be mixed together:
+<table><tr><td> </td><td><pre class="example">' The string '\'string\'' is a string '
+</pre></td></tr></table>
+
+</li><li>
+To include a literal <code>\</code> you can use either escaping or quoting:
+<table><tr><td> </td><td><pre class="example">'c:\foo' can be written as c:\\foo
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="date-syntax"></a>
+</p><a name="Date"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Date">4.2 Date</a></h2>
+
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
+now
+</pre></td></tr></table>
+
+<p>If the value is "now" it takes the current time.
+</p>
+<p>Time is local time unless 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.
+</p>
+<p><a name="time-duration-syntax"></a>
+</p><a name="Time-duration"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Time-duration">4.3 Time duration</a></h2>
+
+<p>There are two accepted syntaxes for expressing time duration.
+</p>
+<table><tr><td> </td><td><pre class="example">[-][<var>HH</var>:]<var>MM</var>:<var>SS</var>[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>HH</var> expresses the number of hours, <var>MM</var> the number of minutes
+for a maximum of 2 digits, and <var>SS</var> the number of seconds for a
+maximum of 2 digits. The <var>m</var> at the end expresses decimal value for
+<var>SS</var>.
+</p>
+<p><em>or</em>
+</p>
+<table><tr><td> </td><td><pre class="example">[-]<var>S</var>+[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>S</var> expresses the number of seconds, with the optional decimal part
+<var>m</var>.
+</p>
+<p>In both expressions, the optional ‘<samp>-</samp>’ indicates negative duration.
+</p>
+<a name="Examples-56"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-56">4.3.1 Examples</a></h3>
+
+<p>The following examples are all valid time duration:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>55</samp>’</dt>
+<dd><p>55 seconds
+</p>
+</dd>
+<dt> ‘<samp>12:03:45</samp>’</dt>
+<dd><p>12 hours, 03 minutes and 45 seconds
+</p>
+</dd>
+<dt> ‘<samp>23.189</samp>’</dt>
+<dd><p>23.189 seconds
+</p></dd>
+</dl>
+
+<p><a name="video-size-syntax"></a>
+</p><a name="Video-size"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Video-size">4.4 Video size</a></h2>
+<p>Specify the size of the sourced video, it may be a string of the form
+<var>width</var>x<var>height</var>, or the name of a size abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>720x480
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>720x576
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>768x576
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>sqcif</samp>’</dt>
+<dd><p>128x96
+</p></dd>
+<dt> ‘<samp>qcif</samp>’</dt>
+<dd><p>176x144
+</p></dd>
+<dt> ‘<samp>cif</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>4cif</samp>’</dt>
+<dd><p>704x576
+</p></dd>
+<dt> ‘<samp>16cif</samp>’</dt>
+<dd><p>1408x1152
+</p></dd>
+<dt> ‘<samp>qqvga</samp>’</dt>
+<dd><p>160x120
+</p></dd>
+<dt> ‘<samp>qvga</samp>’</dt>
+<dd><p>320x240
+</p></dd>
+<dt> ‘<samp>vga</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>svga</samp>’</dt>
+<dd><p>800x600
+</p></dd>
+<dt> ‘<samp>xga</samp>’</dt>
+<dd><p>1024x768
+</p></dd>
+<dt> ‘<samp>uxga</samp>’</dt>
+<dd><p>1600x1200
+</p></dd>
+<dt> ‘<samp>qxga</samp>’</dt>
+<dd><p>2048x1536
+</p></dd>
+<dt> ‘<samp>sxga</samp>’</dt>
+<dd><p>1280x1024
+</p></dd>
+<dt> ‘<samp>qsxga</samp>’</dt>
+<dd><p>2560x2048
+</p></dd>
+<dt> ‘<samp>hsxga</samp>’</dt>
+<dd><p>5120x4096
+</p></dd>
+<dt> ‘<samp>wvga</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>wxga</samp>’</dt>
+<dd><p>1366x768
+</p></dd>
+<dt> ‘<samp>wsxga</samp>’</dt>
+<dd><p>1600x1024
+</p></dd>
+<dt> ‘<samp>wuxga</samp>’</dt>
+<dd><p>1920x1200
+</p></dd>
+<dt> ‘<samp>woxga</samp>’</dt>
+<dd><p>2560x1600
+</p></dd>
+<dt> ‘<samp>wqsxga</samp>’</dt>
+<dd><p>3200x2048
+</p></dd>
+<dt> ‘<samp>wquxga</samp>’</dt>
+<dd><p>3840x2400
+</p></dd>
+<dt> ‘<samp>whsxga</samp>’</dt>
+<dd><p>6400x4096
+</p></dd>
+<dt> ‘<samp>whuxga</samp>’</dt>
+<dd><p>7680x4800
+</p></dd>
+<dt> ‘<samp>cga</samp>’</dt>
+<dd><p>320x200
+</p></dd>
+<dt> ‘<samp>ega</samp>’</dt>
+<dd><p>640x350
+</p></dd>
+<dt> ‘<samp>hd480</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>hd720</samp>’</dt>
+<dd><p>1280x720
+</p></dd>
+<dt> ‘<samp>hd1080</samp>’</dt>
+<dd><p>1920x1080
+</p></dd>
+<dt> ‘<samp>2k</samp>’</dt>
+<dd><p>2048x1080
+</p></dd>
+<dt> ‘<samp>2kflat</samp>’</dt>
+<dd><p>1998x1080
+</p></dd>
+<dt> ‘<samp>2kscope</samp>’</dt>
+<dd><p>2048x858
+</p></dd>
+<dt> ‘<samp>4k</samp>’</dt>
+<dd><p>4096x2160
+</p></dd>
+<dt> ‘<samp>4kflat</samp>’</dt>
+<dd><p>3996x2160
+</p></dd>
+<dt> ‘<samp>4kscope</samp>’</dt>
+<dd><p>4096x1716
+</p></dd>
+<dt> ‘<samp>nhd</samp>’</dt>
+<dd><p>640x360
+</p></dd>
+<dt> ‘<samp>hqvga</samp>’</dt>
+<dd><p>240x160
+</p></dd>
+<dt> ‘<samp>wqvga</samp>’</dt>
+<dd><p>400x240
+</p></dd>
+<dt> ‘<samp>fwqvga</samp>’</dt>
+<dd><p>432x240
+</p></dd>
+<dt> ‘<samp>hvga</samp>’</dt>
+<dd><p>480x320
+</p></dd>
+<dt> ‘<samp>qhd</samp>’</dt>
+<dd><p>960x540
+</p></dd>
+</dl>
+
+<p><a name="video-rate-syntax"></a>
+</p><a name="Video-rate"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Video-rate">4.5 Video rate</a></h2>
+
+<p>Specify the frame rate of a video, expressed as the number of frames
+generated per second. It has to be a string in the format
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>24/1
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>24000/1001
+</p></dd>
+</dl>
+
+<p><a name="ratio-syntax"></a>
+</p><a name="Ratio"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Ratio">4.6 Ratio</a></h2>
+
+<p>A ratio can be expressed as an expression, or in the form
+<var>numerator</var>:<var>denominator</var>.
+</p>
+<p>Note that a ratio with infinite (1/0) or negative value is
+considered valid, so you should check on the returned value if you
+want to exclude those values.
+</p>
+<p>The undefined value can be expressed using the "0:0" string.
+</p>
+<p><a name="color-syntax"></a>
+</p><a name="Color"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Color">4.7 Color</a></h2>
+
+<p>It can be the name of a color as defined below (case insensitive match) or a
+<code>[0x|#]RRGGBB[AA]</code> sequence, possibly followed by @ and a string
+representing the alpha component.
+</p>
+<p>The alpha component may be a string composed by "0x" followed by an
+hexadecimal number or a decimal number between 0.0 and 1.0, which
+represents the opacity value (‘<samp>0x00</samp>’ or ‘<samp>0.0</samp>’ means completely
+transparent, ‘<samp>0xff</samp>’ or ‘<samp>1.0</samp>’ completely opaque). If the alpha
+component is not specified then ‘<samp>0xff</samp>’ is assumed.
+</p>
+<p>The string ‘<samp>random</samp>’ will result in a random color.
+</p>
+<p>The following names of colors are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>AliceBlue</samp>’</dt>
+<dd><p>0xF0F8FF
+</p></dd>
+<dt> ‘<samp>AntiqueWhite</samp>’</dt>
+<dd><p>0xFAEBD7
+</p></dd>
+<dt> ‘<samp>Aqua</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>Aquamarine</samp>’</dt>
+<dd><p>0x7FFFD4
+</p></dd>
+<dt> ‘<samp>Azure</samp>’</dt>
+<dd><p>0xF0FFFF
+</p></dd>
+<dt> ‘<samp>Beige</samp>’</dt>
+<dd><p>0xF5F5DC
+</p></dd>
+<dt> ‘<samp>Bisque</samp>’</dt>
+<dd><p>0xFFE4C4
+</p></dd>
+<dt> ‘<samp>Black</samp>’</dt>
+<dd><p>0x000000
+</p></dd>
+<dt> ‘<samp>BlanchedAlmond</samp>’</dt>
+<dd><p>0xFFEBCD
+</p></dd>
+<dt> ‘<samp>Blue</samp>’</dt>
+<dd><p>0x0000FF
+</p></dd>
+<dt> ‘<samp>BlueViolet</samp>’</dt>
+<dd><p>0x8A2BE2
+</p></dd>
+<dt> ‘<samp>Brown</samp>’</dt>
+<dd><p>0xA52A2A
+</p></dd>
+<dt> ‘<samp>BurlyWood</samp>’</dt>
+<dd><p>0xDEB887
+</p></dd>
+<dt> ‘<samp>CadetBlue</samp>’</dt>
+<dd><p>0x5F9EA0
+</p></dd>
+<dt> ‘<samp>Chartreuse</samp>’</dt>
+<dd><p>0x7FFF00
+</p></dd>
+<dt> ‘<samp>Chocolate</samp>’</dt>
+<dd><p>0xD2691E
+</p></dd>
+<dt> ‘<samp>Coral</samp>’</dt>
+<dd><p>0xFF7F50
+</p></dd>
+<dt> ‘<samp>CornflowerBlue</samp>’</dt>
+<dd><p>0x6495ED
+</p></dd>
+<dt> ‘<samp>Cornsilk</samp>’</dt>
+<dd><p>0xFFF8DC
+</p></dd>
+<dt> ‘<samp>Crimson</samp>’</dt>
+<dd><p>0xDC143C
+</p></dd>
+<dt> ‘<samp>Cyan</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>DarkBlue</samp>’</dt>
+<dd><p>0x00008B
+</p></dd>
+<dt> ‘<samp>DarkCyan</samp>’</dt>
+<dd><p>0x008B8B
+</p></dd>
+<dt> ‘<samp>DarkGoldenRod</samp>’</dt>
+<dd><p>0xB8860B
+</p></dd>
+<dt> ‘<samp>DarkGray</samp>’</dt>
+<dd><p>0xA9A9A9
+</p></dd>
+<dt> ‘<samp>DarkGreen</samp>’</dt>
+<dd><p>0x006400
+</p></dd>
+<dt> ‘<samp>DarkKhaki</samp>’</dt>
+<dd><p>0xBDB76B
+</p></dd>
+<dt> ‘<samp>DarkMagenta</samp>’</dt>
+<dd><p>0x8B008B
+</p></dd>
+<dt> ‘<samp>DarkOliveGreen</samp>’</dt>
+<dd><p>0x556B2F
+</p></dd>
+<dt> ‘<samp>Darkorange</samp>’</dt>
+<dd><p>0xFF8C00
+</p></dd>
+<dt> ‘<samp>DarkOrchid</samp>’</dt>
+<dd><p>0x9932CC
+</p></dd>
+<dt> ‘<samp>DarkRed</samp>’</dt>
+<dd><p>0x8B0000
+</p></dd>
+<dt> ‘<samp>DarkSalmon</samp>’</dt>
+<dd><p>0xE9967A
+</p></dd>
+<dt> ‘<samp>DarkSeaGreen</samp>’</dt>
+<dd><p>0x8FBC8F
+</p></dd>
+<dt> ‘<samp>DarkSlateBlue</samp>’</dt>
+<dd><p>0x483D8B
+</p></dd>
+<dt> ‘<samp>DarkSlateGray</samp>’</dt>
+<dd><p>0x2F4F4F
+</p></dd>
+<dt> ‘<samp>DarkTurquoise</samp>’</dt>
+<dd><p>0x00CED1
+</p></dd>
+<dt> ‘<samp>DarkViolet</samp>’</dt>
+<dd><p>0x9400D3
+</p></dd>
+<dt> ‘<samp>DeepPink</samp>’</dt>
+<dd><p>0xFF1493
+</p></dd>
+<dt> ‘<samp>DeepSkyBlue</samp>’</dt>
+<dd><p>0x00BFFF
+</p></dd>
+<dt> ‘<samp>DimGray</samp>’</dt>
+<dd><p>0x696969
+</p></dd>
+<dt> ‘<samp>DodgerBlue</samp>’</dt>
+<dd><p>0x1E90FF
+</p></dd>
+<dt> ‘<samp>FireBrick</samp>’</dt>
+<dd><p>0xB22222
+</p></dd>
+<dt> ‘<samp>FloralWhite</samp>’</dt>
+<dd><p>0xFFFAF0
+</p></dd>
+<dt> ‘<samp>ForestGreen</samp>’</dt>
+<dd><p>0x228B22
+</p></dd>
+<dt> ‘<samp>Fuchsia</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Gainsboro</samp>’</dt>
+<dd><p>0xDCDCDC
+</p></dd>
+<dt> ‘<samp>GhostWhite</samp>’</dt>
+<dd><p>0xF8F8FF
+</p></dd>
+<dt> ‘<samp>Gold</samp>’</dt>
+<dd><p>0xFFD700
+</p></dd>
+<dt> ‘<samp>GoldenRod</samp>’</dt>
+<dd><p>0xDAA520
+</p></dd>
+<dt> ‘<samp>Gray</samp>’</dt>
+<dd><p>0x808080
+</p></dd>
+<dt> ‘<samp>Green</samp>’</dt>
+<dd><p>0x008000
+</p></dd>
+<dt> ‘<samp>GreenYellow</samp>’</dt>
+<dd><p>0xADFF2F
+</p></dd>
+<dt> ‘<samp>HoneyDew</samp>’</dt>
+<dd><p>0xF0FFF0
+</p></dd>
+<dt> ‘<samp>HotPink</samp>’</dt>
+<dd><p>0xFF69B4
+</p></dd>
+<dt> ‘<samp>IndianRed</samp>’</dt>
+<dd><p>0xCD5C5C
+</p></dd>
+<dt> ‘<samp>Indigo</samp>’</dt>
+<dd><p>0x4B0082
+</p></dd>
+<dt> ‘<samp>Ivory</samp>’</dt>
+<dd><p>0xFFFFF0
+</p></dd>
+<dt> ‘<samp>Khaki</samp>’</dt>
+<dd><p>0xF0E68C
+</p></dd>
+<dt> ‘<samp>Lavender</samp>’</dt>
+<dd><p>0xE6E6FA
+</p></dd>
+<dt> ‘<samp>LavenderBlush</samp>’</dt>
+<dd><p>0xFFF0F5
+</p></dd>
+<dt> ‘<samp>LawnGreen</samp>’</dt>
+<dd><p>0x7CFC00
+</p></dd>
+<dt> ‘<samp>LemonChiffon</samp>’</dt>
+<dd><p>0xFFFACD
+</p></dd>
+<dt> ‘<samp>LightBlue</samp>’</dt>
+<dd><p>0xADD8E6
+</p></dd>
+<dt> ‘<samp>LightCoral</samp>’</dt>
+<dd><p>0xF08080
+</p></dd>
+<dt> ‘<samp>LightCyan</samp>’</dt>
+<dd><p>0xE0FFFF
+</p></dd>
+<dt> ‘<samp>LightGoldenRodYellow</samp>’</dt>
+<dd><p>0xFAFAD2
+</p></dd>
+<dt> ‘<samp>LightGreen</samp>’</dt>
+<dd><p>0x90EE90
+</p></dd>
+<dt> ‘<samp>LightGrey</samp>’</dt>
+<dd><p>0xD3D3D3
+</p></dd>
+<dt> ‘<samp>LightPink</samp>’</dt>
+<dd><p>0xFFB6C1
+</p></dd>
+<dt> ‘<samp>LightSalmon</samp>’</dt>
+<dd><p>0xFFA07A
+</p></dd>
+<dt> ‘<samp>LightSeaGreen</samp>’</dt>
+<dd><p>0x20B2AA
+</p></dd>
+<dt> ‘<samp>LightSkyBlue</samp>’</dt>
+<dd><p>0x87CEFA
+</p></dd>
+<dt> ‘<samp>LightSlateGray</samp>’</dt>
+<dd><p>0x778899
+</p></dd>
+<dt> ‘<samp>LightSteelBlue</samp>’</dt>
+<dd><p>0xB0C4DE
+</p></dd>
+<dt> ‘<samp>LightYellow</samp>’</dt>
+<dd><p>0xFFFFE0
+</p></dd>
+<dt> ‘<samp>Lime</samp>’</dt>
+<dd><p>0x00FF00
+</p></dd>
+<dt> ‘<samp>LimeGreen</samp>’</dt>
+<dd><p>0x32CD32
+</p></dd>
+<dt> ‘<samp>Linen</samp>’</dt>
+<dd><p>0xFAF0E6
+</p></dd>
+<dt> ‘<samp>Magenta</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Maroon</samp>’</dt>
+<dd><p>0x800000
+</p></dd>
+<dt> ‘<samp>MediumAquaMarine</samp>’</dt>
+<dd><p>0x66CDAA
+</p></dd>
+<dt> ‘<samp>MediumBlue</samp>’</dt>
+<dd><p>0x0000CD
+</p></dd>
+<dt> ‘<samp>MediumOrchid</samp>’</dt>
+<dd><p>0xBA55D3
+</p></dd>
+<dt> ‘<samp>MediumPurple</samp>’</dt>
+<dd><p>0x9370D8
+</p></dd>
+<dt> ‘<samp>MediumSeaGreen</samp>’</dt>
+<dd><p>0x3CB371
+</p></dd>
+<dt> ‘<samp>MediumSlateBlue</samp>’</dt>
+<dd><p>0x7B68EE
+</p></dd>
+<dt> ‘<samp>MediumSpringGreen</samp>’</dt>
+<dd><p>0x00FA9A
+</p></dd>
+<dt> ‘<samp>MediumTurquoise</samp>’</dt>
+<dd><p>0x48D1CC
+</p></dd>
+<dt> ‘<samp>MediumVioletRed</samp>’</dt>
+<dd><p>0xC71585
+</p></dd>
+<dt> ‘<samp>MidnightBlue</samp>’</dt>
+<dd><p>0x191970
+</p></dd>
+<dt> ‘<samp>MintCream</samp>’</dt>
+<dd><p>0xF5FFFA
+</p></dd>
+<dt> ‘<samp>MistyRose</samp>’</dt>
+<dd><p>0xFFE4E1
+</p></dd>
+<dt> ‘<samp>Moccasin</samp>’</dt>
+<dd><p>0xFFE4B5
+</p></dd>
+<dt> ‘<samp>NavajoWhite</samp>’</dt>
+<dd><p>0xFFDEAD
+</p></dd>
+<dt> ‘<samp>Navy</samp>’</dt>
+<dd><p>0x000080
+</p></dd>
+<dt> ‘<samp>OldLace</samp>’</dt>
+<dd><p>0xFDF5E6
+</p></dd>
+<dt> ‘<samp>Olive</samp>’</dt>
+<dd><p>0x808000
+</p></dd>
+<dt> ‘<samp>OliveDrab</samp>’</dt>
+<dd><p>0x6B8E23
+</p></dd>
+<dt> ‘<samp>Orange</samp>’</dt>
+<dd><p>0xFFA500
+</p></dd>
+<dt> ‘<samp>OrangeRed</samp>’</dt>
+<dd><p>0xFF4500
+</p></dd>
+<dt> ‘<samp>Orchid</samp>’</dt>
+<dd><p>0xDA70D6
+</p></dd>
+<dt> ‘<samp>PaleGoldenRod</samp>’</dt>
+<dd><p>0xEEE8AA
+</p></dd>
+<dt> ‘<samp>PaleGreen</samp>’</dt>
+<dd><p>0x98FB98
+</p></dd>
+<dt> ‘<samp>PaleTurquoise</samp>’</dt>
+<dd><p>0xAFEEEE
+</p></dd>
+<dt> ‘<samp>PaleVioletRed</samp>’</dt>
+<dd><p>0xD87093
+</p></dd>
+<dt> ‘<samp>PapayaWhip</samp>’</dt>
+<dd><p>0xFFEFD5
+</p></dd>
+<dt> ‘<samp>PeachPuff</samp>’</dt>
+<dd><p>0xFFDAB9
+</p></dd>
+<dt> ‘<samp>Peru</samp>’</dt>
+<dd><p>0xCD853F
+</p></dd>
+<dt> ‘<samp>Pink</samp>’</dt>
+<dd><p>0xFFC0CB
+</p></dd>
+<dt> ‘<samp>Plum</samp>’</dt>
+<dd><p>0xDDA0DD
+</p></dd>
+<dt> ‘<samp>PowderBlue</samp>’</dt>
+<dd><p>0xB0E0E6
+</p></dd>
+<dt> ‘<samp>Purple</samp>’</dt>
+<dd><p>0x800080
+</p></dd>
+<dt> ‘<samp>Red</samp>’</dt>
+<dd><p>0xFF0000
+</p></dd>
+<dt> ‘<samp>RosyBrown</samp>’</dt>
+<dd><p>0xBC8F8F
+</p></dd>
+<dt> ‘<samp>RoyalBlue</samp>’</dt>
+<dd><p>0x4169E1
+</p></dd>
+<dt> ‘<samp>SaddleBrown</samp>’</dt>
+<dd><p>0x8B4513
+</p></dd>
+<dt> ‘<samp>Salmon</samp>’</dt>
+<dd><p>0xFA8072
+</p></dd>
+<dt> ‘<samp>SandyBrown</samp>’</dt>
+<dd><p>0xF4A460
+</p></dd>
+<dt> ‘<samp>SeaGreen</samp>’</dt>
+<dd><p>0x2E8B57
+</p></dd>
+<dt> ‘<samp>SeaShell</samp>’</dt>
+<dd><p>0xFFF5EE
+</p></dd>
+<dt> ‘<samp>Sienna</samp>’</dt>
+<dd><p>0xA0522D
+</p></dd>
+<dt> ‘<samp>Silver</samp>’</dt>
+<dd><p>0xC0C0C0
+</p></dd>
+<dt> ‘<samp>SkyBlue</samp>’</dt>
+<dd><p>0x87CEEB
+</p></dd>
+<dt> ‘<samp>SlateBlue</samp>’</dt>
+<dd><p>0x6A5ACD
+</p></dd>
+<dt> ‘<samp>SlateGray</samp>’</dt>
+<dd><p>0x708090
+</p></dd>
+<dt> ‘<samp>Snow</samp>’</dt>
+<dd><p>0xFFFAFA
+</p></dd>
+<dt> ‘<samp>SpringGreen</samp>’</dt>
+<dd><p>0x00FF7F
+</p></dd>
+<dt> ‘<samp>SteelBlue</samp>’</dt>
+<dd><p>0x4682B4
+</p></dd>
+<dt> ‘<samp>Tan</samp>’</dt>
+<dd><p>0xD2B48C
+</p></dd>
+<dt> ‘<samp>Teal</samp>’</dt>
+<dd><p>0x008080
+</p></dd>
+<dt> ‘<samp>Thistle</samp>’</dt>
+<dd><p>0xD8BFD8
+</p></dd>
+<dt> ‘<samp>Tomato</samp>’</dt>
+<dd><p>0xFF6347
+</p></dd>
+<dt> ‘<samp>Turquoise</samp>’</dt>
+<dd><p>0x40E0D0
+</p></dd>
+<dt> ‘<samp>Violet</samp>’</dt>
+<dd><p>0xEE82EE
+</p></dd>
+<dt> ‘<samp>Wheat</samp>’</dt>
+<dd><p>0xF5DEB3
+</p></dd>
+<dt> ‘<samp>White</samp>’</dt>
+<dd><p>0xFFFFFF
+</p></dd>
+<dt> ‘<samp>WhiteSmoke</samp>’</dt>
+<dd><p>0xF5F5F5
+</p></dd>
+<dt> ‘<samp>Yellow</samp>’</dt>
+<dd><p>0xFFFF00
+</p></dd>
+<dt> ‘<samp>YellowGreen</samp>’</dt>
+<dd><p>0x9ACD32
+</p></dd>
+</dl>
+
+<p><a name="channel-layout-syntax"></a>
+</p><a name="Channel-Layout"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Channel-Layout">4.8 Channel Layout</a></h2>
+
+<p>A channel layout specifies the spatial disposition of the channels in
+a multi-channel audio stream. To specify a channel layout, FFmpeg
+makes use of a special syntax.
+</p>
+<p>Individual channels are identified by an id, as given by the table
+below:
+</p><dl compact="compact">
+<dt> ‘<samp>FL</samp>’</dt>
+<dd><p>front left
+</p></dd>
+<dt> ‘<samp>FR</samp>’</dt>
+<dd><p>front right
+</p></dd>
+<dt> ‘<samp>FC</samp>’</dt>
+<dd><p>front center
+</p></dd>
+<dt> ‘<samp>LFE</samp>’</dt>
+<dd><p>low frequency
+</p></dd>
+<dt> ‘<samp>BL</samp>’</dt>
+<dd><p>back left
+</p></dd>
+<dt> ‘<samp>BR</samp>’</dt>
+<dd><p>back right
+</p></dd>
+<dt> ‘<samp>FLC</samp>’</dt>
+<dd><p>front left-of-center
+</p></dd>
+<dt> ‘<samp>FRC</samp>’</dt>
+<dd><p>front right-of-center
+</p></dd>
+<dt> ‘<samp>BC</samp>’</dt>
+<dd><p>back center
+</p></dd>
+<dt> ‘<samp>SL</samp>’</dt>
+<dd><p>side left
+</p></dd>
+<dt> ‘<samp>SR</samp>’</dt>
+<dd><p>side right
+</p></dd>
+<dt> ‘<samp>TC</samp>’</dt>
+<dd><p>top center
+</p></dd>
+<dt> ‘<samp>TFL</samp>’</dt>
+<dd><p>top front left
+</p></dd>
+<dt> ‘<samp>TFC</samp>’</dt>
+<dd><p>top front center
+</p></dd>
+<dt> ‘<samp>TFR</samp>’</dt>
+<dd><p>top front right
+</p></dd>
+<dt> ‘<samp>TBL</samp>’</dt>
+<dd><p>top back left
+</p></dd>
+<dt> ‘<samp>TBC</samp>’</dt>
+<dd><p>top back center
+</p></dd>
+<dt> ‘<samp>TBR</samp>’</dt>
+<dd><p>top back right
+</p></dd>
+<dt> ‘<samp>DL</samp>’</dt>
+<dd><p>downmix left
+</p></dd>
+<dt> ‘<samp>DR</samp>’</dt>
+<dd><p>downmix right
+</p></dd>
+<dt> ‘<samp>WL</samp>’</dt>
+<dd><p>wide left
+</p></dd>
+<dt> ‘<samp>WR</samp>’</dt>
+<dd><p>wide right
+</p></dd>
+<dt> ‘<samp>SDL</samp>’</dt>
+<dd><p>surround direct left
+</p></dd>
+<dt> ‘<samp>SDR</samp>’</dt>
+<dd><p>surround direct right
+</p></dd>
+<dt> ‘<samp>LFE2</samp>’</dt>
+<dd><p>low frequency 2
+</p></dd>
+</dl>
+
+<p>Standard channel layout compositions can be specified by using the
+following identifiers:
+</p><dl compact="compact">
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>FC
+</p></dd>
+<dt> ‘<samp>stereo</samp>’</dt>
+<dd><p>FL+FR
+</p></dd>
+<dt> ‘<samp>2.1</samp>’</dt>
+<dd><p>FL+FR+LFE
+</p></dd>
+<dt> ‘<samp>3.0</samp>’</dt>
+<dd><p>FL+FR+FC
+</p></dd>
+<dt> ‘<samp>3.0(back)</samp>’</dt>
+<dd><p>FL+FR+BC
+</p></dd>
+<dt> ‘<samp>4.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC
+</p></dd>
+<dt> ‘<samp>quad</samp>’</dt>
+<dd><p>FL+FR+BL+BR
+</p></dd>
+<dt> ‘<samp>quad(side)</samp>’</dt>
+<dd><p>FL+FR+SL+SR
+</p></dd>
+<dt> ‘<samp>3.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE
+</p></dd>
+<dt> ‘<samp>5.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR
+</p></dd>
+<dt> ‘<samp>5.0(side)</samp>’</dt>
+<dd><p>FL+FR+FC+SL+SR
+</p></dd>
+<dt> ‘<samp>4.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC
+</p></dd>
+<dt> ‘<samp>5.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR
+</p></dd>
+<dt> ‘<samp>5.1(side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0(front)</samp>’</dt>
+<dd><p>FL+FR+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>hexagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1(front)</samp>’</dt>
+<dd><p>FL+FR+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0(front)</samp>’</dt>
+<dd><p>FL+FR+FC+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1(wide)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC
+</p></dd>
+<dt> ‘<samp>7.1(wide-side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>octagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>downmix</samp>’</dt>
+<dd><p>DL+DR
+</p></dd>
+</dl>
+
+<p>A custom channel layout can be specified as a sequence of terms, separated by
+’+’ or ’|’. Each term can be:
+</p><ul>
+<li>
+the name of a standard channel layout (e.g. ‘<samp>mono</samp>’,
+‘<samp>stereo</samp>’, ‘<samp>4.0</samp>’, ‘<samp>quad</samp>’, ‘<samp>5.0</samp>’, etc.)
+
+</li><li>
+the name of a single channel (e.g. ‘<samp>FL</samp>’, ‘<samp>FR</samp>’, ‘<samp>FC</samp>’, ‘<samp>LFE</samp>’, etc.)
+
+</li><li>
+a number of channels, in decimal, optionally followed by ’c’, yielding
+the default channel layout for that number of channels (see the
+function <code>av_get_default_channel_layout</code>)
+
+</li><li>
+a channel layout mask, in hexadecimal starting with "0x" (see the
+<code>AV_CH_*</code> macros in ‘<tt>libavutil/channel_layout.h</tt>’.
+</li></ul>
+
+<p>Starting from libavutil version 53 the trailing character "c" to
+specify a number of channels will be required, while a channel layout
+mask could also be specified as a decimal number (if and only if not
+followed by "c").
+</p>
+<p>See also the function <code>av_get_channel_layout</code> defined in
+‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<a name="Expression-Evaluation"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Expression-Evaluation">5. Expression Evaluation</a></h1>
+
+<p>When evaluating an arithmetic expression, FFmpeg uses an internal
+formula evaluator, implemented through the ‘<tt>libavutil/eval.h</tt>’
+interface.
+</p>
+<p>An expression may contain unary, binary operators, constants, and
+functions.
+</p>
+<p>Two expressions <var>expr1</var> and <var>expr2</var> can be combined to form
+another expression "<var>expr1</var>;<var>expr2</var>".
+<var>expr1</var> and <var>expr2</var> are evaluated in turn, and the new
+expression evaluates to the value of <var>expr2</var>.
+</p>
+<p>The following binary operators are available: <code>+</code>, <code>-</code>,
+<code>*</code>, <code>/</code>, <code>^</code>.
+</p>
+<p>The following unary operators are available: <code>+</code>, <code>-</code>.
+</p>
+<p>The following functions are available:
+</p><dl compact="compact">
+<dt> ‘<samp>abs(x)</samp>’</dt>
+<dd><p>Compute absolute value of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>acos(x)</samp>’</dt>
+<dd><p>Compute arccosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>asin(x)</samp>’</dt>
+<dd><p>Compute arcsine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>atan(x)</samp>’</dt>
+<dd><p>Compute arctangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>between(x, min, max)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>min</var> and lesser than or
+equal to <var>max</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>bitand(x, y)</samp>’</dt>
+<dt> ‘<samp>bitor(x, y)</samp>’</dt>
+<dd><p>Compute bitwise and/or operation on <var>x</var> and <var>y</var>.
+</p>
+<p>The results of the evaluation of <var>x</var> and <var>y</var> are converted to
+integers before executing the bitwise operation.
+</p>
+<p>Note that both the conversion to integer and the conversion back to
+floating point can lose precision. Beware of unexpected results for
+large numbers (usually 2^53 and larger).
+</p>
+</dd>
+<dt> ‘<samp>ceil(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> upwards to the nearest
+integer. For example, "ceil(1.5)" is "2.0".
+</p>
+</dd>
+<dt> ‘<samp>cos(x)</samp>’</dt>
+<dd><p>Compute cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>cosh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>eq(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> and <var>y</var> are equivalent, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>exp(x)</samp>’</dt>
+<dd><p>Compute exponential of <var>x</var> (with base <code>e</code>, the Euler’s number).
+</p>
+</dd>
+<dt> ‘<samp>floor(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> downwards to the nearest
+integer. For example, "floor(-1.5)" is "-2.0".
+</p>
+</dd>
+<dt> ‘<samp>gauss(x)</samp>’</dt>
+<dd><p>Compute Gauss function of <var>x</var>, corresponding to
+<code>exp(-x*x/2) / sqrt(2*PI)</code>.
+</p>
+</dd>
+<dt> ‘<samp>gcd(x, y)</samp>’</dt>
+<dd><p>Return the greatest common divisor of <var>x</var> and <var>y</var>. If both <var>x</var> and
+<var>y</var> are 0 or either or both are less than zero then behavior is undefined.
+</p>
+</dd>
+<dt> ‘<samp>gt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>gte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>hypot(x, y)</samp>’</dt>
+<dd><p>This function is similar to the C function with the same name; it returns
+"sqrt(<var>x</var>*<var>x</var> + <var>y</var>*<var>y</var>)", the length of the hypotenuse of a
+right triangle with sides of length <var>x</var> and <var>y</var>, or the distance of the
+point (<var>x</var>, <var>y</var>) from the origin.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the result of
+the evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the result of the
+evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>isinf(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is +/-INFINITY, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>isnan(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is NAN, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ld(var)</samp>’</dt>
+<dd><p>Allow to load the value of the internal variable with number
+<var>var</var>, which was previously stored with st(<var>var</var>, <var>expr</var>).
+The function returns the loaded value.
+</p>
+</dd>
+<dt> ‘<samp>log(x)</samp>’</dt>
+<dd><p>Compute natural logarithm of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>lt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>lte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>max(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>min(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>mod(x, y)</samp>’</dt>
+<dd><p>Compute the remainder of division of <var>x</var> by <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>not(expr)</samp>’</dt>
+<dd><p>Return 1.0 if <var>expr</var> is zero, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>pow(x, y)</samp>’</dt>
+<dd><p>Compute the power of <var>x</var> elevated <var>y</var>, it is equivalent to
+"(<var>x</var>)^(<var>y</var>)".
+</p>
+</dd>
+<dt> ‘<samp>print(t)</samp>’</dt>
+<dt> ‘<samp>print(t, l)</samp>’</dt>
+<dd><p>Print the value of expression <var>t</var> with loglevel <var>l</var>. If
+<var>l</var> is not specified then a default log level is used.
+Returns the value of the expression printed.
+</p>
+<p>Prints t with loglevel l
+</p>
+</dd>
+<dt> ‘<samp>random(x)</samp>’</dt>
+<dd><p>Return a pseudo random value between 0.0 and 1.0. <var>x</var> is the index of the
+internal variable which will be used to save the seed/state.
+</p>
+</dd>
+<dt> ‘<samp>root(expr, max)</samp>’</dt>
+<dd><p>Find an input value for which the function represented by <var>expr</var>
+with argument <var>ld(0)</var> is 0 in the interval 0..<var>max</var>.
+</p>
+<p>The expression in <var>expr</var> must denote a continuous function or the
+result is undefined.
+</p>
+<p><var>ld(0)</var> is used to represent the function input value, which means
+that the given expression will be evaluated multiple times with
+various input values that the expression can access through
+<code>ld(0)</code>. When the expression evaluates to 0 then the
+corresponding input value will be returned.
+</p>
+</dd>
+<dt> ‘<samp>sin(x)</samp>’</dt>
+<dd><p>Compute sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sinh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sqrt(expr)</samp>’</dt>
+<dd><p>Compute the square root of <var>expr</var>. This is equivalent to
+"(<var>expr</var>)^.5".
+</p>
+</dd>
+<dt> ‘<samp>squish(x)</samp>’</dt>
+<dd><p>Compute expression <code>1/(1 + exp(4*x))</code>.
+</p>
+</dd>
+<dt> ‘<samp>st(var, expr)</samp>’</dt>
+<dd><p>Allow to store the value of the expression <var>expr</var> in an internal
+variable. <var>var</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.
+</p>
+</dd>
+<dt> ‘<samp>tan(x)</samp>’</dt>
+<dd><p>Compute tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>tanh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>taylor(expr, x)</samp>’</dt>
+<dt> ‘<samp>taylor(expr, x, id)</samp>’</dt>
+<dd><p>Evaluate a Taylor series at <var>x</var>, given an expression representing
+the <code>ld(id)</code>-th derivative of a function at 0.
+</p>
+<p>When the series does not converge the result is undefined.
+</p>
+<p><var>ld(id)</var> is used to represent the derivative order in <var>expr</var>,
+which means that the given expression will be evaluated multiple times
+with various input values that the expression can access through
+<code>ld(id)</code>. If <var>id</var> is not specified then 0 is assumed.
+</p>
+<p>Note, when you have the derivatives at y instead of 0,
+<code>taylor(expr, x-y)</code> can be used.
+</p>
+</dd>
+<dt> ‘<samp>time(0)</samp>’</dt>
+<dd><p>Return the current (wallclock) time in seconds.
+</p>
+</dd>
+<dt> ‘<samp>trunc(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> towards zero to the nearest
+integer. For example, "trunc(-1.5)" is "-1.0".
+</p>
+</dd>
+<dt> ‘<samp>while(cond, expr)</samp>’</dt>
+<dd><p>Evaluate expression <var>expr</var> while the expression <var>cond</var> is
+non-zero, and returns the value of the last <var>expr</var> evaluation, or
+NAN if <var>cond</var> was always false.
+</p></dd>
+</dl>
+
+<p>The following constants are available:
+</p><dl compact="compact">
+<dt> ‘<samp>PI</samp>’</dt>
+<dd><p>area of the unit disc, approximately 3.14
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>exp(1) (Euler’s number), approximately 2.718
+</p></dd>
+<dt> ‘<samp>PHI</samp>’</dt>
+<dd><p>golden ratio (1+sqrt(5))/2, approximately 1.618
+</p></dd>
+</dl>
+
+<p>Assuming that an expression is considered "true" if it has a non-zero
+value, note that:
+</p>
+<p><code>*</code> works like AND
+</p>
+<p><code>+</code> works like OR
+</p>
+<p>For example the construct:
+</p><table><tr><td> </td><td><pre class="example">if (A AND B) then C
+</pre></td></tr></table>
+<p>is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">if(A*B, C)
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<p>The evaluator also recognizes the International System unit prefixes.
+If ’i’ is appended after the prefix, binary prefixes are used, which
+are based on powers of 1024 instead of powers of 1000.
+The ’B’ postfix multiplies the value by 8, and can be appended after a
+unit prefix or used alone. This allows using for example ’KB’, ’MiB’,
+’G’ and ’B’ as number postfix.
+</p>
+<p>The list of available International System prefixes follows, with
+indication of the corresponding powers of 10 and of 2.
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>10^-24 / 2^-80
+</p></dd>
+<dt> ‘<samp>z</samp>’</dt>
+<dd><p>10^-21 / 2^-70
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>10^-18 / 2^-60
+</p></dd>
+<dt> ‘<samp>f</samp>’</dt>
+<dd><p>10^-15 / 2^-50
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>10^-12 / 2^-40
+</p></dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>10^-9 / 2^-30
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>10^-6 / 2^-20
+</p></dd>
+<dt> ‘<samp>m</samp>’</dt>
+<dd><p>10^-3 / 2^-10
+</p></dd>
+<dt> ‘<samp>c</samp>’</dt>
+<dd><p>10^-2
+</p></dd>
+<dt> ‘<samp>d</samp>’</dt>
+<dd><p>10^-1
+</p></dd>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>10^2
+</p></dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>K</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>M</samp>’</dt>
+<dd><p>10^6 / 2^20
+</p></dd>
+<dt> ‘<samp>G</samp>’</dt>
+<dd><p>10^9 / 2^30
+</p></dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>10^12 / 2^40
+</p></dd>
+<dt> ‘<samp>P</samp>’</dt>
+<dd><p>10^15 / 2^40
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>10^18 / 2^50
+</p></dd>
+<dt> ‘<samp>Z</samp>’</dt>
+<dd><p>10^21 / 2^60
+</p></dd>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>10^24 / 2^70
+</p></dd>
+</dl>
+
+
+<a name="OpenCL-Options"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-OpenCL-Options">6. OpenCL Options</a></h1>
+
+<p>When FFmpeg is configured with <code>--enable-opencl</code>, it is possible
+to set the options for the global OpenCL context.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>build_options</samp>’</dt>
+<dd><p>Set build options used to compile the registered kernels.
+</p>
+<p>See reference "OpenCL Specification Version: 1.2 chapter 5.6.4".
+</p>
+</dd>
+<dt> ‘<samp>platform_idx</samp>’</dt>
+<dd><p>Select the index of the platform to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list
+which can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+<dt> ‘<samp>device_idx</samp>’</dt>
+<dd><p>Select the index of the device used to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list which
+can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+</dl>
+
+<p><a name="codec_002doptions"></a>
+</p><a name="Codec-Options"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Codec-Options">7. Codec Options</a></h1>
+
+<p>libavcodec provides some generic global options, which can be set on
+all the encoders and decoders. In addition each codec may support
+so-called private options, which are specific for a given codec.
+</p>
+<p>Sometimes, a global option may only affect a specific kind of codec,
+and may be unsensical or ignored by another, so you need to be aware
+of the meaning of the specified options. Also some options are
+meant only for decoding or encoding.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVCodecContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follow:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Default value is 200K.
+</p>
+</dd>
+<dt> ‘<samp>ab <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio bitrate (in bits/s). Default value is 128K.
+</p>
+</dd>
+<dt> ‘<samp>bt <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video bitrate tolerance (in bits/s). 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.
+</p>
+</dd>
+<dt> ‘<samp>flags <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Set generic flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>mv4</samp>’</dt>
+<dd><p>Use four motion vector by macroblock (mpeg4).
+</p></dd>
+<dt> ‘<samp>qpel</samp>’</dt>
+<dd><p>Use 1/4 pel motion compensation.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Use loop filter.
+</p></dd>
+<dt> ‘<samp>qscale</samp>’</dt>
+<dd><p>Use fixed qscale.
+</p></dd>
+<dt> ‘<samp>gmc</samp>’</dt>
+<dd><p>Use gmc.
+</p></dd>
+<dt> ‘<samp>mv0</samp>’</dt>
+<dd><p>Always try a mb with mv=<0,0>.
+</p></dd>
+<dt> ‘<samp>input_preserved</samp>’</dt>
+<dt> ‘<samp>pass1</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in first pass mode.
+</p></dd>
+<dt> ‘<samp>pass2</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in second pass mode.
+</p></dd>
+<dt> ‘<samp>gray</samp>’</dt>
+<dd><p>Only decode/encode grayscale.
+</p></dd>
+<dt> ‘<samp>emu_edge</samp>’</dt>
+<dd><p>Do not draw edges.
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>Set error[?] variables during encoding.
+</p></dd>
+<dt> ‘<samp>truncated</samp>’</dt>
+<dt> ‘<samp>naq</samp>’</dt>
+<dd><p>Normalize adaptive quantization.
+</p></dd>
+<dt> ‘<samp>ildct</samp>’</dt>
+<dd><p>Use interlaced DCT.
+</p></dd>
+<dt> ‘<samp>low_delay</samp>’</dt>
+<dd><p>Force low delay.
+</p></dd>
+<dt> ‘<samp>global_header</samp>’</dt>
+<dd><p>Place global headers in extradata instead of every keyframe.
+</p></dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Use only bitexact stuff (except (I)DCT).
+</p></dd>
+<dt> ‘<samp>aic</samp>’</dt>
+<dd><p>Apply H263 advanced intra coding / mpeg4 ac prediction.
+</p></dd>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>qprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>ilme</samp>’</dt>
+<dd><p>Apply interlaced motion estimation.
+</p></dd>
+<dt> ‘<samp>cgop</samp>’</dt>
+<dd><p>Use closed gop.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_method <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero motion estimation (fastest)
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>full motion estimation (slowest)
+</p></dd>
+<dt> ‘<samp>epzs</samp>’</dt>
+<dd><p>EPZS motion estimation (default)
+</p></dd>
+<dt> ‘<samp>esa</samp>’</dt>
+<dd><p>esa motion estimation (alias for full)
+</p></dd>
+<dt> ‘<samp>tesa</samp>’</dt>
+<dd><p>tesa motion estimation
+</p></dd>
+<dt> ‘<samp>dia</samp>’</dt>
+<dd><p>dia motion estimation (alias for epzs)
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>log motion estimation
+</p></dd>
+<dt> ‘<samp>phods</samp>’</dt>
+<dd><p>phods motion estimation
+</p></dd>
+<dt> ‘<samp>x1</samp>’</dt>
+<dd><p>X1 motion estimation
+</p></dd>
+<dt> ‘<samp>hex</samp>’</dt>
+<dd><p>hex motion estimation
+</p></dd>
+<dt> ‘<samp>umh</samp>’</dt>
+<dd><p>umh motion estimation
+</p></dd>
+<dt> ‘<samp>iter</samp>’</dt>
+<dd><p>iter motion estimation
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>extradata_size <var>integer</var></samp>’</dt>
+<dd><p>Set extradata size.
+</p>
+</dd>
+<dt> ‘<samp>time_base <var>rational number</var></samp>’</dt>
+<dd><p>Set codec time base.
+</p>
+<p>It is the fundamental unit of time (in seconds) in terms of which
+frame timestamps are represented. For fixed-fps content, timebase
+should be <code>1 / frame_rate</code> and timestamp increments should be
+identically 1.
+</p>
+</dd>
+<dt> ‘<samp>g <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set the group of picture size. Default value is 12.
+</p>
+</dd>
+<dt> ‘<samp>ar <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>ac <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>cutoff <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set cutoff bandwidth.
+</p>
+</dd>
+<dt> ‘<samp>frame_size <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio frame size.
+</p>
+<p>Each submitted frame except the last must contain exactly frame_size
+samples per channel. May be 0 when the codec has
+CODEC_CAP_VARIABLE_FRAME_SIZE set, in that case the frame size is not
+restricted. It is set by some decoders to indicate constant frame
+size.
+</p>
+</dd>
+<dt> ‘<samp>frame_number <var>integer</var></samp>’</dt>
+<dd><p>Set the frame number.
+</p>
+</dd>
+<dt> ‘<samp>delay <var>integer</var></samp>’</dt>
+<dt> ‘<samp>qcomp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale compression (VBR). It is used as a constant
+in the ratecontrol equation. Recommended range for default rc_eq:
+0.0-1.0.
+</p>
+</dd>
+<dt> ‘<samp>qblur <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale blur (VBR).
+</p>
+</dd>
+<dt> ‘<samp>qmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min video quantizer scale (VBR). Must be included between -1 and
+69, default value is 2.
+</p>
+</dd>
+<dt> ‘<samp>qmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max video quantizer scale (VBR). Must be included between -1 and
+1024, default value is 31.
+</p>
+</dd>
+<dt> ‘<samp>qdiff <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max difference between the quantizer scale (VBR).
+</p>
+</dd>
+<dt> ‘<samp>bf <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max number of B frames between non-B-frames.
+</p>
+<p>Must be an integer between -1 and 16. 0 means that B-frames are
+disabled. If a value of -1 is used, it will choose an automatic value
+depending on the encoder.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>b_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set qp factor between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol method.
+</p>
+</dd>
+<dt> ‘<samp>b_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set strategy to choose between I/P/B-frames.
+</p>
+</dd>
+<dt> ‘<samp>ps <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set RTP payload size in bytes.
+</p>
+</dd>
+<dt> ‘<samp>mv_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>header_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>skip_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>misc_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>frame_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>bug <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Workaround not auto detected encoder bugs.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>autodetect</samp>’</dt>
+<dt> ‘<samp>old_msmpeg4</samp>’</dt>
+<dd><p>some old lavc generated msmpeg4v3 files (no autodetection)
+</p></dd>
+<dt> ‘<samp>xvid_ilace</samp>’</dt>
+<dd><p>Xvid interlacing bug (autodetected if fourcc==XVIX)
+</p></dd>
+<dt> ‘<samp>ump4</samp>’</dt>
+<dd><p>(autodetected if fourcc==UMP4)
+</p></dd>
+<dt> ‘<samp>no_padding</samp>’</dt>
+<dd><p>padding bug (autodetected)
+</p></dd>
+<dt> ‘<samp>amv</samp>’</dt>
+<dt> ‘<samp>ac_vlc</samp>’</dt>
+<dd><p>illegal vlc bug (autodetected per fourcc)
+</p></dd>
+<dt> ‘<samp>qpel_chroma</samp>’</dt>
+<dt> ‘<samp>std_qpel</samp>’</dt>
+<dd><p>old standard qpel (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>qpel_chroma2</samp>’</dt>
+<dt> ‘<samp>direct_blocksize</samp>’</dt>
+<dd><p>direct-qpel-blocksize bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>edge padding bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>hpel_chroma</samp>’</dt>
+<dt> ‘<samp>dc_clip</samp>’</dt>
+<dt> ‘<samp>ms</samp>’</dt>
+<dd><p>Workaround various bugs in microsoft broken decoders.
+</p></dd>
+<dt> ‘<samp>trunc</samp>’</dt>
+<dd><p>trancated frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lelim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for luminance (negative
+values also consider DC coefficient).
+</p>
+</dd>
+<dt> ‘<samp>celim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for chrominance (negative
+values also consider dc coefficient)
+</p>
+</dd>
+<dt> ‘<samp>strict <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Specify how strictly to follow the standards.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>very</samp>’</dt>
+<dd><p>strictly conform to a older more strict version of the spec or reference software
+</p></dd>
+<dt> ‘<samp>strict</samp>’</dt>
+<dd><p>strictly conform to all the things in the spec no matter what consequences
+</p></dd>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>unofficial</samp>’</dt>
+<dd><p>allow unofficial extensions
+</p></dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>allow non standardized experimental things, experimental
+(unfinished/work in progress/not well tested) decoders and encoders.
+Note: experimental decoders can pose a security risk, do not use this for
+decoding untrusted input.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>b_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>err_detect <var>flags</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set error detection flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>verify embedded CRCs
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>detect bitstream specification deviations
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>detect improper bitstream length
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>abort decoding on minor error detection
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>consider things that violate the spec and have not been seen in the wild as errors
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>consider all spec non compliancies as errors
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>consider things that a sane encoder should not do as an error
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>has_b_frames <var>integer</var></samp>’</dt>
+<dt> ‘<samp>block_align <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mpeg_quant <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Use MPEG quantizers instead of H.263.
+</p>
+</dd>
+<dt> ‘<samp>qsquish <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>How to keep quantizer between qmin and qmax (0 = clip, 1 = use
+differentiable function).
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_amp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_freq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_override_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>rc_eq <var>string</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set rate control equation. When computing the expression, besides the
+standard functions defined in the section ’Expression Evaluation’, the
+following functions are available: bits2qp(bits), qp2bits(qp). Also
+the following constants are available: iTex pTex tex mv fCode iCount
+mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex
+avgTex.
+</p>
+</dd>
+<dt> ‘<samp>maxrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set max bitrate tolerance (in bits/s). Requires bufsize to be set.
+</p>
+</dd>
+<dt> ‘<samp>minrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR
+encode. It is of little use elsewise.
+</p>
+</dd>
+<dt> ‘<samp>bufsize <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol buffer size (in bits).
+</p>
+</dd>
+<dt> ‘<samp>rc_buf_aggressivity <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Currently useless.
+</p>
+</dd>
+<dt> ‘<samp>i_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP factor between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>i_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_cplx <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set initial complexity for 1-pass encoding.
+</p>
+</dd>
+<dt> ‘<samp>dct <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set DCT algorithm.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>autoselect a good one (default)
+</p></dd>
+<dt> ‘<samp>fastint</samp>’</dt>
+<dd><p>fast integer
+</p></dd>
+<dt> ‘<samp>int</samp>’</dt>
+<dd><p>accurate integer
+</p></dd>
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>faan</samp>’</dt>
+<dd><p>floating point AAN DCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lumi_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress bright areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>tcplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set temporal complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>scplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set spatial complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>p_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter masking.
+</p>
+</dd>
+<dt> ‘<samp>dark_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress dark areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>idct <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select IDCT implementation.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dt> ‘<samp>int</samp>’</dt>
+<dt> ‘<samp>simple</samp>’</dt>
+<dt> ‘<samp>simplemmx</samp>’</dt>
+<dt> ‘<samp>arm</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>sh4</samp>’</dt>
+<dt> ‘<samp>simplearm</samp>’</dt>
+<dt> ‘<samp>simplearmv5te</samp>’</dt>
+<dt> ‘<samp>simplearmv6</samp>’</dt>
+<dt> ‘<samp>simpleneon</samp>’</dt>
+<dt> ‘<samp>simplealpha</samp>’</dt>
+<dt> ‘<samp>ipp</samp>’</dt>
+<dt> ‘<samp>xvidmmx</samp>’</dt>
+<dt> ‘<samp>faani</samp>’</dt>
+<dd><p>floating point AAN IDCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>slice_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>ec <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set error concealment strategy.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>guess_mvs</samp>’</dt>
+<dd><p>iterative motion vector (MV) search (slow)
+</p></dd>
+<dt> ‘<samp>deblock</samp>’</dt>
+<dd><p>use strong deblock filter for damaged MBs
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>bits_per_coded_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set prediction method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>left</samp>’</dt>
+<dt> ‘<samp>plane</samp>’</dt>
+<dt> ‘<samp>median</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>aspect <var>rational number</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>debug <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pict</samp>’</dt>
+<dd><p>picture info
+</p></dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dd><p>rate control
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dt> ‘<samp>mb_type</samp>’</dt>
+<dd><p>macroblock (MB) type
+</p></dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>per-block quantization parameter (QP)
+</p></dd>
+<dt> ‘<samp>mv</samp>’</dt>
+<dd><p>motion vector
+</p></dd>
+<dt> ‘<samp>dct_coeff</samp>’</dt>
+<dt> ‘<samp>skip</samp>’</dt>
+<dt> ‘<samp>startcode</samp>’</dt>
+<dt> ‘<samp>pts</samp>’</dt>
+<dt> ‘<samp>er</samp>’</dt>
+<dd><p>error recognition
+</p></dd>
+<dt> ‘<samp>mmco</samp>’</dt>
+<dd><p>memory management control operations (H.264)
+</p></dd>
+<dt> ‘<samp>bugs</samp>’</dt>
+<dt> ‘<samp>vis_qp</samp>’</dt>
+<dd><p>visualize quantization parameter (QP), lower QP are tinted greener
+</p></dd>
+<dt> ‘<samp>vis_mb_type</samp>’</dt>
+<dd><p>visualize block types
+</p></dd>
+<dt> ‘<samp>buffers</samp>’</dt>
+<dd><p>picture buffer allocations
+</p></dd>
+<dt> ‘<samp>thread_ops</samp>’</dt>
+<dd><p>threading operations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vismv <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Visualize motion vectors (MVs).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pf</samp>’</dt>
+<dd><p>forward predicted MVs of P-frames
+</p></dd>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>forward predicted MVs of B-frames
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>backward predicted MVs of B-frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set full pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>subcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>mbcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>ildctcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set interlaced dct compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>last_pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set amount of motion predictors from the previous frame.
+</p>
+</dd>
+<dt> ‘<samp>preme <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>precmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>pre_dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation pre-pass.
+</p>
+</dd>
+<dt> ‘<samp>subq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel motion estimation quality.
+</p>
+</dd>
+<dt> ‘<samp>dtg_active_format <var>integer</var></samp>’</dt>
+<dt> ‘<samp>me_range <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set limit motion vectors range (1023 for DivX player).
+</p>
+</dd>
+<dt> ‘<samp>ibias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra quant bias.
+</p>
+</dd>
+<dt> ‘<samp>pbias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter quant bias.
+</p>
+</dd>
+<dt> ‘<samp>color_table_id <var>integer</var></samp>’</dt>
+<dt> ‘<samp>global_quality <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>coder <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>vlc</samp>’</dt>
+<dd><p>variable length coder / huffman coder
+</p></dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>arithmetic coder
+</p></dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>raw (no encoding)
+</p></dd>
+<dt> ‘<samp>rle</samp>’</dt>
+<dd><p>run-length coder
+</p></dd>
+<dt> ‘<samp>deflate</samp>’</dt>
+<dd><p>deflate-based coder
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>context <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set context model.
+</p>
+</dd>
+<dt> ‘<samp>slice_flags <var>integer</var></samp>’</dt>
+<dt> ‘<samp>xvmc_acceleration <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mbd <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock decision algorithm (high quality mode).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>use mbcmp (default)
+</p></dd>
+<dt> ‘<samp>bits</samp>’</dt>
+<dd><p>use fewest bits
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>use best rate distortion
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>stream_codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>sc_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set scene change threshold.
+</p>
+</dd>
+<dt> ‘<samp>lmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>lmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>nr <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set noise reduction.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set number of bits which should be loaded into the rc buffer before
+decoding starts.
+</p>
+</dd>
+<dt> ‘<samp>flags2 <var>flags</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dd><p>Allow non spec compliant speedup tricks.
+</p></dd>
+<dt> ‘<samp>sgop</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>noout</samp>’</dt>
+<dd><p>Skip bitstream encoding.
+</p></dd>
+<dt> ‘<samp>ignorecrop</samp>’</dt>
+<dd><p>Ignore cropping information from sps.
+</p></dd>
+<dt> ‘<samp>local_header</samp>’</dt>
+<dd><p>Place global headers at every keyframe instead of in extradata.
+</p></dd>
+<dt> ‘<samp>chunks</samp>’</dt>
+<dd><p>Frame data might be split into multiple chunks.
+</p></dd>
+<dt> ‘<samp>showall</samp>’</dt>
+<dd><p>Show all frames before the first keyframe.
+</p></dd>
+<dt> ‘<samp>skiprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>error <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>qns <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p>
+</dd>
+<dt> ‘<samp>threads <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>detect a good number of threads
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation threshold.
+</p>
+</dd>
+<dt> ‘<samp>mb_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock threshold.
+</p>
+</dd>
+<dt> ‘<samp>dc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra_dc_precision.
+</p>
+</dd>
+<dt> ‘<samp>nssew <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set nsse weight.
+</p>
+</dd>
+<dt> ‘<samp>skip_top <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the top which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>skip_bottom <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the bottom which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>profile <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+<dt> ‘<samp>aac_main</samp>’</dt>
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dt> ‘<samp>aac_ssr</samp>’</dt>
+<dt> ‘<samp>aac_ltp</samp>’</dt>
+<dt> ‘<samp>aac_he</samp>’</dt>
+<dt> ‘<samp>aac_he_v2</samp>’</dt>
+<dt> ‘<samp>aac_ld</samp>’</dt>
+<dt> ‘<samp>aac_eld</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_low</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_he</samp>’</dt>
+<dt> ‘<samp>dts</samp>’</dt>
+<dt> ‘<samp>dts_es</samp>’</dt>
+<dt> ‘<samp>dts_96_24</samp>’</dt>
+<dt> ‘<samp>dts_hd_hra</samp>’</dt>
+<dt> ‘<samp>dts_hd_ma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>lowres <var>integer</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Decode at 1= 1/2, 2=1/4, 3=1/8 resolutions.
+</p>
+</dd>
+<dt> ‘<samp>skip_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip threshold.
+</p>
+</dd>
+<dt> ‘<samp>skip_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip factor.
+</p>
+</dd>
+<dt> ‘<samp>skip_exp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip exponent.
+Negative values behave identical to the corresponding positive ones, except
+that the score is normalized.
+Positive values exist primarly for compatibility reasons and are not so useful.
+</p>
+</dd>
+<dt> ‘<samp>skipcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>border_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Increase the quantizer for macroblocks close to borders.
+</p>
+</dd>
+<dt> ‘<samp>mblmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mblmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mepc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation bitrate penalty compensation (1.0 = 256).
+</p>
+</dd>
+<dt> ‘<samp>skip_loop_filter <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_idct <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_frame <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd>
+<p>Make decoder discard processing depending on the frame type selected
+by the option value.
+</p>
+<p>‘<samp>skip_loop_filter</samp>’ skips frame loop filtering, ‘<samp>skip_idct</samp>’
+skips frame IDCT/dequantization, ‘<samp>skip_frame</samp>’ skips decoding.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Discard no frame.
+</p>
+</dd>
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Discard useless frames like 0-sized frames.
+</p>
+</dd>
+<dt> ‘<samp>noref</samp>’</dt>
+<dd><p>Discard all non-reference frames.
+</p>
+</dd>
+<dt> ‘<samp>bidir</samp>’</dt>
+<dd><p>Discard all bidirectional frames.
+</p>
+</dd>
+<dt> ‘<samp>nokey</samp>’</dt>
+<dd><p>Discard all frames excepts keyframes.
+</p>
+</dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Discard all frames.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>default</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>bidir_refine <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Refine the two motion vectors used in bidirectional macroblocks.
+</p>
+</dd>
+<dt> ‘<samp>brd_scale <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Downscale frames for dynamic B-frame decision.
+</p>
+</dd>
+<dt> ‘<samp>keyint_min <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set minimum interval between IDR-frames.
+</p>
+</dd>
+<dt> ‘<samp>refs <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set reference frames to consider for motion compensation.
+</p>
+</dd>
+<dt> ‘<samp>chromaoffset <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set chroma qp offset from luma.
+</p>
+</dd>
+<dt> ‘<samp>trellis <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set rate-distortion optimal quantization.
+</p>
+</dd>
+<dt> ‘<samp>sc_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set value multiplied by qscale for each frame and added to
+scene_change_score.
+</p>
+</dd>
+<dt> ‘<samp>mv0_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>b_sensitivity <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Adjust sensitivity of b_frame_strategy 1.
+</p>
+</dd>
+<dt> ‘<samp>compression_level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>min_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>max_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>timecode_frame_start <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set GOP timecode frame start number, in non drop frame format.
+</p>
+</dd>
+<dt> ‘<samp>request_channels <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set desired number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>bits_per_raw_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>channel_layout <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>request_channel_layout <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>rc_max_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>rc_min_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>ticks_per_frame <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_primaries <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_trc <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>colorspace <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_range <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>chroma_sample_location <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>log_level_offset <var>integer</var></samp>’</dt>
+<dd><p>Set the log level offset.
+</p>
+</dd>
+<dt> ‘<samp>slices <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Number of slices, used in parallelized encoding.
+</p>
+</dd>
+<dt> ‘<samp>thread_type <var>flags</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select multithreading type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>slice</samp>’</dt>
+<dt> ‘<samp>frame</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>audio_service_type <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio service type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ma</samp>’</dt>
+<dd><p>Main Audio Service
+</p></dd>
+<dt> ‘<samp>ef</samp>’</dt>
+<dd><p>Effects
+</p></dd>
+<dt> ‘<samp>vi</samp>’</dt>
+<dd><p>Visually Impaired
+</p></dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dd><p>Hearing Impaired
+</p></dd>
+<dt> ‘<samp>di</samp>’</dt>
+<dd><p>Dialogue
+</p></dd>
+<dt> ‘<samp>co</samp>’</dt>
+<dd><p>Commentary
+</p></dd>
+<dt> ‘<samp>em</samp>’</dt>
+<dd><p>Emergency
+</p></dd>
+<dt> ‘<samp>vo</samp>’</dt>
+<dd><p>Voice Over
+</p></dd>
+<dt> ‘<samp>ka</samp>’</dt>
+<dd><p>Karaoke
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>request_sample_fmt <var>sample_fmt</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set sample format audio decoders should prefer. Default value is
+<code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_timebase <var>rational number</var></samp>’</dt>
+<dt> ‘<samp>sub_charenc <var>encoding</var> (<em>decoding,subtitles</em>)</samp>’</dt>
+<dd><p>Set the input subtitles character encoding.
+</p>
+</dd>
+<dt> ‘<samp>field_order <var>field_order</var> (<em>video</em>)</samp>’</dt>
+<dd><p>Set/override the field order of the video.
+Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>progressive</samp>’</dt>
+<dd><p>Progressive video
+</p></dd>
+<dt> ‘<samp>tt</samp>’</dt>
+<dd><p>Interlaced video, top field coded and displayed first
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>Interlaced video, bottom field coded and displayed first
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>Interlaced video, top coded first, bottom displayed first
+</p></dd>
+<dt> ‘<samp>bt</samp>’</dt>
+<dd><p>Interlaced video, bottom coded first, top displayed first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>skip_alpha <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set to 1 to disable processing alpha (transparency). This works like the
+‘<samp>gray</samp>’ flag in the ‘<samp>flags</samp>’ option which skips chroma information
+instead of alpha. Default is 0.
+</p></dd>
+</dl>
+
+
+<a name="Decoders"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Decoders">8. Decoders</a></h1>
+
+<p>Decoders are configured elements in FFmpeg which allow the decoding of
+multimedia streams.
+</p>
+<p>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 <code>--enable-lib</code> option. You can list all
+available decoders using the configure option <code>--list-decoders</code>.
+</p>
+<p>You can disable all the decoders with the configure option
+<code>--disable-decoders</code> and selectively enable / disable single decoders
+with the options <code>--enable-decoder=<var>DECODER</var></code> /
+<code>--disable-decoder=<var>DECODER</var></code>.
+</p>
+<p>The option <code>-decoders</code> of the ff* tools will display the list of
+enabled decoders.
+</p>
+
+<a name="Video-Decoders"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Video-Decoders">9. Video Decoders</a></h1>
+
+<p>A description of some of the currently available video decoders
+follows.
+</p>
+<a name="rawvideo-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rawvideo-1">9.1 rawvideo</a></h2>
+
+<p>Raw video decoder.
+</p>
+<p>This decoder decodes rawvideo streams.
+</p>
+<a name="Options-4"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-4">9.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>top <var>top_field_first</var></samp>’</dt>
+<dd><p>Specify the assumed field type of the input video.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>the video is assumed to be progressive (default)
+</p></dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>bottom-field-first is assumed
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>top-field-first is assumed
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="Audio-Decoders"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Audio-Decoders">10. Audio Decoders</a></h1>
+
+<p>A description of some of the currently available audio decoders
+follows.
+</p>
+<a name="ac3"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ac3">10.1 ac3</a></h2>
+
+<p>AC-3 audio decoder.
+</p>
+<p>This decoder implements part of ATSC A/52:2010 and ETSI TS 102 366, as well as
+the undocumented RealAudio 3 (a.k.a. dnet).
+</p>
+<a name="AC_002d3-Decoder-Options"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-AC_002d3-Decoder-Options">10.1.1 AC-3 Decoder Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-drc_scale <var>value</var></samp>’</dt>
+<dd><p>Dynamic Range Scale Factor. The factor to apply to dynamic range values
+from the AC-3 stream. This factor is applied exponentially.
+There are 3 notable scale factor ranges:
+</p><dl compact="compact">
+<dt> ‘<samp>drc_scale == 0</samp>’</dt>
+<dd><p>DRC disabled. Produces full range audio.
+</p></dd>
+<dt> ‘<samp>0 < drc_scale <= 1</samp>’</dt>
+<dd><p>DRC enabled. Applies a fraction of the stream DRC value.
+Audio reproduction is between full range and full compression.
+</p></dd>
+<dt> ‘<samp>drc_scale > 1</samp>’</dt>
+<dd><p>DRC enabled. Applies drc_scale asymmetrically.
+Loud sounds are fully compressed. Soft sounds are enhanced.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="ffwavesynth"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ffwavesynth">10.2 ffwavesynth</a></h2>
+
+<p>Internal wave synthetizer.
+</p>
+<p>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.
+</p>
+<a name="libcelt"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libcelt">10.3 libcelt</a></h2>
+
+<p>libcelt decoder wrapper.
+</p>
+<p>libcelt allows libavcodec to decode the Xiph CELT ultra-low delay audio codec.
+Requires the presence of the libcelt headers and library during configuration.
+You need to explicitly configure the build with <code>--enable-libcelt</code>.
+</p>
+<a name="libgsm"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libgsm">10.4 libgsm</a></h2>
+
+<p>libgsm decoder wrapper.
+</p>
+<p>libgsm allows libavcodec to decode the GSM full rate audio codec. Requires
+the presence of the libgsm headers and library during configuration. You need
+to explicitly configure the build with <code>--enable-libgsm</code>.
+</p>
+<p>This decoder supports both the ordinary GSM and the Microsoft variant.
+</p>
+<a name="libilbc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libilbc">10.5 libilbc</a></h2>
+
+<p>libilbc decoder wrapper.
+</p>
+<p>libilbc allows libavcodec to decode the Internet Low Bitrate Codec (iLBC)
+audio codec. Requires the presence of the libilbc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libilbc</code>.
+</p>
+<a name="Options-12"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-12">10.5.1 Options</a></h3>
+
+<p>The following option is supported by the libilbc wrapper.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>enhance</samp>’</dt>
+<dd>
+<p>Enable the enhancement of the decoded audio when set to 1. The default
+value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libopencore_002damrnb"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libopencore_002damrnb">10.6 libopencore-amrnb</a></h2>
+
+<p>libopencore-amrnb decoder wrapper.
+</p>
+<p>libopencore-amrnb allows libavcodec to decode the Adaptive Multi-Rate
+Narrowband audio codec. Using it requires the presence of the
+libopencore-amrnb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrnb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-NB exists, so users can decode AMR-NB
+without this library.
+</p>
+<a name="libopencore_002damrwb"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libopencore_002damrwb">10.7 libopencore-amrwb</a></h2>
+
+<p>libopencore-amrwb decoder wrapper.
+</p>
+<p>libopencore-amrwb allows libavcodec to decode the Adaptive Multi-Rate
+Wideband audio codec. Using it requires the presence of the
+libopencore-amrwb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrwb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-WB exists, so users can decode AMR-WB
+without this library.
+</p>
+<a name="libopus"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libopus">10.8 libopus</a></h2>
+
+<p>libopus decoder wrapper.
+</p>
+<p>libopus allows libavcodec to decode the Opus Interactive Audio Codec.
+Requires the presence of the libopus headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopus</code>.
+</p>
+
+<a name="Subtitles-Decoders"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Subtitles-Decoders">11. Subtitles Decoders</a></h1>
+
+<a name="dvdsub"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-dvdsub">11.1 dvdsub</a></h2>
+
+<p>This codec decodes the bitmap subtitles used in DVDs; the same subtitles can
+also be found in VobSub file pairs and in some Matroska files.
+</p>
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options">11.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>palette</samp>’</dt>
+<dd><p>Specify the global palette used by the bitmaps. When stored in VobSub, the
+palette is normally specified in the index file; in Matroska, the palette is
+stored in the codec extra-data in the same format as in VobSub. In DVDs, the
+palette is stored in the IFO file, and therefore not available when reading
+from dumped VOB files.
+</p>
+<p>The format for this option is a string containing 16 24-bits hexadecimal
+numbers (without 0x prefix) separated by comas, for example <code>0d00ee,
+ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1,
+7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b</code>.
+</p></dd>
+</dl>
+
+<a name="libzvbi_002dteletext"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libzvbi_002dteletext">11.2 libzvbi-teletext</a></h2>
+
+<p>Libzvbi allows libavcodec to decode DVB teletext pages and DVB teletext
+subtitles. Requires the presence of the libzvbi headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libzvbi</code>.
+</p>
+<a name="Options-8"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-8">11.2.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>txt_page</samp>’</dt>
+<dd><p>List of teletext page numbers to decode. You may use the special * string to
+match all pages. Pages that do not match the specified list are dropped.
+Default value is *.
+</p></dd>
+<dt> ‘<samp>txt_chop_top</samp>’</dt>
+<dd><p>Discards the top teletext line. Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_format</samp>’</dt>
+<dd><p>Specifies the format of the decoded subtitles. The teletext decoder is capable
+of decoding the teletext pages to bitmaps or to simple text, you should use
+"bitmap" for teletext pages, because certain graphics and colors cannot be
+expressed in simple text. You might use "text" for teletext based subtitles if
+your application can handle simple text based subtitles. Default value is
+bitmap.
+</p></dd>
+<dt> ‘<samp>txt_left</samp>’</dt>
+<dd><p>X offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_top</samp>’</dt>
+<dd><p>Y offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_chop_spaces</samp>’</dt>
+<dd><p>Chops leading and trailing spaces and removes empty lines from the generated
+text. This option is useful for teletext based subtitles where empty spaces may
+be present at the start or at the end of the lines or empty lines may be
+present between the subtitle lines because of double-sized teletext charactes.
+Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_duration</samp>’</dt>
+<dd><p>Sets the display duration of the decoded teletext pages or subtitles in
+miliseconds. Default value is 30000 which is 30 seconds.
+</p></dd>
+<dt> ‘<samp>txt_transparent</samp>’</dt>
+<dd><p>Force transparent background of the generated teletext bitmaps. Default value
+is 0 which means an opaque (black) background.
+</p></dd>
+</dl>
+
+<a name="Bitstream-Filters"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Bitstream-Filters">12. Bitstream Filters</a></h1>
+
+<p>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 <code>--list-bsfs</code>.
+</p>
+<p>You can disable all the bitstream filters using the configure option
+<code>--disable-bsfs</code>, and selectively enable any bitstream filter using
+the option <code>--enable-bsf=BSF</code>, or you can disable a particular
+bitstream filter using the option <code>--disable-bsf=BSF</code>.
+</p>
+<p>The option <code>-bsfs</code> of the ff* tools will display the list of
+all the supported bitstream filters included in your build.
+</p>
+<p>Below is a description of the currently available bitstream filters.
+</p>
+<a name="aac_005fadtstoasc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aac_005fadtstoasc">12.1 aac_adtstoasc</a></h2>
+
+<p>Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration
+bitstream filter.
+</p>
+<p>This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
+ADTS header and removes the ADTS header.
+</p>
+<p>This is required for example when copying an AAC stream from a raw
+ADTS AAC container to a FLV or a MOV/MP4 file.
+</p>
+<a name="chomp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-chomp">12.2 chomp</a></h2>
+
+<p>Remove zero padding at the end of a packet.
+</p>
+<a name="dump_005fextra"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-dump_005fextra">12.3 dump_extra</a></h2>
+
+<p>Add extradata to the beginning of the filtered packets.
+</p>
+<p>The additional argument specifies which packets should be filtered.
+It accepts the values:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>add extradata to all key packets, but only if <var>local_header</var> is
+set in the ‘<samp>flags2</samp>’ codec context field
+</p>
+</dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>add extradata to all key packets
+</p>
+</dd>
+<dt> ‘<samp>e</samp>’</dt>
+<dd><p>add extradata to all packets
+</p></dd>
+</dl>
+
+<p>If not specified it is assumed ‘<samp>k</samp>’.
+</p>
+<p>For example the following <code>ffmpeg</code> command forces a global
+header (thus disabling individual packet headers) in the H.264 packets
+generated by the <code>libx264</code> encoder, but corrects them by adding
+the header stored in extradata to the key packets:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
+</pre></td></tr></table>
+
+<a name="h264_005fmp4toannexb"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-h264_005fmp4toannexb">12.4 h264_mp4toannexb</a></h2>
+
+<p>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).
+</p>
+<p>This is required by some streaming formats, typically the MPEG-2
+transport stream format ("mpegts").
+</p>
+<p>For example to remux an MP4 file containing an H.264 stream to mpegts
+format with <code>ffmpeg</code>, you can use the command:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
+</pre></td></tr></table>
+
+<a name="imx_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-imx_005fdump_005fheader">12.5 imx_dump_header</a></h2>
+
+<a name="mjpeg2jpeg"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mjpeg2jpeg">12.6 mjpeg2jpeg</a></h2>
+
+<p>Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
+</p>
+<p>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
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
+</pre></td></tr></table>
+
+<p>Unfortunately, these chunks are incomplete JPEG images, because
+they lack the DHT segment required for decoding. Quoting from
+<a href="http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml">http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml</a>:
+</p>
+<p>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."
+</p>
+<p>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.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
+exiftran -i -9 frame*.jpg
+ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
+</pre></td></tr></table>
+
+<a name="mjpega_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mjpega_005fdump_005fheader">12.7 mjpega_dump_header</a></h2>
+
+<a name="movsub"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-movsub">12.8 movsub</a></h2>
+
+<a name="mp3_005fheader_005fdecompress"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mp3_005fheader_005fdecompress">12.9 mp3_header_decompress</a></h2>
+
+<a name="noise"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-noise">12.10 noise</a></h2>
+
+<a name="remove_005fextra"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-remove_005fextra">12.11 remove_extra</a></h2>
+
+<a name="Format-Options"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Format-Options">13. Format Options</a></h1>
+
+<p>The libavformat library provides some generic global options, which
+can be set on all the muxers and demuxers. In addition each muxer or
+demuxer may support so-called private options, which are specific for
+that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>avioflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>direct</samp>’</dt>
+<dd><p>Reduce buffering.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>probesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set probing size in bytes, i.e. the size of the data to analyze to get
+stream information. A higher value will allow to detect more
+information in case it is dispersed into the stream, but will increase
+latency. Must be an integer not lesser than 32. It is 5000000 by default.
+</p>
+</dd>
+<dt> ‘<samp>packetsize <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set packet size.
+</p>
+</dd>
+<dt> ‘<samp>fflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set format flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ignidx</samp>’</dt>
+<dd><p>Ignore index.
+</p></dd>
+<dt> ‘<samp>genpts</samp>’</dt>
+<dd><p>Generate PTS.
+</p></dd>
+<dt> ‘<samp>nofillin</samp>’</dt>
+<dd><p>Do not fill in missing values that can be exactly calculated.
+</p></dd>
+<dt> ‘<samp>noparse</samp>’</dt>
+<dd><p>Disable AVParsers, this needs <code>+nofillin</code> too.
+</p></dd>
+<dt> ‘<samp>igndts</samp>’</dt>
+<dd><p>Ignore DTS.
+</p></dd>
+<dt> ‘<samp>discardcorrupt</samp>’</dt>
+<dd><p>Discard corrupted frames.
+</p></dd>
+<dt> ‘<samp>sortdts</samp>’</dt>
+<dd><p>Try to interleave output packets by DTS.
+</p></dd>
+<dt> ‘<samp>keepside</samp>’</dt>
+<dd><p>Do not merge side data.
+</p></dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Enable RTP MP4A-LATM payload.
+</p></dd>
+<dt> ‘<samp>nobuffer</samp>’</dt>
+<dd><p>Reduce the latency introduced by optional buffering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seek2any <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Allow seeking to non-keyframes on demuxer level when supported if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>analyzeduration <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Specify how many microseconds are analyzed to probe the input. A
+higher value will allow to detect more accurate information, but will
+increase latency. It defaults to 5,000,000 microseconds = 5 seconds.
+</p>
+</dd>
+<dt> ‘<samp>cryptokey <var>hexadecimal string</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set decryption key.
+</p>
+</dd>
+<dt> ‘<samp>indexmem <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for timestamp index (per stream).
+</p>
+</dd>
+<dt> ‘<samp>rtbufsize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for buffering real-time frames.
+</p>
+</dd>
+<dt> ‘<samp>fdebug <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ts</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>max_delay <var>integer</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set maximum muxing or demuxing delay in microseconds.
+</p>
+</dd>
+<dt> ‘<samp>fpsprobesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of frames used to probe fps.
+</p>
+</dd>
+<dt> ‘<samp>audio_preload <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds by which audio packets should be interleaved earlier.
+</p>
+</dd>
+<dt> ‘<samp>chunk_duration <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>chunk_size <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set size in bytes for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>err_detect, f_err_detect <var>flags</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set error detection flags. <code>f_err_detect</code> is deprecated and
+should be used only via the <code>ffmpeg</code> tool.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>Verify embedded CRCs.
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>Detect bitstream specification deviations.
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>Detect improper bitstream length.
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>Abort decoding on minor error detection.
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>Consider things that violate the spec and have not been seen in the
+wild as errors.
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>Consider all spec non compliancies as errors.
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>Consider things that a sane encoder should not do as an error.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_wallclock_as_timestamps <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Use wallclock as timestamps.
+</p>
+</dd>
+<dt> ‘<samp>avoid_negative_ts <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>make_non_negative</samp>’</dt>
+<dd><p>Shift timestamps to make them non-negative.
+Also note that this affects only leading negative timestamps, and not
+non-monotonic negative timestamps.
+</p></dd>
+<dt> ‘<samp>make_zero</samp>’</dt>
+<dd><p>Shift timestamps so that the first timestamp is 0.
+</p></dd>
+<dt> ‘<samp>auto (default)</samp>’</dt>
+<dd><p>Enables shifting when required by the target format.
+</p></dd>
+<dt> ‘<samp>disabled</samp>’</dt>
+<dd><p>Disables shifting of timestamp.
+</p></dd>
+</dl>
+
+<p>When shifting is enabled, all output timestamps are shifted by the
+same amount. Audio, video, and subtitles desynching and relative
+timestamp differences are preserved compared to how they would have
+been without shifting.
+</p>
+</dd>
+<dt> ‘<samp>skip_initial_bytes <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of bytes to skip before reading header and frames if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>correct_ts_overflow <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Correct single timestamp overflows if set to 1. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>flush_packets <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Flush the underlying I/O stream after each packet. Default 1 enables it, and
+has the effect of reducing the latency; 0 disables it and may slightly
+increase performance in some cases.
+</p>
+</dd>
+<dt> ‘<samp>output_ts_offset <var>offset</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the output time offset.
+</p>
+<p><var>offset</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#time-duration-syntax">(ffmpeg-utils)time duration syntax</a>.
+</p>
+<p>The offset is added by the muxer to the output timestamps.
+</p>
+<p>Specifying a positive offset means that the corresponding streams are
+delayed bt the time duration specified in <var>offset</var>. Default value
+is <code>0</code> (meaning that no offset is applied).
+</p></dd>
+</dl>
+
+
+<p><a name="Format-stream-specifiers"></a>
+</p><a name="Format-stream-specifiers-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Format-stream-specifiers-1">13.1 Format stream specifiers</a></h2>
+
+<p>Format stream specifiers allow selection of one or more streams that
+match specific properties.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index.
+</p>
+</dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio,
+’s’ for subtitle, ’d’ for data, and ’t’ for attachments. If
+<var>stream_index</var> is given, then it matches the stream number
+<var>stream_index</var> of this type. Otherwise, it matches all streams of
+this type.
+</p>
+</dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number
+<var>stream_index</var> in the program with the id
+<var>program_id</var>. Otherwise, it matches all streams in the program.
+</p>
+</dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<p>The exact semantics of stream specifiers is defined by the
+<code>avformat_match_stream_specifier()</code> function declared in the
+‘<tt>libavformat/avformat.h</tt>’ header.
+</p>
+<a name="Demuxers"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Demuxers">14. Demuxers</a></h1>
+
+<p>Demuxers are configured elements in FFmpeg that can read the
+multimedia streams from a particular type of file.
+</p>
+<p>When you configure your FFmpeg build, all the supported demuxers
+are enabled by default. You can list all available ones using the
+configure option <code>--list-demuxers</code>.
+</p>
+<p>You can disable all the demuxers using the configure option
+<code>--disable-demuxers</code>, and selectively enable a single demuxer with
+the option <code>--enable-demuxer=<var>DEMUXER</var></code>, or disable it
+with the option <code>--disable-demuxer=<var>DEMUXER</var></code>.
+</p>
+<p>The option <code>-formats</code> of the ff* tools will display the list of
+enabled demuxers.
+</p>
+<p>The description of some of the currently available demuxers follows.
+</p>
+<a name="applehttp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-applehttp">14.1 applehttp</a></h2>
+
+<p>Apple HTTP Live Streaming demuxer.
+</p>
+<p>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".
+</p>
+<a name="asf"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-asf">14.2 asf</a></h2>
+
+<p>Advanced Systems Format demuxer.
+</p>
+<p>This demuxer is used to demux ASF files and MMS network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-no_resync_search <var>bool</var></samp>’</dt>
+<dd><p>Do not try to resynchronize by looking for a certain optional start code.
+</p></dd>
+</dl>
+
+<p><a name="concat"></a>
+</p><a name="concat-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-concat-1">14.3 concat</a></h2>
+
+<p>Virtual concatenation script demuxer.
+</p>
+<p>This demuxer reads a list of files and other directives from a text file and
+demuxes them one after the other, as if all their packet had been muxed
+together.
+</p>
+<p>The timestamps in the files are adjusted so that the first file starts at 0
+and each next file starts where the previous one finishes. Note that it is
+done globally and may cause gaps if all streams do not have exactly the same
+length.
+</p>
+<p>All files must have the same streams (same codecs, same time base, etc.).
+</p>
+<p>The duration of each file is used to adjust the timestamps of the next file:
+if the duration is incorrect (because it was computed using the bit-rate or
+because the file is truncated, for example), it can cause artifacts. The
+<code>duration</code> directive can be used to override the duration stored in
+each file.
+</p>
+<a name="Syntax-1"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Syntax-1">14.3.1 Syntax</a></h3>
+
+<p>The script is a text file in extended-ASCII, with one directive per line.
+Empty lines, leading spaces and lines starting with ’#’ are ignored. The
+following directive is recognized:
+</p>
+<dl compact="compact">
+<dt> ‘<samp><code>file <var>path</var></code></samp>’</dt>
+<dd><p>Path to a file to read; special characters and spaces must be escaped with
+backslash or single quotes.
+</p>
+<p>All subsequent directives apply to that file.
+</p>
+</dd>
+<dt> ‘<samp><code>ffconcat version 1.0</code></samp>’</dt>
+<dd><p>Identify the script type and version. It also sets the ‘<samp>safe</samp>’ option
+to 1 if it was to its default -1.
+</p>
+<p>To make FFmpeg recognize the format automatically, this directive must
+appears exactly as is (no extra space or byte-order-mark) on the very first
+line of the script.
+</p>
+</dd>
+<dt> ‘<samp><code>duration <var>dur</var></code></samp>’</dt>
+<dd><p>Duration of the file. This information can be specified from the file;
+specifying it here may be more efficient or help if the information from the
+file is not available or accurate.
+</p>
+<p>If the duration is set for all files, then it is possible to seek in the
+whole concatenated video.
+</p>
+</dd>
+</dl>
+
+<a name="Options-11"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-11">14.3.2 Options</a></h3>
+
+<p>This demuxer accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>safe</samp>’</dt>
+<dd><p>If set to 1, reject unsafe file paths. A file path is considered safe if it
+does not contain a protocol specification and is relative and all components
+only contain characters from the portable character set (letters, digits,
+period, underscore and hyphen) and have no period at the beginning of a
+component.
+</p>
+<p>If set to 0, any file name is accepted.
+</p>
+<p>The default is -1, it is equivalent to 1 if the format was automatically
+probed and 0 otherwise.
+</p>
+</dd>
+</dl>
+
+<a name="flv"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-flv">14.4 flv</a></h2>
+
+<p>Adobe Flash Video Format demuxer.
+</p>
+<p>This demuxer is used to demux FLV files and RTMP network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-flv_metadata <var>bool</var></samp>’</dt>
+<dd><p>Allocate the streams according to the onMetaData array content.
+</p></dd>
+</dl>
+
+<a name="libgme"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libgme">14.5 libgme</a></h2>
+
+<p>The Game Music Emu library is a collection of video game music file emulators.
+</p>
+<p>See <a href="http://code.google.com/p/game-music-emu/">http://code.google.com/p/game-music-emu/</a> for more information.
+</p>
+<p>Some files have multiple tracks. The demuxer will pick the first track by
+default. The ‘<samp>track_index</samp>’ option can be used to select a different
+track. Track indexes start at 0. The demuxer exports the number of tracks as
+<var>tracks</var> meta data entry.
+</p>
+<p>For very large files, the ‘<samp>max_size</samp>’ option may have to be adjusted.
+</p>
+<a name="libquvi"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libquvi">14.6 libquvi</a></h2>
+
+<p>Play media from Internet services using the quvi project.
+</p>
+<p>The demuxer accepts a ‘<samp>format</samp>’ option to request a specific quality. It
+is by default set to <var>best</var>.
+</p>
+<p>See <a href="http://quvi.sourceforge.net/">http://quvi.sourceforge.net/</a> for more information.
+</p>
+<p>FFmpeg needs to be built with <code>--enable-libquvi</code> for this demuxer to be
+enabled.
+</p>
+<a name="image2"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-image2">14.7 image2</a></h2>
+
+<p>Image file demuxer.
+</p>
+<p>This demuxer reads from a list of image files specified by a pattern.
+The syntax and meaning of the pattern is specified by the
+option <var>pattern_type</var>.
+</p>
+<p>The pattern may contain a suffix which is used to automatically
+determine the format of the images contained in the files.
+</p>
+<p>The size, the pixel format, and the format of each image must be the
+same for all the files in the sequence.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate for the video stream. It defaults to 25.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>If set to 1, loop over the input. Default value is 0.
+</p></dd>
+<dt> ‘<samp>pattern_type</samp>’</dt>
+<dd><p>Select the pattern type used to interpret the provided filename.
+</p>
+<p><var>pattern_type</var> accepts one of the following values.
+</p><dl compact="compact">
+<dt> ‘<samp>sequence</samp>’</dt>
+<dd><p>Select a sequence pattern type, used to specify a sequence of files
+indexed by sequential numbers.
+</p>
+<p>A sequence pattern may contain the string "%d" or "%0<var>N</var>d", which
+specifies the position of the characters representing a sequential
+number in each filename matched by the pattern. If the form
+"%d0<var>N</var>d" is used, the string representing the number in each
+filename is 0-padded and <var>N</var> is the total number of 0-padded
+digits representing the number. The literal character ’%’ can be
+specified in the pattern with the string "%%".
+</p>
+<p>If the sequence pattern contains "%d" or "%0<var>N</var>d", the first filename of
+the file list specified by the pattern must contain a number
+inclusively contained between <var>start_number</var> and
+<var>start_number</var>+<var>start_number_range</var>-1, and all the following
+numbers must be sequential.
+</p>
+<p>For example the pattern "img-%03d.bmp" will match a sequence of
+filenames of the form ‘<tt>img-001.bmp</tt>’, ‘<tt>img-002.bmp</tt>’, ...,
+‘<tt>img-010.bmp</tt>’, etc.; the pattern "i%%m%%g-%d.jpg" will match a
+sequence of filenames of the form ‘<tt>i%m%g-1.jpg</tt>’,
+‘<tt>i%m%g-2.jpg</tt>’, ..., ‘<tt>i%m%g-10.jpg</tt>’, etc.
+</p>
+<p>Note that the pattern must not necessarily contain "%d" or
+"%0<var>N</var>d", for example to convert a single image file
+‘<tt>img.jpeg</tt>’ you can employ the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i img.jpeg img.png
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>glob</samp>’</dt>
+<dd><p>Select a glob wildcard pattern type.
+</p>
+<p>The pattern is interpreted like a <code>glob()</code> pattern. This is only
+selectable if libavformat was compiled with globbing support.
+</p>
+</dd>
+<dt> ‘<samp>glob_sequence <em>(deprecated, will be removed)</em></samp>’</dt>
+<dd><p>Select a mixed glob wildcard/sequence pattern.
+</p>
+<p>If your version of libavformat was compiled with globbing support, and
+the provided pattern contains at least one glob meta character among
+<code>%*?[]{}</code> that is preceded by an unescaped "%", the pattern is
+interpreted like a <code>glob()</code> pattern, otherwise it is interpreted
+like a sequence pattern.
+</p>
+<p>All glob special characters <code>%*?[]{}</code> must be prefixed
+with "%". To escape a literal "%" you shall use "%%".
+</p>
+<p>For example the pattern <code>foo-%*.jpeg</code> will match all the
+filenames prefixed by "foo-" and terminating with ".jpeg", and
+<code>foo-%?%?%?.jpeg</code> will match all the filenames prefixed with
+"foo-", followed by a sequence of three characters, and terminating
+with ".jpeg".
+</p>
+<p>This pattern type is deprecated in favor of <var>glob</var> and
+<var>sequence</var>.
+</p></dd>
+</dl>
+
+<p>Default value is <var>glob_sequence</var>.
+</p></dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the pixel format of the images to read. If not specified the pixel
+format is guessed from the first image file in the sequence.
+</p></dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>Set the index of the file matched by the image file pattern to start
+to read from. Default value is 0.
+</p></dd>
+<dt> ‘<samp>start_number_range</samp>’</dt>
+<dd><p>Set the index interval range to check when looking for the first image
+file in the sequence, starting from <var>start_number</var>. Default value
+is 5.
+</p></dd>
+<dt> ‘<samp>ts_from_file</samp>’</dt>
+<dd><p>If set to 1, will set frame timestamp to modification time of image file. Note
+that monotonity of timestamps is not provided: images go in the same order as
+without this option. Default value is 0.
+</p></dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size of the images to read. If not specified the video
+size is guessed from the first image file in the sequence.
+</p></dd>
+</dl>
+
+<a name="Examples-53"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-53">14.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for creating a video from the images in the file
+sequence ‘<tt>img-001.jpeg</tt>’, ‘<tt>img-002.jpeg</tt>’, ..., assuming an
+input frame rate of 10 frames per second:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+As above, but start by reading from a file with index 100 in the sequence:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+Read images matching the "*.png" glob pattern , that is all the files
+terminating with the ".png" suffix:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mpegts"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mpegts">14.8 mpegts</a></h2>
+
+<p>MPEG-2 transport stream demuxer.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fix_teletext_pts</samp>’</dt>
+<dd><p>Overrides teletext packet PTS and DTS values with the timestamps calculated
+from the PCR of the first program which the teletext stream is part of and is
+not discarded. Default value is 1, set this option to 0 if you want your
+teletext packet PTS and DTS values untouched.
+</p></dd>
+</dl>
+
+<a name="rawvideo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rawvideo">14.9 rawvideo</a></h2>
+
+<p>Raw video demuxer.
+</p>
+<p>This demuxer allows one to read raw video data. Since there is no header
+specifying the assumed video parameters, the user must specify them
+in order to be able to decode the data correctly.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set input video frame rate. Default value is 25.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the input video pixel format. Default value is <code>yuv420p</code>.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the input video size. This value must be specified explicitly.
+</p></dd>
+</dl>
+
+<p>For example to read a rawvideo file ‘<tt>input.raw</tt>’ with
+<code>ffplay</code>, assuming a pixel format of <code>rgb24</code>, a video
+size of <code>320x240</code>, and a frame rate of 10 images per second, use
+the command:
+</p><table><tr><td> </td><td><pre class="example">ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
+</pre></td></tr></table>
+
+<a name="sbg"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sbg">14.10 sbg</a></h2>
+
+<p>SBaGen script demuxer.
+</p>
+<p>This demuxer reads the script language used by SBaGen
+<a href="http://uazu.net/sbagen/">http://uazu.net/sbagen/</a> to generate binaural beats sessions. A SBG
+script looks like that:
+</p><table><tr><td> </td><td><pre class="example">-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
+</pre></td></tr></table>
+
+<p>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 <var>NOW</var> 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.
+</p>
+<a name="tedcaptions"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-tedcaptions">14.11 tedcaptions</a></h2>
+
+<p>JSON captions used for <a href="http://www.ted.com/">TED Talks</a>.
+</p>
+<p>TED does not provide links to the captions, but they can be guessed from the
+page. The file ‘<tt>tools/bookmarklets.html</tt>’ from the FFmpeg source tree
+contains a bookmarklet to expose them.
+</p>
+<p>This demuxer accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Set the start time of the TED talk, in milliseconds. The default is 15000
+(15s). It is used to sync the captions with the downloadable videos, because
+they include a 15s intro.
+</p></dd>
+</dl>
+
+<p>Example: convert the captions to a format most players understand:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
+</pre></td></tr></table>
+
+<a name="Metadata"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Metadata">15. Metadata</a></h1>
+
+<p>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.
+</p>
+<p>The file format is as follows:
+</p><ol>
+<li>
+A file consists of a header and a number of metadata tags divided into sections,
+each on its own line.
+
+</li><li>
+The header is a ’;FFMETADATA’ string, followed by a version number (now 1).
+
+</li><li>
+Metadata tags are of the form ’key=value’
+
+</li><li>
+Immediately after header follows global metadata
+
+</li><li>
+After global metadata there may be sections with per-stream/per-chapter
+metadata.
+
+</li><li>
+A section starts with the section name in uppercase (i.e. STREAM or CHAPTER) in
+brackets (’[’, ’]’) and ends with next section or end of file.
+
+</li><li>
+At the beginning of a chapter section there may be an optional timebase to be
+used for start/end values. It must be in form ’TIMEBASE=num/den’, where num and
+den are integers. If the timebase is missing then start/end times are assumed to
+be in milliseconds.
+Next a chapter section must contain chapter start and end times in form
+’START=num’, ’END=num’, where num is a positive integer.
+
+</li><li>
+Empty lines and lines starting with ’;’ or ’#’ are ignored.
+
+</li><li>
+Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a
+newline) must be escaped with a backslash ’\’.
+
+</li><li>
+Note that whitespace in metadata (e.g. foo = bar) is considered to be a part of
+the tag (in the example above key is ’foo ’, value is ’ bar’).
+</li></ol>
+
+<p>A ffmetadata file might look like this:
+</p><table><tr><td> </td><td><pre class="example">;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
+</pre></td></tr></table>
+
+<p>By using the ffmetadata muxer and demuxer it is possible to extract
+metadata from an input file to an ffmetadata file, and then transcode
+the file into an output file with the edited ffmetadata file.
+</p>
+<p>Extracting an ffmetadata file with ‘<tt>ffmpeg</tt>’ goes as follows:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
+</pre></td></tr></table>
+
+<p>Reinserting edited metadata information from the FFMETADATAFILE file can
+be done as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
+</pre></td></tr></table>
+
+<a name="Protocols"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Protocols">16. Protocols</a></h1>
+
+<p>Protocols are configured elements in FFmpeg that enable access to
+resources that require specific protocols.
+</p>
+<p>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".
+</p>
+<p>You can disable all the protocols using the configure option
+"–disable-protocols", and selectively enable a protocol using the
+option "–enable-protocol=<var>PROTOCOL</var>", or you can disable a
+particular protocol using the option
+"–disable-protocol=<var>PROTOCOL</var>".
+</p>
+<p>The option "-protocols" of the ff* tools will display the list of
+supported protocols.
+</p>
+<p>A description of the currently available protocols follows.
+</p>
+<a name="bluray"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-bluray">16.1 bluray</a></h2>
+
+<p>Read BluRay playlist.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>angle</samp>’</dt>
+<dd><p>BluRay angle
+</p>
+</dd>
+<dt> ‘<samp>chapter</samp>’</dt>
+<dd><p>Start chapter (1...N)
+</p>
+</dd>
+<dt> ‘<samp>playlist</samp>’</dt>
+<dd><p>Playlist to read (BDMV/PLAYLIST/?????.mpls)
+</p>
+</dd>
+</dl>
+
+<p>Examples:
+</p>
+<p>Read longest playlist from BluRay mounted to /mnt/bluray:
+</p><table><tr><td> </td><td><pre class="example">bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<p>Read angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2:
+</p><table><tr><td> </td><td><pre class="example">-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<a name="cache"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-cache">16.2 cache</a></h2>
+
+<p>Caching wrapper for input stream.
+</p>
+<p>Cache the input stream to temporary file. It brings seeking capability to live streams.
+</p>
+<table><tr><td> </td><td><pre class="example">cache:<var>URL</var>
+</pre></td></tr></table>
+
+<a name="concat-3"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-concat-3">16.3 concat</a></h2>
+
+<p>Physical concatenation protocol.
+</p>
+<p>Allow to read and seek from many resource in sequence as if they were
+a unique resource.
+</p>
+<p>A URL accepted by this protocol has the syntax:
+</p><table><tr><td> </td><td><pre class="example">concat:<var>URL1</var>|<var>URL2</var>|...|<var>URLN</var>
+</pre></td></tr></table>
+
+<p>where <var>URL1</var>, <var>URL2</var>, ..., <var>URLN</var> are the urls of the
+resource to be concatenated, each one possibly specifying a distinct
+protocol.
+</p>
+<p>For example to read a sequence of files ‘<tt>split1.mpeg</tt>’,
+‘<tt>split2.mpeg</tt>’, ‘<tt>split3.mpeg</tt>’ with <code>ffplay</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
+</pre></td></tr></table>
+
+<p>Note that you may need to escape the character "|" which is special for
+many shells.
+</p>
+<a name="crypto"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-crypto">16.4 crypto</a></h2>
+
+<p>AES-encrypted stream reading protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>Set the AES decryption key binary block from given hexadecimal representation.
+</p>
+</dd>
+<dt> ‘<samp>iv</samp>’</dt>
+<dd><p>Set the AES decryption initialization vector binary block from given hexadecimal representation.
+</p></dd>
+</dl>
+
+<p>Accepted URL formats:
+</p><table><tr><td> </td><td><pre class="example">crypto:<var>URL</var>
+crypto+<var>URL</var>
+</pre></td></tr></table>
+
+<a name="data"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-data">16.5 data</a></h2>
+
+<p>Data in-line in the URI. See <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">http://en.wikipedia.org/wiki/Data_URI_scheme</a>.
+</p>
+<p>For example, to convert a GIF file given inline with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
+</pre></td></tr></table>
+
+<a name="file"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-file">16.6 file</a></h2>
+
+<p>File access protocol.
+</p>
+<p>Allow to read from or write to a file.
+</p>
+<p>A file URL can have the form:
+</p><table><tr><td> </td><td><pre class="example">file:<var>filename</var>
+</pre></td></tr></table>
+
+<p>where <var>filename</var> is the path of the file to read.
+</p>
+<p>An URL that does not have a protocol prefix will be assumed to be a
+file URL. Depending on the build, an URL that looks like a Windows
+path with the drive letter at the beginning will also be assumed to be
+a file URL (usually not the case in builds for unix-like systems).
+</p>
+<p>For example to read from a file ‘<tt>input.mpeg</tt>’ with <code>ffmpeg</code>
+use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i file:input.mpeg output.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable for files on slow medium.
+</p></dd>
+</dl>
+
+<a name="ftp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ftp">16.7 ftp</a></h2>
+
+<p>FTP (File Transfer Protocol).
+</p>
+<p>Allow to read from or write to remote resources using FTP protocol.
+</p>
+<p>Following syntax is required.
+</p><table><tr><td> </td><td><pre class="example">ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>ftp-anonymous-password</samp>’</dt>
+<dd><p>Password used when login as anonymous user. Typically an e-mail address
+should be used.
+</p>
+</dd>
+<dt> ‘<samp>ftp-write-seekable</samp>’</dt>
+<dd><p>Control seekability of connection during encoding. If set to 1 the
+resource is supposed to be seekable, if set to 0 it is assumed not
+to be seekable. Default value is 0.
+</p></dd>
+</dl>
+
+<p>NOTE: Protocol can be used as output, but it is recommended to not do
+it, unless special care is taken (tests, customized server configuration
+etc.). Different FTP servers behave in different way during seek
+operation. ff* tools may produce incomplete content due to server limitations.
+</p>
+<a name="gopher"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-gopher">16.8 gopher</a></h2>
+
+<p>Gopher protocol.
+</p>
+<a name="hls"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-hls">16.9 hls</a></h2>
+
+<p>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.
+The nested protocol is declared by specifying
+"+<var>proto</var>" after the hls URI scheme name, where <var>proto</var>
+is either "file" or "http".
+</p>
+<table><tr><td> </td><td><pre class="example">hls+http://host/path/to/remote/resource.m3u8
+hls+file://path/to/local/resource.m3u8
+</pre></td></tr></table>
+
+<p>Using this protocol is discouraged - the hls demuxer should work
+just as well (if not, please report the issues) and is more complete.
+To use the hls demuxer instead, simply use the direct URLs to the
+m3u8 files.
+</p>
+<a name="http"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-http">16.10 http</a></h2>
+
+<p>HTTP (Hyper Text Transfer Protocol).
+</p>
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>seekable</samp>’</dt>
+<dd><p>Control seekability of connection. If set to 1 the resource is
+supposed to be seekable, if set to 0 it is assumed not to be seekable,
+if set to -1 it will try to autodetect if it is seekable. Default
+value is -1.
+</p>
+</dd>
+<dt> ‘<samp>chunked_post</samp>’</dt>
+<dd><p>If set to 1 use chunked Transfer-Encoding for posts, default is 1.
+</p>
+</dd>
+<dt> ‘<samp>content_type</samp>’</dt>
+<dd><p>Set a specific content type for the POST messages.
+</p>
+</dd>
+<dt> ‘<samp>headers</samp>’</dt>
+<dd><p>Set custom HTTP headers, can override built in default headers. The
+value must be a string encoding the headers.
+</p>
+</dd>
+<dt> ‘<samp>multiple_requests</samp>’</dt>
+<dd><p>Use persistent connections if set to 1, default is 0.
+</p>
+</dd>
+<dt> ‘<samp>post_data</samp>’</dt>
+<dd><p>Set custom HTTP post data.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dt> ‘<samp>user_agent</samp>’</dt>
+<dd><p>Override the User-Agent header. If not specified the protocol will use a
+string describing the libavformat build. ("Lavf/<version>")
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>mime_type</samp>’</dt>
+<dd><p>Export the MIME type.
+</p>
+</dd>
+<dt> ‘<samp>icy</samp>’</dt>
+<dd><p>If set to 1 request ICY (SHOUTcast) metadata from the server. If the server
+supports this, the metadata has to be retrieved by the application by reading
+the ‘<samp>icy_metadata_headers</samp>’ and ‘<samp>icy_metadata_packet</samp>’ options.
+The default is 0.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_headers</samp>’</dt>
+<dd><p>If the server supports ICY metadata, this contains the ICY-specific HTTP reply
+headers, separated by newline characters.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_packet</samp>’</dt>
+<dd><p>If the server supports ICY metadata, and ‘<samp>icy</samp>’ was set to 1, this
+contains the last non-empty metadata packet sent by the server. It should be
+polled in regular intervals by applications interested in mid-stream metadata
+updates.
+</p>
+</dd>
+<dt> ‘<samp>cookies</samp>’</dt>
+<dd><p>Set the cookies to be sent in future requests. The format of each cookie is the
+same as the value of a Set-Cookie HTTP response field. Multiple cookies can be
+delimited by a newline character.
+</p>
+</dd>
+<dt> ‘<samp>offset</samp>’</dt>
+<dd><p>Set initial byte offset.
+</p>
+</dd>
+<dt> ‘<samp>end_offset</samp>’</dt>
+<dd><p>Try to limit the request to bytes preceding this offset.
+</p></dd>
+</dl>
+
+<a name="HTTP-Cookies"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-HTTP-Cookies">16.10.1 HTTP Cookies</a></h3>
+
+<p>Some HTTP requests will be denied unless cookie values are passed in with the
+request. The ‘<samp>cookies</samp>’ option allows these cookies to be specified. At
+the very least, each cookie must specify a value along with a path and domain.
+HTTP requests that match both the domain and path will automatically include the
+cookie value in the HTTP Cookie header field. Multiple cookies can be delimited
+by a newline.
+</p>
+<p>The required syntax to play a stream specifying a cookie is:
+</p><table><tr><td> </td><td><pre class="example">ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
+</pre></td></tr></table>
+
+<a name="mmst"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mmst">16.11 mmst</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over TCP.
+</p>
+<a name="mmsh"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mmsh">16.12 mmsh</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over HTTP.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">mmsh://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<a name="md5"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-md5">16.13 md5</a></h2>
+
+<p>MD5 output protocol.
+</p>
+<p>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.
+</p>
+<p>Some examples follow.
+</p><table><tr><td> </td><td><pre class="example"># 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:
+</pre></td></tr></table>
+
+<p>Note that some formats (typically MOV) require the output protocol to
+be seekable, so they will fail with the MD5 output protocol.
+</p>
+<a name="pipe"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pipe">16.14 pipe</a></h2>
+
+<p>UNIX pipe access protocol.
+</p>
+<p>Allow to read and write from UNIX pipes.
+</p>
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">pipe:[<var>number</var>]
+</pre></td></tr></table>
+
+<p><var>number</var> is the number corresponding to the file descriptor of the
+pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If <var>number</var>
+is not specified, by default the stdout file descriptor will be used
+for writing, stdin for reading.
+</p>
+<p>For example to read from stdin with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">cat test.wav | ffmpeg -i pipe:0
+# ...this is the same as...
+cat test.wav | ffmpeg -i pipe:
+</pre></td></tr></table>
+
+<p>For writing to stdout with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable if data transmission is slow.
+</p></dd>
+</dl>
+
+<p>Note that some formats (typically MOV), require the output protocol to
+be seekable, so they will fail with the pipe output protocol.
+</p>
+<a name="rtmp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtmp">16.15 rtmp</a></h2>
+
+<p>Real-Time Messaging Protocol.
+</p>
+<p>The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia
+content across a TCP/IP network.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">rtmp://[<var>username</var>:<var>password</var>@]<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>instance</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<p>The accepted parameters are:
+</p><dl compact="compact">
+<dt> ‘<samp>username</samp>’</dt>
+<dd><p>An optional username (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>password</samp>’</dt>
+<dd><p>An optional password (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>The address of the RTMP server.
+</p>
+</dd>
+<dt> ‘<samp>port</samp>’</dt>
+<dd><p>The number of the TCP port to use (by default is 1935).
+</p>
+</dd>
+<dt> ‘<samp>app</samp>’</dt>
+<dd><p>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. ‘<tt>/ondemand/</tt>’, ‘<tt>/flash/live/</tt>’, etc.). You can override
+the value parsed from the URI through the <code>rtmp_app</code> option, too.
+</p>
+</dd>
+<dt> ‘<samp>playpath</samp>’</dt>
+<dd><p>It is the path or name of the resource to play with reference to the
+application specified in <var>app</var>, may be prefixed by "mp4:". You
+can override the value parsed from the URI through the <code>rtmp_playpath</code>
+option, too.
+</p>
+</dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Maximum time to wait for the incoming connection. Implies listen.
+</p></dd>
+</dl>
+
+<p>Additionally, the following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p><dl compact="compact">
+<dt> ‘<samp>rtmp_app</samp>’</dt>
+<dd><p>Name of application to connect on the RTMP server. This option
+overrides the parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_buffer</samp>’</dt>
+<dd><p>Set the client buffer time in milliseconds. The default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_conn</samp>’</dt>
+<dd><p>Extra arbitrary AMF connection parameters, parsed from a string,
+e.g. like <code>B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0</code>.
+Each value is prefixed by a single character denoting the type,
+B for Boolean, N for number, S for string, O for object, or Z for null,
+followed by a colon. For Booleans the data must be either 0 or 1 for
+FALSE or TRUE, respectively. Likewise for Objects the data must be 0 or
+1 to end or begin an object, respectively. Data items in subobjects may
+be named, by prefixing the type with ’N’ and specifying the name before
+the value (i.e. <code>NB:myFlag:1</code>). This option may be used multiple
+times to construct arbitrary AMF sequences.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flashver</samp>’</dt>
+<dd><p>Version of the Flash plugin used to run the SWF player. The default
+is LNX 9,0,124,2. (When publishing, the default is FMLE/3.0 (compatible;
+<libavformat version>).)
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flush_interval</samp>’</dt>
+<dd><p>Number of packets flushed in the same request (RTMPT only). The default
+is 10.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_live</samp>’</dt>
+<dd><p>Specify that the media is a live stream. No resuming or seeking in
+live streams is possible. The default value is <code>any</code>, which means the
+subscriber first tries to play the live stream specified in the
+playpath. If a live stream of that name is not found, it plays the
+recorded stream. The other possible values are <code>live</code> and
+<code>recorded</code>.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_pageurl</samp>’</dt>
+<dd><p>URL of the web page in which the media was embedded. By default no
+value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_playpath</samp>’</dt>
+<dd><p>Stream identifier to play or to publish. This option overrides the
+parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_subscribe</samp>’</dt>
+<dd><p>Name of live stream to subscribe to. By default no value will be sent.
+It is only sent if the option is specified or if rtmp_live
+is set to live.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfhash</samp>’</dt>
+<dd><p>SHA256 hash of the decompressed SWF file (32 bytes).
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfsize</samp>’</dt>
+<dd><p>Size of the decompressed SWF file, required for SWFVerification.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfurl</samp>’</dt>
+<dd><p>URL of the SWF player for the media. By default no value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfverify</samp>’</dt>
+<dd><p>URL to player swf file, compute hash/size automatically.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_tcurl</samp>’</dt>
+<dd><p>URL of the target stream. Defaults to proto://host[:port]/app.
+</p>
+</dd>
+</dl>
+
+<p>For example to read with <code>ffplay</code> a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+</p><table><tr><td> </td><td><pre class="example">ffplay rtmp://myserver/vod/sample
+</pre></td></tr></table>
+
+<p>To publish to a password protected server, passing the playpath and
+app names separately:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
+</pre></td></tr></table>
+
+<a name="rtmpe"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtmpe">16.16 rtmpe</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol (RTMPE) is used for
+streaming multimedia content within standard cryptographic primitives,
+consisting of Diffie-Hellman key exchange and HMACSHA256, generating
+a pair of RC4 keys.
+</p>
+<a name="rtmps"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtmps">16.17 rtmps</a></h2>
+
+<p>Real-Time Messaging Protocol over a secure SSL connection.
+</p>
+<p>The Real-Time Messaging Protocol (RTMPS) is used for streaming
+multimedia content across an encrypted connection.
+</p>
+<a name="rtmpt"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtmpt">16.18 rtmpt</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTP (RTMPT) is used
+for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpte"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtmpte">16.19 rtmpte</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol tunneled through HTTP (RTMPTE)
+is used for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpts"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtmpts">16.20 rtmpts</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTPS.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTPS (RTMPTS) is used
+for streaming multimedia content within HTTPS requests to traverse
+firewalls.
+</p>
+<a name="libssh"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libssh">16.21 libssh</a></h2>
+
+<p>Secure File Transfer Protocol via libssh
+</p>
+<p>Allow to read from or write to remote resources using SFTP protocol.
+</p>
+<p>Following syntax is required.
+</p>
+<table><tr><td> </td><td><pre class="example">sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout
+is not specified.
+</p>
+</dd>
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>private_key</samp>’</dt>
+<dd><p>Specify the path of the file containing private key to use during authorization.
+By default libssh searches for keys in the ‘<tt>~/.ssh/</tt>’ directory.
+</p>
+</dd>
+</dl>
+
+<p>Example: Play a file stored on remote server.
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
+</pre></td></tr></table>
+
+<a name="librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">16.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></h2>
+
+<p>Real-Time Messaging Protocol and its variants supported through
+librtmp.
+</p>
+<p>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.
+</p>
+<p>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).
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example"><var>rtmp_proto</var>://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>] <var>options</var>
+</pre></td></tr></table>
+
+<p>where <var>rtmp_proto</var> is one of the strings "rtmp", "rtmpt", "rtmpe",
+"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and
+<var>server</var>, <var>port</var>, <var>app</var> and <var>playpath</var> have the same
+meaning as specified for the RTMP native protocol.
+<var>options</var> contains a list of space-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>See the librtmp manual page (man 3 librtmp) for more information.
+</p>
+<p>For example, to stream a file in real-time to an RTMP server using
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
+</pre></td></tr></table>
+
+<p>To play the same stream using <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffplay "rtmp://myserver/live/mystream live=1"
+</pre></td></tr></table>
+
+<a name="rtp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtp">16.23 rtp</a></h2>
+
+<p>Real-time Transport Protocol.
+</p>
+<p>The required syntax for an RTP URL is:
+rtp://<var>hostname</var>[:<var>port</var>][?<var>option</var>=<var>val</var>...]
+</p>
+<p><var>port</var> specifies the RTP port to use.
+</p>
+<p>The following URL options are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ttl=<var>n</var></samp>’</dt>
+<dd><p>Set the TTL (Time-To-Live) value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>rtcpport=<var>n</var></samp>’</dt>
+<dd><p>Set the remote RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtpport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtcpport=<var>n</var>'</samp>’</dt>
+<dd><p>Set the local RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>n</var></samp>’</dt>
+<dd><p>Set max packet size (in bytes) to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>connect=0|1</samp>’</dt>
+<dd><p>Do a <code>connect()</code> on the UDP socket (if set to 1) or not (if set
+to 0).
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List allowed source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List disallowed (blocked) source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>write_to_source=0|1</samp>’</dt>
+<dd><p>Send packets to the source address of the latest received packet (if
+set to 1) or to a default remote address (if set to 0).
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+<p>This is a deprecated option. Instead, ‘<samp>localrtpport</samp>’ should be
+used.
+</p>
+</dd>
+</dl>
+
+<p>Important notes:
+</p>
+<ol>
+<li>
+If ‘<samp>rtcpport</samp>’ is not set the RTCP port will be set to the RTP
+port value plus 1.
+
+</li><li>
+If ‘<samp>localrtpport</samp>’ (the local RTP port) is not set any available
+port will be used for the local RTP and RTCP ports.
+
+</li><li>
+If ‘<samp>localrtcpport</samp>’ (the local RTCP port) is not set it will be
+set to the the local RTP port value plus 1.
+</li></ol>
+
+<a name="rtsp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rtsp">16.24 rtsp</a></h2>
+
+<p>Real-Time Streaming Protocol.
+</p>
+<p>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).
+</p>
+<p>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
+<a href="http://github.com/revmischa/rtsp-server">RTSP server</a>).
+</p>
+<p>The required syntax for a RTSP url is:
+</p><table><tr><td> </td><td><pre class="example">rtsp://<var>hostname</var>[:<var>port</var>]/<var>path</var>
+</pre></td></tr></table>
+
+<p>Options can be set on the <code>ffmpeg</code>/<code>ffplay</code> command
+line, or set in code via <code>AVOption</code>s or in
+<code>avformat_open_input</code>.
+</p>
+<p>The following options are supported.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>initial_pause</samp>’</dt>
+<dd><p>Do not start playing the stream immediately if set to 1. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_transport</samp>’</dt>
+<dd><p>Set RTSP trasport protocols.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>udp</samp>’</dt>
+<dd><p>Use UDP as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>tcp</samp>’</dt>
+<dd><p>Use TCP (interleaving within the RTSP control channel) as lower
+transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>udp_multicast</samp>’</dt>
+<dd><p>Use UDP multicast as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>http</samp>’</dt>
+<dd><p>Use HTTP tunneling as lower transport protocol, which is useful for
+passing proxies.
+</p></dd>
+</dl>
+
+<p>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 ‘<samp>tcp</samp>’ and ‘<samp>udp</samp>’ options are supported.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_flags</samp>’</dt>
+<dd><p>Set RTSP flags.
+</p>
+<p>The following values are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>filter_src</samp>’</dt>
+<dd><p>Accept packets only from negotiated peer address and port.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>none</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>allowed_media_types</samp>’</dt>
+<dd><p>Set media types to accept from the server.
+</p>
+<p>The following flags are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dt> ‘<samp>audio</samp>’</dt>
+<dt> ‘<samp>data</samp>’</dt>
+</dl>
+
+<p>By default it accepts all media types.
+</p>
+</dd>
+<dt> ‘<samp>min_port</samp>’</dt>
+<dd><p>Set minimum local UDP port. Default value is 5000.
+</p>
+</dd>
+<dt> ‘<samp>max_port</samp>’</dt>
+<dd><p>Set maximum local UDP port. Default value is 65000.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set maximum timeout (in seconds) to wait for incoming connections.
+</p>
+<p>A value of -1 mean infinite (default). This option implies the
+‘<samp>rtsp_flags</samp>’ set to ‘<samp>listen</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>reorder_queue_size</samp>’</dt>
+<dd><p>Set number of packets to buffer for handling of reordered packets.
+</p>
+</dd>
+<dt> ‘<samp>stimeout</samp>’</dt>
+<dd><p>Set socket TCP I/O timeout in micro seconds.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dd><p>Override User-Agent header. If not specified, it default to the
+libavformat identifier string.
+</p></dd>
+</dl>
+
+<p>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). This
+can be disabled by setting the maximum demuxing delay to zero (via
+the <code>max_delay</code> field of AVFormatContext).
+</p>
+<p>When watching multi-bitrate Real-RTSP streams with <code>ffplay</code>, the
+streams to display can be chosen with <code>-vst</code> <var>n</var> and
+<code>-ast</code> <var>n</var> for video and audio respectively, and can be switched
+on the fly by pressing <code>v</code> and <code>a</code>.
+</p>
+<a name="Examples-66"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-66">16.24.1 Examples</a></h3>
+
+<p>The following examples all make use of the <code>ffplay</code> and
+<code>ffmpeg</code> tools.
+</p>
+<ul>
+<li>
+Watch a stream over UDP, with a max reordering delay of 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Watch a stream tunneled over HTTP:
+<table><tr><td> </td><td><pre class="example">ffplay -rtsp_transport http rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Send a stream in realtime to a RTSP server, for others to watch:
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
+</pre></td></tr></table>
+
+</li><li>
+Receive a stream in realtime:
+<table><tr><td> </td><td><pre class="example">ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp <var>output</var>
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sap"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sap">16.25 sap</a></h2>
+
+<p>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.
+</p>
+<a name="Muxer"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Muxer">16.25.1 Muxer</a></h3>
+
+<p>The syntax for a SAP url given to the muxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://<var>destination</var>[:<var>port</var>][?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The RTP packets are sent to <var>destination</var> on port <var>port</var>,
+or to port 5004 if no port is specified.
+<var>options</var> is a <code>&</code>-separated list. The following options
+are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>announce_addr=<var>address</var></samp>’</dt>
+<dd><p>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 <var>destination</var> is an IPv6 address.
+</p>
+</dd>
+<dt> ‘<samp>announce_port=<var>port</var></samp>’</dt>
+<dd><p>Specify the port to send the announcements on, defaults to
+9875 if not specified.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Specify the time to live value for the announcements and RTP packets,
+defaults to 255.
+</p>
+</dd>
+<dt> ‘<samp>same_port=<var>0|1</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>Example command lines follow.
+</p>
+<p>To broadcast a stream on the local subnet, for watching in VLC:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255?same_port=1
+</pre></td></tr></table>
+
+<p>Similarly, for watching in <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255
+</pre></td></tr></table>
+
+<p>And for watching in <code>ffplay</code>, over IPv6:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://[ff0e::1:2:3:4]
+</pre></td></tr></table>
+
+<a name="Demuxer"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Demuxer">16.25.2 Demuxer</a></h3>
+
+<p>The syntax for a SAP url given to the demuxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://[<var>address</var>][:<var>port</var>]
+</pre></td></tr></table>
+
+<p><var>address</var> is the multicast address to listen for announcements on,
+if omitted, the default 224.2.127.254 (sap.mcast.net) is used. <var>port</var>
+is the port that is listened on, 9875 if omitted.
+</p>
+<p>The demuxers listens for announcements on the given address and port.
+Once an announcement is received, it tries to receive that particular stream.
+</p>
+<p>Example command lines follow.
+</p>
+<p>To play back the first stream announced on the normal SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://
+</pre></td></tr></table>
+
+<p>To play back the first stream announced on one the default IPv6 SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://[ff0e::2:7ffe]
+</pre></td></tr></table>
+
+<a name="sctp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sctp">16.26 sctp</a></h2>
+
+<p>Stream Control Transmission Protocol.
+</p>
+<p>The accepted URL syntax is:
+</p><table><tr><td> </td><td><pre class="example">sctp://<var>host</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The protocol accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>If set to any value, listen for an incoming connection. Outgoing connection is done by default.
+</p>
+</dd>
+<dt> ‘<samp>max_streams</samp>’</dt>
+<dd><p>Set the maximum number of streams. By default no limit is set.
+</p></dd>
+</dl>
+
+<a name="srtp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-srtp">16.27 srtp</a></h2>
+
+<p>Secure Real-time Transport Protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>srtp_in_suite</samp>’</dt>
+<dt> ‘<samp>srtp_out_suite</samp>’</dt>
+<dd><p>Select input and output encoding suites.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_32</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_32</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>srtp_in_params</samp>’</dt>
+<dt> ‘<samp>srtp_out_params</samp>’</dt>
+<dd><p>Set input and output encoding parameters, which are expressed by a
+base64-encoded representation of a binary block. The first 16 bytes of
+this binary block are used as master key, the following 14 bytes are
+used as master salt.
+</p></dd>
+</dl>
+
+<a name="tcp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-tcp">16.28 tcp</a></h2>
+
+<p>Transmission Control Protocol.
+</p>
+<p>The required syntax for a TCP url is:
+</p><table><tr><td> </td><td><pre class="example">tcp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>Listen for an incoming connection. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p>
+</dd>
+<dt> ‘<samp>listen_timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set listen timeout, expressed in microseconds.
+</p></dd>
+</dl>
+
+<p>The following example shows how to setup a listening TCP connection
+with <code>ffmpeg</code>, which is then accessed with <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tcp://<var>hostname</var>:<var>port</var>?listen
+ffplay tcp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="tls"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-tls">16.29 tls</a></h2>
+
+<p>Transport Layer Security (TLS) / Secure Sockets Layer (SSL)
+</p>
+<p>The required syntax for a TLS/SSL url is:
+</p><table><tr><td> </td><td><pre class="example">tls://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ca_file, cafile=<var>filename</var></samp>’</dt>
+<dd><p>A file containing certificate authority (CA) root certificates to treat
+as trusted. If the linked TLS library contains a default this might not
+need to be specified for verification to work, but not all libraries and
+setups have defaults built in.
+The file must be in OpenSSL PEM format.
+</p>
+</dd>
+<dt> ‘<samp>tls_verify=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, try to verify the peer that we are communicating with.
+Note, if using OpenSSL, this currently only makes sure that the
+peer certificate is signed by one of the root certificates in the CA
+database, but it does not validate that the certificate actually
+matches the host name we are trying to connect to. (With GnuTLS,
+the host name is validated as well.)
+</p>
+<p>This is disabled by default since it requires a CA database to be
+provided by the caller in many cases.
+</p>
+</dd>
+<dt> ‘<samp>cert_file, cert=<var>filename</var></samp>’</dt>
+<dd><p>A file containing a certificate to use in the handshake with the peer.
+(When operating as server, in listen mode, this is more often required
+by the peer, while client certificates only are mandated in certain
+setups.)
+</p>
+</dd>
+<dt> ‘<samp>key_file, key=<var>filename</var></samp>’</dt>
+<dd><p>A file containing the private key for the certificate.
+</p>
+</dd>
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, listen for connections on the provided port, and assume
+the server role in the handshake instead of the client role.
+</p>
+</dd>
+</dl>
+
+<p>Example command lines:
+</p>
+<p>To create a TLS/SSL server that serves an input stream.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tls://<var>hostname</var>:<var>port</var>?listen&cert=<var>server.crt</var>&key=<var>server.key</var>
+</pre></td></tr></table>
+
+<p>To play back a stream from the TLS/SSL server using <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay tls://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="udp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-udp">16.30 udp</a></h2>
+
+<p>User Datagram Protocol.
+</p>
+<p>The required syntax for an UDP URL is:
+</p><table><tr><td> </td><td><pre class="example">udp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form <var>key</var>=<var>val</var>.
+</p>
+<p>In case threading is enabled on the system, a circular buffer is used
+to store the incoming data, which allows one to reduce loss of data due to
+UDP socket buffer overruns. The <var>fifo_size</var> and
+<var>overrun_nonfatal</var> options are related to this buffer.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>buffer_size=<var>size</var></samp>’</dt>
+<dd><p>Set the UDP socket buffer size in bytes. This is used both for the
+receiving and the sending buffer size.
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>port</var></samp>’</dt>
+<dd><p>Override the local UDP port to bind with.
+</p>
+</dd>
+<dt> ‘<samp>localaddr=<var>addr</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>size</var></samp>’</dt>
+<dd><p>Set the size in bytes of UDP packets.
+</p>
+</dd>
+<dt> ‘<samp>reuse=<var>1|0</var></samp>’</dt>
+<dd><p>Explicitly allow or disallow reusing UDP sockets.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Set the time to live value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>connect=<var>1|0</var></samp>’</dt>
+<dd><p>Initialize the UDP socket with <code>connect()</code>. 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.
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Only receive packets sent to the multicast group from one of the
+specified sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Ignore packets sent to the multicast group from the specified
+sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>fifo_size=<var>units</var></samp>’</dt>
+<dd><p>Set the UDP receiving circular buffer size, expressed as a number of
+packets with size of 188 bytes. If not specified defaults to 7*4096.
+</p>
+</dd>
+<dt> ‘<samp>overrun_nonfatal=<var>1|0</var></samp>’</dt>
+<dd><p>Survive in case of UDP receiving circular buffer overrun. Default
+value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p></dd>
+</dl>
+
+<a name="Examples-6"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-6">16.30.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to stream over UDP to a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> udp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to stream in mpegts format over UDP using 188
+sized UDP packets, using a large input buffer:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f mpegts udp://<var>hostname</var>:<var>port</var>?pkt_size=188&buffer_size=65535
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to receive over UDP from a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i udp://[<var>multicast-address</var>]:<var>port</var> ...
+</pre></td></tr></table>
+</li></ul>
+
+<a name="unix"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-unix">16.31 unix</a></h2>
+
+<p>Unix local socket
+</p>
+<p>The required syntax for a Unix socket URL is:
+</p>
+<table><tr><td> </td><td><pre class="example">unix://<var>filepath</var>
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Timeout in ms.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Create the Unix socket in listening mode.
+</p></dd>
+</dl>
+
+<a name="Device-Options"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Device-Options">17. Device Options</a></h1>
+
+<p>The libavdevice library provides the same interface as
+libavformat. Namely, an input device is considered like a demuxer, and
+an output device like a muxer, and the interface and generic device
+options are the same provided by libavformat (see the ffmpeg-formats
+manual).
+</p>
+<p>In addition each input or output device may support so-called private
+options, which are specific for that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the device
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+
+<a name="Input-Devices"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Input-Devices">18. Input Devices</a></h1>
+
+<p>Input devices are configured elements in FFmpeg which allow to access
+the data coming from a multimedia device attached to your system.
+</p>
+<p>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".
+</p>
+<p>You can disable all the input devices using the configure option
+"–disable-indevs", and selectively enable an input device using the
+option "–enable-indev=<var>INDEV</var>", or you can disable a particular
+input device using the option "–disable-indev=<var>INDEV</var>".
+</p>
+<p>The option "-formats" of the ff* tools will display the list of
+supported input devices (amongst the demuxers).
+</p>
+<p>A description of the currently available input devices follows.
+</p>
+<a name="alsa"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-alsa">18.1 alsa</a></h2>
+
+<p>ALSA (Advanced Linux Sound Architecture) input device.
+</p>
+<p>To enable this input device during configuration you need libasound
+installed on your system.
+</p>
+<p>This device allows capturing from an ALSA device. The name of the
+device to capture has to be an ALSA card identifier.
+</p>
+<p>An ALSA identifier has the syntax:
+</p><table><tr><td> </td><td><pre class="example">hw:<var>CARD</var>[,<var>DEV</var>[,<var>SUBDEV</var>]]
+</pre></td></tr></table>
+
+<p>where the <var>DEV</var> and <var>SUBDEV</var> components are optional.
+</p>
+<p>The three arguments (in order: <var>CARD</var>,<var>DEV</var>,<var>SUBDEV</var>)
+specify card number or identifier, device number and subdevice number
+(-1 means any).
+</p>
+<p>To see the list of cards currently recognized by your system check the
+files ‘<tt>/proc/asound/cards</tt>’ and ‘<tt>/proc/asound/devices</tt>’.
+</p>
+<p>For example to capture with <code>ffmpeg</code> from an ALSA device with
+card id 0, you may run the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f alsa -i hw:0 alsaout.wav
+</pre></td></tr></table>
+
+<p>For more information see:
+<a href="http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html">http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html</a>
+</p>
+<a name="bktr"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-bktr">18.2 bktr</a></h2>
+
+<p>BSD video input device.
+</p>
+<a name="dshow"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-dshow">18.3 dshow</a></h2>
+
+<p>Windows DirectShow input device.
+</p>
+<p>DirectShow support is enabled when FFmpeg is built with the mingw-w64 project.
+Currently only audio and video devices are supported.
+</p>
+<p>Multiple devices may be opened as separate inputs, but they may also be
+opened on the same input, which should improve synchronism between them.
+</p>
+<p>The input name should be in the format:
+</p>
+<table><tr><td> </td><td><pre class="example"><var>TYPE</var>=<var>NAME</var>[:<var>TYPE</var>=<var>NAME</var>]
+</pre></td></tr></table>
+
+<p>where <var>TYPE</var> can be either <var>audio</var> or <var>video</var>,
+and <var>NAME</var> is the device’s name.
+</p>
+<a name="Options-9"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-9">18.3.1 Options</a></h3>
+
+<p>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.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+</p>
+</dd>
+<dt> ‘<samp>list_options</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of selected device’s options
+and exit.
+</p>
+</dd>
+<dt> ‘<samp>video_device_number</samp>’</dt>
+<dd><p>Set video device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>audio_device_number</samp>’</dt>
+<dd><p>Set audio device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select pixel format to be used by DirectShow. This may only be set when
+the video codec is not set or set to rawvideo.
+</p>
+</dd>
+<dt> ‘<samp>audio_buffer_size</samp>’</dt>
+<dd><p>Set audio device buffer size in milliseconds (which can directly
+impact latency, depending on the device).
+Defaults to using the audio device’s
+default buffer size (typically some multiple of 500ms).
+Setting this value too low can degrade performance.
+See also
+<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx</a>
+</p>
+</dd>
+</dl>
+
+<a name="Examples-7"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-7">18.3.2 Examples</a></h3>
+
+<ul>
+<li>
+Print the list of DirectShow supported devices and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f dshow -i dummy
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open second video device with name <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var> and audio device <var>Microphone</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
+</pre></td></tr></table>
+
+</li><li>
+Print the list of supported options in selected device and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_options true -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="dv1394"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-dv1394">18.4 dv1394</a></h2>
+
+<p>Linux DV 1394 input device.
+</p>
+<a name="fbdev"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-fbdev">18.5 fbdev</a></h2>
+
+<p>Linux framebuffer input device.
+</p>
+<p>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
+‘<tt>/dev/fb0</tt>’.
+</p>
+<p>For more detailed information read the file
+Documentation/fb/framebuffer.txt included in the Linux source tree.
+</p>
+<p>To record from the framebuffer device ‘<tt>/dev/fb0</tt>’ with
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
+</pre></td></tr></table>
+
+<p>You can take a single screenshot image with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
+</pre></td></tr></table>
+
+<p>See also <a href="http://linux-fbdev.sourceforge.net/">http://linux-fbdev.sourceforge.net/</a>, and fbset(1).
+</p>
+<a name="iec61883"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-iec61883">18.6 iec61883</a></h2>
+
+<p>FireWire DV/HDV input device using libiec61883.
+</p>
+<p>To enable this input device, you need libiec61883, libraw1394 and
+libavc1394 installed on your system. Use the configure option
+<code>--enable-libiec61883</code> to compile with the device enabled.
+</p>
+<p>The iec61883 capture device supports capturing from a video device
+connected via IEEE1394 (FireWire), using libiec61883 and the new Linux
+FireWire stack (juju). This is the default DV/HDV input method in Linux
+Kernel 2.6.37 and later, since the old FireWire stack was removed.
+</p>
+<p>Specify the FireWire port to be used as input file, or "auto"
+to choose the first port connected.
+</p>
+<a name="Options-7"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-7">18.6.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>dvtype</samp>’</dt>
+<dd><p>Override autodetection of DV/HDV. This should only be used if auto
+detection does not work, or if usage of a different device type
+should be prohibited. Treating a DV device as HDV (or vice versa) will
+not work and result in undefined behavior.
+The values ‘<samp>auto</samp>’, ‘<samp>dv</samp>’ and ‘<samp>hdv</samp>’ are supported.
+</p>
+</dd>
+<dt> ‘<samp>dvbuffer</samp>’</dt>
+<dd><p>Set maxiumum size of buffer for incoming data, in frames. For DV, this
+is an exact value. For HDV, it is not frame exact, since HDV does
+not have a fixed frame size.
+</p>
+</dd>
+<dt> ‘<samp>dvguid</samp>’</dt>
+<dd><p>Select the capture device by specifying it’s GUID. Capturing will only
+be performed from the specified device and fails if no device with the
+given GUID is found. This is useful to select the input if multiple
+devices are connected at the same time.
+Look at /sys/bus/firewire/devices to find out the GUIDs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-23"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-23">18.6.2 Examples</a></h3>
+
+<ul>
+<li>
+Grab and show the input of a FireWire DV/HDV device.
+<table><tr><td> </td><td><pre class="example">ffplay -f iec61883 -i auto
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a FireWire DV/HDV device,
+using a packet buffer of 100000 packets if the source is HDV.
+<table><tr><td> </td><td><pre class="example">ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="jack"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-jack">18.7 jack</a></h2>
+
+<p>JACK input device.
+</p>
+<p>To enable this input device during configuration you need libjack
+installed on your system.
+</p>
+<p>A JACK input device creates one or more JACK writable clients, one for
+each audio channel, with name <var>client_name</var>:input_<var>N</var>, where
+<var>client_name</var> is the name provided by the application, and <var>N</var>
+is a number which identifies the channel.
+Each writable client will send the acquired data to the FFmpeg input
+device.
+</p>
+<p>Once you have created one or more JACK readable clients, you need to
+connect them to one or more JACK writable clients.
+</p>
+<p>To connect or disconnect JACK clients you can use the <code>jack_connect</code>
+and <code>jack_disconnect</code> programs, or do it through a graphical interface,
+for example with <code>qjackctl</code>.
+</p>
+<p>To list the JACK clients and their properties you can invoke the command
+<code>jack_lsp</code>.
+</p>
+<p>Follows an example which shows how to capture a JACK readable client
+with <code>ffmpeg</code>.
+</p><table><tr><td> </td><td><pre class="example"># 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
+</pre></td></tr></table>
+
+<p>For more information read:
+<a href="http://jackaudio.org/">http://jackaudio.org/</a>
+</p>
+<a name="lavfi"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-lavfi">18.8 lavfi</a></h2>
+
+<p>Libavfilter input virtual device.
+</p>
+<p>This input device reads data from the open output pads of a libavfilter
+filtergraph.
+</p>
+<p>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 ‘<samp>graph</samp>’.
+</p>
+<a name="Options-14"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-14">18.8.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>graph</samp>’</dt>
+<dd><p>Specify the filtergraph to use as input. Each video open output must be
+labelled by a unique string of the form "out<var>N</var>", where <var>N</var> 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.
+</p>
+<p>If not specified defaults to the filename specified for the input
+device.
+</p>
+</dd>
+<dt> ‘<samp>graph_file</samp>’</dt>
+<dd><p>Set the filename of the filtergraph to be read and sent to the other
+filters. Syntax of the filtergraph is the same as the one specified by
+the option <var>graph</var>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-39"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-39">18.8.2 Examples</a></h3>
+
+<ul>
+<li>
+Create a color video stream and play it back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "color=c=pink [out0]" dummy
+</pre></td></tr></table>
+
+</li><li>
+As the previous example, but use filename for specifying the graph
+description, and omit the "out0" label:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi color=c=pink
+</pre></td></tr></table>
+
+</li><li>
+Create three different video test filtered sources and play them:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream from a file using the amovie source and play it
+back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "amovie=test.wav"
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream and a video stream and play it back with
+<code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="libdc1394"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-libdc1394">18.9 libdc1394</a></h2>
+
+<p>IIDC1394 input device, based on libdc1394 and libraw1394.
+</p>
+<a name="openal"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-openal">18.10 openal</a></h2>
+
+<p>The OpenAL input device provides audio capture on all systems with a
+working OpenAL 1.1 implementation.
+</p>
+<p>To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with <code>--enable-openal</code>.
+</p>
+<p>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
+<code>--extra-cflags</code> and <code>--extra-ldflags</code> for allowing the build
+system to locate the OpenAL headers and libraries.
+</p>
+<p>An incomplete list of OpenAL implementations follows:
+</p>
+<dl compact="compact">
+<dt> <strong>Creative</strong></dt>
+<dd><p>The official Windows implementation, providing hardware acceleration
+with supported devices and software fallback.
+See <a href="http://openal.org/">http://openal.org/</a>.
+</p></dd>
+<dt> <strong>OpenAL Soft</strong></dt>
+<dd><p>Portable, open source (LGPL) software implementation. Includes
+backends for the most common sound APIs on the Windows, Linux,
+Solaris, and BSD operating systems.
+See <a href="http://kcat.strangesoft.net/openal.html">http://kcat.strangesoft.net/openal.html</a>.
+</p></dd>
+<dt> <strong>Apple</strong></dt>
+<dd><p>OpenAL is part of Core Audio, the official Mac OS X Audio interface.
+See <a href="http://developer.apple.com/technologies/mac/audio-and-video.html">http://developer.apple.com/technologies/mac/audio-and-video.html</a>
+</p></dd>
+</dl>
+
+<p>This device allows one to capture from an audio input device handled
+through OpenAL.
+</p>
+<p>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 <var>list_devices</var>.
+</p>
+<a name="Options-5"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-5">18.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio. Only the values
+‘<samp>1</samp>’ (monaural) and ‘<samp>2</samp>’ (stereo) are currently supported.
+Defaults to ‘<samp>2</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio. Only the values
+‘<samp>8</samp>’ and ‘<samp>16</samp>’ are currently supported. Defaults to
+‘<samp>16</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+Defaults to ‘<samp>44.1k</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-14"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-14">18.10.2 Examples</a></h3>
+
+<p>Print the list of OpenAL supported devices and exit:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f openal -i dummy out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the OpenAL device ‘<tt>DR-BT101 via PulseAudio</tt>’:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the default device (note the empty string ” as filename):
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i '' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from two devices simultaneously, writing to two different files,
+within the same <code>ffmpeg</code> command:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
+</pre></td></tr></table>
+<p>Note: not all OpenAL implementations support multiple simultaneous capture -
+try the latest OpenAL Soft if the above does not work.
+</p>
+<a name="oss"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-oss">18.11 oss</a></h2>
+
+<p>Open Sound System input device.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the OSS input device, and is usually set to
+‘<tt>/dev/dsp</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/dsp</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
+</pre></td></tr></table>
+
+<p>For more information about OSS see:
+<a href="http://manuals.opensound.com/usersguide/dsp.html">http://manuals.opensound.com/usersguide/dsp.html</a>
+</p>
+<a name="pulse"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pulse">18.12 pulse</a></h2>
+
+<p>PulseAudio input device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-libpulse</code>.
+</p>
+<p>The filename to provide to the input device is a source device or the
+string "default"
+</p>
+<p>To list the PulseAudio source devices and their properties you can invoke
+the command <code>pactl list sources</code>.
+</p>
+<p>More information about PulseAudio can be found on <a href="http://www.pulseaudio.org">http://www.pulseaudio.org</a>.
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-1">18.12.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>Connect to a specific PulseAudio server, specified by an IP address.
+Default server is used when not provided.
+</p>
+</dd>
+<dt> ‘<samp>name</samp>’</dt>
+<dd><p>Specify the application name PulseAudio will use when showing active clients,
+by default it is the <code>LIBAVFORMAT_IDENT</code> string.
+</p>
+</dd>
+<dt> ‘<samp>stream_name</samp>’</dt>
+<dd><p>Specify the stream name PulseAudio will use when showing active streams,
+by default it is "record".
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Specify the samplerate in Hz, by default 48kHz is used.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Specify the channels in use, by default 2 (stereo) is set.
+</p>
+</dd>
+<dt> ‘<samp>frame_size</samp>’</dt>
+<dd><p>Specify the number of bytes per frame, by default it is set to 1024.
+</p>
+</dd>
+<dt> ‘<samp>fragment_size</samp>’</dt>
+<dd><p>Specify the minimal buffering fragment in PulseAudio, it will affect the
+audio latency. By default it is unset.
+</p></dd>
+</dl>
+
+<a name="Examples-71"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-71">18.12.2 Examples</a></h3>
+<p>Record a stream from default device:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f pulse -i default /tmp/pulse.wav
+</pre></td></tr></table>
+
+<a name="sndio"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sndio">18.13 sndio</a></h2>
+
+<p>sndio input device.
+</p>
+<p>To enable this input device during configuration you need libsndio
+installed on your system.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the sndio input device, and is usually set to
+‘<tt>/dev/audio0</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/audio0</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
+</pre></td></tr></table>
+
+<a name="video4linux2_002c-v4l2"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-video4linux2_002c-v4l2">18.14 video4linux2, v4l2</a></h2>
+
+<p>Video4Linux2 input video device.
+</p>
+<p>"v4l2" can be used as alias for "video4linux2".
+</p>
+<p>If FFmpeg is built with v4l-utils support (by using the
+<code>--enable-libv4l2</code> configure option), it is possible to use it with the
+<code>-use_libv4l2</code> input device option.
+</p>
+<p>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 ‘<tt>/dev/video<var>N</var></tt>’, where <var>N</var> is a number associated to
+the device.
+</p>
+<p>Video4Linux2 devices usually support a limited set of
+<var>width</var>x<var>height</var> sizes and frame rates. You can check which are
+supported using <code>-list_formats all</code> for Video4Linux2 devices.
+Some devices, like TV cards, support one or more standards. It is possible
+to list all the supported standards using <code>-list_standards all</code>.
+</p>
+<p>The time base for the timestamps is 1 microsecond. Depending on the kernel
+version and configuration, the timestamps may be derived from the real time
+clock (origin at the Unix Epoch) or the monotonic clock (origin usually at
+boot time, unaffected by NTP or manual changes to the clock). The
+‘<samp>-timestamps abs</samp>’ or ‘<samp>-ts abs</samp>’ option can be used to force
+conversion into the real time clock.
+</p>
+<p>Some usage examples of the video4linux2 device with <code>ffmpeg</code>
+and <code>ffplay</code>:
+</p><ul>
+<li>
+Grab and show the input of a video4linux2 device:
+<table><tr><td> </td><td><pre class="example">ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a video4linux2 device, leave the
+frame rate and size as previously set:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about Video4Linux, check <a href="http://linuxtv.org/">http://linuxtv.org/</a>.
+</p>
+<a name="Options-3"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-3">18.14.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>standard</samp>’</dt>
+<dd><p>Set the standard. Must be the name of a supported standard. To get a
+list of the supported standards, use the ‘<samp>list_standards</samp>’
+option.
+</p>
+</dd>
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>Set the input channel number. Default to -1, which means using the
+previously selected channel.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. The argument must be a string in the form
+<var>WIDTH</var>x<var>HEIGHT</var> or a valid size abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select the pixel format (only valid for raw video input).
+</p>
+</dd>
+<dt> ‘<samp>input_format</samp>’</dt>
+<dd><p>Set the preferred pixel format (for raw video) or a codec name.
+This option allows one to select the input format, when several are
+available.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the preferred video frame rate.
+</p>
+</dd>
+<dt> ‘<samp>list_formats</samp>’</dt>
+<dd><p>List available formats (supported pixel formats, codecs, and frame
+sizes) and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all available (compressed and non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>Show only raw video (non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>compressed</samp>’</dt>
+<dd><p>Show only compressed formats.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>list_standards</samp>’</dt>
+<dd><p>List supported standards and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all supported standards.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>timestamps, ts</samp>’</dt>
+<dd><p>Set type of timestamps for grabbed frames.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Use timestamps from the kernel.
+</p>
+</dd>
+<dt> ‘<samp>abs</samp>’</dt>
+<dd><p>Use absolute timestamps (wall clock).
+</p>
+</dd>
+<dt> ‘<samp>mono2abs</samp>’</dt>
+<dd><p>Force conversion from monotonic to absolute timestamps.
+</p></dd>
+</dl>
+
+<p>Default value is <code>default</code>.
+</p></dd>
+</dl>
+
+<a name="vfwcap"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-vfwcap">18.15 vfwcap</a></h2>
+
+<p>VfW (Video for Windows) capture input device.
+</p>
+<p>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.
+</p>
+<a name="x11grab"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-x11grab">18.16 x11grab</a></h2>
+
+<p>X11 video input device.
+</p>
+<p>This device allows one to capture a region of an X11 display.
+</p>
+<p>The filename passed as input has the syntax:
+</p><table><tr><td> </td><td><pre class="example">[<var>hostname</var>]:<var>display_number</var>.<var>screen_number</var>[+<var>x_offset</var>,<var>y_offset</var>]
+</pre></td></tr></table>
+
+<p><var>hostname</var>:<var>display_number</var>.<var>screen_number</var> specifies the
+X11 display name of the screen to grab from. <var>hostname</var> can be
+omitted, and defaults to "localhost". The environment variable
+<code>DISPLAY</code> contains the default display name.
+</p>
+<p><var>x_offset</var> and <var>y_offset</var> specify the offsets of the grabbed
+area with respect to the top-left border of the X11 screen. They
+default to 0.
+</p>
+<p>Check the X11 documentation (e.g. man X) for more detailed information.
+</p>
+<p>Use the <code>dpyinfo</code> program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+</p>
+<p>For example to grab from ‘<tt>:0.0</tt>’ using <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>Grab at position <code>10,20</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<a name="Options-2"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-2">18.16.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>draw_mouse</samp>’</dt>
+<dd><p>Specify whether to draw the mouse pointer. A value of <code>0</code> specify
+not to draw the pointer. Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>follow_mouse</samp>’</dt>
+<dd><p>Make the grabbed area follow the mouse. The argument can be
+<code>centered</code> or a number of pixels <var>PIXELS</var>.
+</p>
+<p>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 <var>PIXELS</var> (greater than
+zero) to the edge of region.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>To follow only when the mouse pointer reaches within 100 pixels to edge:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the grabbing frame rate. Default value is <code>ntsc</code>,
+corresponding to a frame rate of <code>30000/1001</code>.
+</p>
+</dd>
+<dt> ‘<samp>show_region</samp>’</dt>
+<dd><p>Show grabbed region on screen.
+</p>
+<p>If <var>show_region</var> is specified with <code>1</code>, then the grabbing
+region will be indicated on screen. With this option, it is easy to
+know what is being grabbed if only a portion of the screen is grabbed.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<p>With <var>follow_mouse</var>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. Default value is <code>vga</code>.
+</p></dd>
+</dl>
+
+<a name="Resampler-Options"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Resampler-Options">19. Resampler Options</a></h1>
+
+<p>The audio resampler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, <var>option</var>=<var>value</var> for the aresample filter,
+by setting the value explicitly in the
+<code>SwrContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API for
+programmatic use.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ich, in_channel_count</samp>’</dt>
+<dd><p>Set the number of input channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>in_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>och, out_channel_count</samp>’</dt>
+<dd><p>Set the number of output channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>out_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>uch, used_channel_count</samp>’</dt>
+<dd><p>Set the number of used input channels. Default value is 0. This option is
+only used for special remapping.
+</p>
+</dd>
+<dt> ‘<samp>isr, in_sample_rate</samp>’</dt>
+<dd><p>Set the input sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>osr, out_sample_rate</samp>’</dt>
+<dd><p>Set the output sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>isf, in_sample_fmt</samp>’</dt>
+<dd><p>Specify the input sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>osf, out_sample_fmt</samp>’</dt>
+<dd><p>Specify the output sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>tsf, internal_sample_fmt</samp>’</dt>
+<dd><p>Set the internal sample format. Default value is <code>none</code>.
+This will automatically be chosen when it is not explicitly set.
+</p>
+</dd>
+<dt> ‘<samp>icl, in_channel_layout</samp>’</dt>
+<dt> ‘<samp>ocl, out_channel_layout</samp>’</dt>
+<dd><p>Set the input/output channel layout.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p>
+</dd>
+<dt> ‘<samp>clev, center_mix_level</samp>’</dt>
+<dd><p>Set the center mix level. It is a value expressed in deciBel, and must be
+in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>slev, surround_mix_level</samp>’</dt>
+<dd><p>Set the surround mix level. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>lfe_mix_level</samp>’</dt>
+<dd><p>Set LFE mix into non LFE level. It is used when there is a LFE input but no
+LFE output. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>rmvol, rematrix_volume</samp>’</dt>
+<dd><p>Set rematrix volume. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>rematrix_maxval</samp>’</dt>
+<dd><p>Set maximum output value for rematrixing.
+This can be used to prevent clipping vs. preventing volumn reduction
+A value of 1.0 prevents cliping.
+</p>
+</dd>
+<dt> ‘<samp>flags, swr_flags</samp>’</dt>
+<dd><p>Set flags used by the converter. Default value is 0.
+</p>
+<p>It supports the following individual flags:
+</p><dl compact="compact">
+<dt> ‘<samp>res</samp>’</dt>
+<dd><p>force resampling, this flag forces resampling to be used even when the
+input and output sample rates match.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dither_scale</samp>’</dt>
+<dd><p>Set the dither scale. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>dither_method</samp>’</dt>
+<dd><p>Set dither method. Default value is 0.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>rectangular</samp>’</dt>
+<dd><p>select rectangular dither
+</p></dd>
+<dt> ‘<samp>triangular</samp>’</dt>
+<dd><p>select triangular dither
+</p></dd>
+<dt> ‘<samp>triangular_hp</samp>’</dt>
+<dd><p>select triangular dither with high pass
+</p></dd>
+<dt> ‘<samp>lipshitz</samp>’</dt>
+<dd><p>select lipshitz noise shaping dither
+</p></dd>
+<dt> ‘<samp>shibata</samp>’</dt>
+<dd><p>select shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>low_shibata</samp>’</dt>
+<dd><p>select low shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>high_shibata</samp>’</dt>
+<dd><p>select high shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>f_weighted</samp>’</dt>
+<dd><p>select f-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>modified_e_weighted</samp>’</dt>
+<dd><p>select modified-e-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>improved_e_weighted</samp>’</dt>
+<dd><p>select improved-e-weighted noise shaping dither
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>resampler</samp>’</dt>
+<dd><p>Set resampling engine. Default value is swr.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>swr</samp>’</dt>
+<dd><p>select the native SW Resampler; filter options precision and cheby are not
+applicable in this case.
+</p></dd>
+<dt> ‘<samp>soxr</samp>’</dt>
+<dd><p>select the SoX Resampler (where available); compensation, and filter options
+filter_size, phase_shift, filter_type & kaiser_beta, are not applicable in this
+case.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>filter_size</samp>’</dt>
+<dd><p>For swr only, set resampling filter size, default value is 32.
+</p>
+</dd>
+<dt> ‘<samp>phase_shift</samp>’</dt>
+<dd><p>For swr only, set resampling phase shift, default value is 10, and must be in
+the interval [0,30].
+</p>
+</dd>
+<dt> ‘<samp>linear_interp</samp>’</dt>
+<dd><p>Use Linear Interpolation if set to 1, default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>cutoff</samp>’</dt>
+<dd><p>Set cutoff frequency (swr: 6dB point; soxr: 0dB point) ratio; must be a float
+value between 0 and 1. Default value is 0.97 with swr, and 0.91 with soxr
+(which, with a sample-rate of 44100, preserves the entire audio band to 20kHz).
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>For soxr only, the precision in bits to which the resampled signal will be
+calculated. The default value of 20 (which, with suitable dithering, is
+appropriate for a destination bit-depth of 16) gives SoX’s ’High Quality’; a
+value of 28 gives SoX’s ’Very High Quality’.
+</p>
+</dd>
+<dt> ‘<samp>cheby</samp>’</dt>
+<dd><p>For soxr only, selects passband rolloff none (Chebyshev) & higher-precision
+approximation for ’irrational’ ratios. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>async</samp>’</dt>
+<dd><p>For swr only, simple 1 parameter audio sync to timestamps using stretching,
+squeezing, filling and trimming. Setting this to 1 will enable filling and
+trimming, larger values represent the maximum amount in samples that the data
+may be stretched or squeezed for each second.
+Default value is 0, thus no compensation is applied to make the samples match
+the audio timestamps.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>For swr only, assume the first pts should be this value. The time unit is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+<dt> ‘<samp>min_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger stretching/squeezing/filling or trimming of the
+data to make it match the timestamps. The default is that
+stretching/squeezing/filling and trimming is disabled
+(‘<samp>min_comp</samp>’ = <code>FLT_MAX</code>).
+</p>
+</dd>
+<dt> ‘<samp>min_hard_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger adding/dropping samples to make it match the
+timestamps. This option effectively is a threshold to select between
+hard (trim/fill) and soft (squeeze/stretch) compensation. Note that
+all compensation is by default disabled through ‘<samp>min_comp</samp>’.
+The default is 0.1.
+</p>
+</dd>
+<dt> ‘<samp>comp_duration</samp>’</dt>
+<dd><p>For swr only, set duration (in seconds) over which data is stretched/squeezed
+to make it match the timestamps. Must be a non-negative double float value,
+default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>max_soft_comp</samp>’</dt>
+<dd><p>For swr only, set maximum factor by which data is stretched/squeezed to make it
+match the timestamps. Must be a non-negative double float value, default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>matrix_encoding</samp>’</dt>
+<dd><p>Select matrixed stereo encoding.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>select none
+</p></dd>
+<dt> ‘<samp>dolby</samp>’</dt>
+<dd><p>select Dolby
+</p></dd>
+<dt> ‘<samp>dplii</samp>’</dt>
+<dd><p>select Dolby Pro Logic II
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>filter_type</samp>’</dt>
+<dd><p>For swr only, select resampling filter type. This only affects resampling
+operations.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>cubic</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>blackman_nuttall</samp>’</dt>
+<dd><p>select Blackman Nuttall Windowed Sinc
+</p></dd>
+<dt> ‘<samp>kaiser</samp>’</dt>
+<dd><p>select Kaiser Windowed Sinc
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>kaiser_beta</samp>’</dt>
+<dd><p>For swr only, set Kaiser Window Beta value. Must be an integer in the
+interval [2,16], default value is 9.
+</p>
+</dd>
+<dt> ‘<samp>output_sample_bits</samp>’</dt>
+<dd><p>For swr only, set number of used output sample bits for dithering. Must be an integer in the
+interval [0,64], default value is 0, which means it’s not used.
+</p>
+</dd>
+</dl>
+
+<p><a name="scaler_005foptions"></a>
+</p><a name="Scaler-Options"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Scaler-Options">20. Scaler Options</a></h1>
+
+<p>The video scaler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools. For programmatic use, they can be set explicitly in the
+<code>SwsContext</code> options or through the ‘<tt>libavutil/opt.h</tt>’ API.
+</p>
+<dl compact="compact">
+<dd>
+<p><a name="sws_005fflags"></a>
+</p></dd>
+<dt> ‘<samp>sws_flags</samp>’</dt>
+<dd><p>Set the scaler flags. This is also used to set the scaling
+algorithm. Only a single algorithm should be selected.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast_bilinear</samp>’</dt>
+<dd><p>Select fast bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Select bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>Select experimental scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>neighbor</samp>’</dt>
+<dd><p>Select nearest neighbor rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>area</samp>’</dt>
+<dd><p>Select averaging area rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicublin</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm for the luma component, bilinear for
+chroma components.
+</p>
+</dd>
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>Select Gaussian rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>sinc</samp>’</dt>
+<dd><p>Select sinc rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>lanczos</samp>’</dt>
+<dd><p>Select lanczos rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>spline</samp>’</dt>
+<dd><p>Select natural bicubic spline rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>print_info</samp>’</dt>
+<dd><p>Enable printing/debug logging.
+</p>
+</dd>
+<dt> ‘<samp>accurate_rnd</samp>’</dt>
+<dd><p>Enable accurate rounding.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_int</samp>’</dt>
+<dd><p>Enable full chroma interpolation.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_inp</samp>’</dt>
+<dd><p>Select full chroma input.
+</p>
+</dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Enable bitexact output.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>srcw</samp>’</dt>
+<dd><p>Set source width.
+</p>
+</dd>
+<dt> ‘<samp>srch</samp>’</dt>
+<dd><p>Set source height.
+</p>
+</dd>
+<dt> ‘<samp>dstw</samp>’</dt>
+<dd><p>Set destination width.
+</p>
+</dd>
+<dt> ‘<samp>dsth</samp>’</dt>
+<dd><p>Set destination height.
+</p>
+</dd>
+<dt> ‘<samp>src_format</samp>’</dt>
+<dd><p>Set source pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>dst_format</samp>’</dt>
+<dd><p>Set destination pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>src_range</samp>’</dt>
+<dd><p>Select source range.
+</p>
+</dd>
+<dt> ‘<samp>dst_range</samp>’</dt>
+<dd><p>Select destination range.
+</p>
+</dd>
+<dt> ‘<samp>param0, param1</samp>’</dt>
+<dd><p>Set scaling algorithm parameters. The specified values are specific of
+some scaling algorithms and ignored by others. The specified values
+are floating point number values.
+</p>
+</dd>
+<dt> ‘<samp>sws_dither</samp>’</dt>
+<dd><p>Set the dithering algorithm. Accepts one of the following
+values. Default value is ‘<samp>auto</samp>’.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>automatic choice
+</p>
+</dd>
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>no dithering
+</p>
+</dd>
+<dt> ‘<samp>bayer</samp>’</dt>
+<dd><p>bayer dither
+</p>
+</dd>
+<dt> ‘<samp>ed</samp>’</dt>
+<dd><p>error diffusion dither
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Filtering-Introduction"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Filtering-Introduction">21. Filtering Introduction</a></h1>
+
+<p>Filtering in FFmpeg is enabled through the libavfilter library.
+</p>
+<p>In libavfilter, a filter can have multiple inputs and multiple
+outputs.
+To illustrate the sorts of things that are possible, we consider the
+following filtergraph.
+</p>
+<table><tr><td> </td><td><pre class="example"> [main]
+input --> split ---------------------> overlay --> output
+ | ^
+ |[tmp] [flip]|
+ +-----> crop --> vflip -------+
+</pre></td></tr></table>
+
+<p>This filtergraph splits the input 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:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
+</pre></td></tr></table>
+
+<p>The result will be that in output the top half of the video is mirrored
+onto the bottom half.
+</p>
+<p>Filters in the same linear chain are separated by commas, and distinct
+linear chains of filters are separated by semicolons. In our example,
+<var>crop,vflip</var> are in one linear chain, <var>split</var> and
+<var>overlay</var> are separately in another. The points where the linear
+chains join are labelled by names enclosed in square brackets. In the
+example, the split filter generates two outputs that are associated to
+the labels <var>[main]</var> and <var>[tmp]</var>.
+</p>
+<p>The stream sent to the second output of <var>split</var>, labelled as
+<var>[tmp]</var>, is processed through the <var>crop</var> filter, which crops
+away the lower half part of the video, and then vertically flipped. The
+<var>overlay</var> filter takes in input the first unchanged output of the
+split filter (which was labelled as <var>[main]</var>), and overlay on its
+lower half the output generated by the <var>crop,vflip</var> filterchain.
+</p>
+<p>Some filters take in input a list of parameters: they are specified
+after the filter name and an equal sign, and are separated from each other
+by a colon.
+</p>
+<p>There exist so-called <var>source filters</var> that do not have an
+audio/video input, and <var>sink filters</var> that will not have audio/video
+output.
+</p>
+
+<a name="graph2dot"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-graph2dot">22. graph2dot</a></h1>
+
+<p>The ‘<tt>graph2dot</tt>’ program included in the FFmpeg ‘<tt>tools</tt>’
+directory can be used to parse a filtergraph description and issue a
+corresponding textual representation in the dot language.
+</p>
+<p>Invoke the command:
+</p><table><tr><td> </td><td><pre class="example">graph2dot -h
+</pre></td></tr></table>
+
+<p>to see how to use ‘<tt>graph2dot</tt>’.
+</p>
+<p>You can then pass the dot description to the ‘<tt>dot</tt>’ program (from
+the graphviz suite of programs) and obtain a graphical representation
+of the filtergraph.
+</p>
+<p>For example the sequence of commands:
+</p><table><tr><td> </td><td><pre class="example">echo <var>GRAPH_DESCRIPTION</var> | \
+tools/graph2dot -o graph.tmp && \
+dot -Tpng graph.tmp -o graph.png && \
+display graph.png
+</pre></td></tr></table>
+
+<p>can be used to create and display an image representing the graph
+described by the <var>GRAPH_DESCRIPTION</var> string. Note that this string must be
+a complete self-contained graph, with its inputs and outputs explicitly defined.
+For example if your command line is of the form:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i infile -vf scale=640:360 outfile
+</pre></td></tr></table>
+<p>your <var>GRAPH_DESCRIPTION</var> string will need to be of the form:
+</p><table><tr><td> </td><td><pre class="example">nullsrc,scale=640:360,nullsink
+</pre></td></tr></table>
+<p>you may also need to set the <var>nullsrc</var> parameters and add a <var>format</var>
+filter in order to simulate a specific input file.
+</p>
+
+<a name="Filtergraph-description"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Filtergraph-description">23. Filtergraph description</a></h1>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>A filter with no input pads is called a "source", a filter with no
+output pads is called a "sink".
+</p>
+<p><a name="Filtergraph-syntax"></a>
+</p><a name="Filtergraph-syntax-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Filtergraph-syntax-1">23.1 Filtergraph syntax</a></h2>
+
+<p>A filtergraph can be represented using a textual representation, which is
+recognized by the ‘<samp>-filter</samp>’/‘<samp>-vf</samp>’ and ‘<samp>-filter_complex</samp>’
+options in <code>ffmpeg</code> and ‘<samp>-vf</samp>’ in <code>ffplay</code>, and by the
+<code>avfilter_graph_parse()</code>/<code>avfilter_graph_parse2()</code> function defined in
+‘<tt>libavfilter/avfilter.h</tt>’.
+</p>
+<p>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.
+</p>
+<p>A filtergraph consists of a sequence of filterchains. A sequence of
+filterchains is represented by a list of ";"-separated filterchain
+descriptions.
+</p>
+<p>A filter is represented by a string of the form:
+[<var>in_link_1</var>]...[<var>in_link_N</var>]<var>filter_name</var>=<var>arguments</var>[<var>out_link_1</var>]...[<var>out_link_M</var>]
+</p>
+<p><var>filter_name</var> 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
+"=<var>arguments</var>".
+</p>
+<p><var>arguments</var> is a string which contains the parameters used to
+initialize the filter instance. It may have one of the following forms:
+</p><ul>
+<li>
+A ’:’-separated list of <var>key=value</var> pairs.
+
+</li><li>
+A ’:’-separated list of <var>value</var>. In this case, the keys are assumed to be
+the option names in the order they are declared. E.g. the <code>fade</code> filter
+declares three options in this order – ‘<samp>type</samp>’, ‘<samp>start_frame</samp>’ and
+‘<samp>nb_frames</samp>’. Then the parameter list <var>in:0:30</var> means that the value
+<var>in</var> is assigned to the option ‘<samp>type</samp>’, <var>0</var> to
+‘<samp>start_frame</samp>’ and <var>30</var> to ‘<samp>nb_frames</samp>’.
+
+</li><li>
+A ’:’-separated list of mixed direct <var>value</var> and long <var>key=value</var>
+pairs. The direct <var>value</var> must precede the <var>key=value</var> pairs, and
+follow the same constraints order of the previous point. The following
+<var>key=value</var> pairs can be set in any preferred order.
+
+</li></ul>
+
+<p>If the option value itself is a list of items (e.g. the <code>format</code> filter
+takes a list of pixel formats), the items in the list are usually separated by
+’|’.
+</p>
+<p>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.
+</p>
+<p>The name and arguments of the filter are optionally preceded and
+followed by a list of link labels.
+A link label allows one to name a link and associate it to a filter output
+or input pad. The preceding labels <var>in_link_1</var>
+... <var>in_link_N</var>, are associated to the filter input pads,
+the following labels <var>out_link_1</var> ... <var>out_link_M</var>, are
+associated to the output pads.
+</p>
+<p>When two link labels with the same name are found in the
+filtergraph, a link between the corresponding input and output pad is
+created.
+</p>
+<p>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:
+</p><table><tr><td> </td><td><pre class="example">nullsrc, split[L1], [L2]overlay, nullsink
+</pre></td></tr></table>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>Libavfilter will automatically insert <a href="#scale">scale</a> filters where format
+conversion is required. It is possible to specify swscale flags
+for those automatically inserted scalers by prepending
+<code>sws_flags=<var>flags</var>;</code>
+to the filtergraph description.
+</p>
+<p>Follows a BNF description for the filtergraph syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>NAME</var> ::= sequence of alphanumeric characters and '_'
+<var>LINKLABEL</var> ::= "[" <var>NAME</var> "]"
+<var>LINKLABELS</var> ::= <var>LINKLABEL</var> [<var>LINKLABELS</var>]
+<var>FILTER_ARGUMENTS</var> ::= sequence of chars (eventually quoted)
+<var>FILTER</var> ::= [<var>LINKLABELS</var>] <var>NAME</var> ["=" <var>FILTER_ARGUMENTS</var>] [<var>LINKLABELS</var>]
+<var>FILTERCHAIN</var> ::= <var>FILTER</var> [,<var>FILTERCHAIN</var>]
+<var>FILTERGRAPH</var> ::= [sws_flags=<var>flags</var>;] <var>FILTERCHAIN</var> [;<var>FILTERGRAPH</var>]
+</pre></td></tr></table>
+
+<a name="Notes-on-filtergraph-escaping"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-Notes-on-filtergraph-escaping">23.2 Notes on filtergraph escaping</a></h2>
+
+<p>Filtergraph description composition entails several levels of
+escaping. See <a href="ffmpeg-utils.html#quoting_005fand_005fescaping">(ffmpeg-utils)quoting_and_escaping</a> for more
+information about the employed escaping procedure.
+</p>
+<p>A first level escaping affects the content of each filter option
+value, which may contain the special character <code>:</code> used to
+separate values, or one of the escaping characters <code>\'</code>.
+</p>
+<p>A second level escaping affects the whole filter description, which
+may contain the escaping characters <code>\'</code> or the special
+characters <code>[],;</code> used by the filtergraph description.
+</p>
+<p>Finally, when you specify a filtergraph on a shell commandline, you
+need to perform a third level escaping for the shell special
+characters contained within it.
+</p>
+<p>For example, consider the following string to be embedded in
+the <a href="#drawtext">drawtext</a> filter description ‘<samp>text</samp>’ value:
+</p><table><tr><td> </td><td><pre class="example">this is a 'string': may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>This string contains the <code>'</code> special escaping character, and the
+<code>:</code> special character, so it needs to be escaped in this way:
+</p><table><tr><td> </td><td><pre class="example">text=this is a \'string\'\: may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>A second level of escaping is required when embedding the filter
+description in a filtergraph description, in order to escape all the
+filtergraph special characters. Thus the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
+</pre></td></tr></table>
+<p>(note that in addition to the <code>\'</code> escaping special characters,
+also <code>,</code> needs to be escaped).
+</p>
+<p>Finally an additional level of escaping is needed when writing the
+filtergraph description in a shell command, which depends on the
+escaping rules of the adopted shell. For example, assuming that
+<code>\</code> is special and needs to be escaped with another <code>\</code>, the
+previous string will finally result in:
+</p><table><tr><td> </td><td><pre class="example">-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
+</pre></td></tr></table>
+
+<a name="Timeline-editing"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Timeline-editing">24. Timeline editing</a></h1>
+
+<p>Some filters support a generic ‘<samp>enable</samp>’ option. For the filters
+supporting timeline editing, this option can be set to an expression which is
+evaluated before sending a frame to the filter. If the evaluation is non-zero,
+the filter will be enabled, otherwise the frame will be sent unchanged to the
+next filter in the filtergraph.
+</p>
+<p>The expression accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p></dd>
+</dl>
+
+<p>Additionally, these filters support an ‘<samp>enable</samp>’ command that can be used
+to re-define the expression.
+</p>
+<p>Like any other filtering option, the ‘<samp>enable</samp>’ option follows the same
+rules.
+</p>
+<p>For example, to enable a blur filter (<a href="#smartblur">smartblur</a>) from 10 seconds to 3
+minutes, and a <a href="#curves">curves</a> filter starting at 3 seconds:
+</p><table><tr><td> </td><td><pre class="example">smartblur = enable='between(t,10,3*60)',
+curves = enable='gte(t,3)' : preset=cross_process
+</pre></td></tr></table>
+
+
+<a name="Audio-Filters"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Audio-Filters">25. Audio Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the audio filters included in your
+build.
+</p>
+<p>Below is a description of the currently available audio filters.
+</p>
+<a name="aconvert"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aconvert">25.1 aconvert</a></h2>
+
+<p>Convert the input audio format to the specified formats.
+</p>
+<p><em>This filter is deprecated. Use <a href="#aformat">aformat</a> instead.</em>
+</p>
+<p>The filter accepts a string of the form:
+"<var>sample_format</var>:<var>channel_layout</var>".
+</p>
+<p><var>sample_format</var> specifies the sample format, and can be a string or the
+corresponding numeric value defined in ‘<tt>libavutil/samplefmt.h</tt>’. Use ’p’
+suffix for a planar sample format.
+</p>
+<p><var>channel_layout</var> specifies the channel layout, and can be a string
+or the corresponding number value defined in ‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<p>The special parameter "auto", signifies that the filter will
+automatically select the output format depending on the output filter.
+</p>
+<a name="Examples-47"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-47">25.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input to float, planar, stereo:
+<table><tr><td> </td><td><pre class="example">aconvert=fltp:stereo
+</pre></td></tr></table>
+
+</li><li>
+Convert input to unsigned 8-bit, automatically select out channel layout:
+<table><tr><td> </td><td><pre class="example">aconvert=u8:auto
+</pre></td></tr></table>
+</li></ul>
+
+<a name="adelay"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-adelay">25.2 adelay</a></h2>
+
+<p>Delay one or more audio channels.
+</p>
+<p>Samples in delayed channel are filled with silence.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of delays in milliseconds for each channel separated by ’|’.
+At least one delay greater than 0 should be provided.
+Unused delays will be silently ignored. If number of given delays is
+smaller than number of channels all remaining channels will not be delayed.
+</p></dd>
+</dl>
+
+<a name="Examples-31"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-31">25.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Delay first channel by 1.5 seconds, the third channel by 0.5 seconds and leave
+the second channel (and any other channels that may be present) unchanged.
+<table><tr><td> </td><td><pre class="example">adelay=1500|0|500
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aecho"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aecho">25.3 aecho</a></h2>
+
+<p>Apply echoing to the input audio.
+</p>
+<p>Echoes are reflected sound and can occur naturally amongst mountains
+(and sometimes large buildings) when talking or shouting; digital echo
+effects emulate this behaviour and are often used to help fill out the
+sound of a single instrument or vocal. The time difference between the
+original signal and the reflection is the <code>delay</code>, and the
+loudness of the reflected signal is the <code>decay</code>.
+Multiple echoes can have different delays and decays.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain of reflected signal. Default is <code>0.6</code>.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain of reflected signal. Default is <code>0.3</code>.
+</p>
+</dd>
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of time intervals in milliseconds between original signal and reflections
+separated by ’|’. Allowed range for each <code>delay</code> is <code>(0 - 90000.0]</code>.
+Default is <code>1000</code>.
+</p>
+</dd>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of loudnesses of reflected signals separated by ’|’.
+Allowed range for each <code>decay</code> is <code>(0 - 1.0]</code>.
+Default is <code>0.5</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-75"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-75">25.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Make it sound as if there are twice as many instruments as are actually playing:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:60:0.4
+</pre></td></tr></table>
+
+</li><li>
+If delay is very short, then it sound like a (metallic) robot playing music:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:6:0.4
+</pre></td></tr></table>
+
+</li><li>
+A longer delay will sound like an open air concert in the mountains:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000:0.3
+</pre></td></tr></table>
+
+</li><li>
+Same as above but with one more mountain:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000|1800:0.3|0.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aeval"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aeval">25.4 aeval</a></h2>
+
+<p>Modify an audio signal according to the specified expressions.
+</p>
+<p>This filter accepts one or more expressions (one for each channel),
+which are evaluated and used to modify a corresponding audio signal.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. If
+the number of input channels is greater than the number of
+expressions, the last specified expression is used for the remaining
+output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set output channel layout. If not specified, the channel layout is
+specified by the number of expressions. If set to ‘<samp>same</samp>’, it will
+use by default the same input channel layout.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>channel number of the current expression
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds
+</p>
+</dd>
+<dt> ‘<samp>nb_in_channels</samp>’</dt>
+<dt> ‘<samp>nb_out_channels</samp>’</dt>
+<dd><p>input and output number of channels
+</p>
+</dd>
+<dt> ‘<samp>val(CH)</samp>’</dt>
+<dd><p>the value of input channel with number <var>CH</var>
+</p></dd>
+</dl>
+
+<p>Note: this filter is slow. For faster processing you should use a
+dedicated filter.
+</p>
+<a name="Examples-82"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-82">25.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Half volume:
+<table><tr><td> </td><td><pre class="example">aeval=val(ch)/2:c=same
+</pre></td></tr></table>
+
+</li><li>
+Invert phase of the second channel:
+<table><tr><td> </td><td><pre class="example">eval=val(0)|-val(1)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="afade"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-afade">25.5 afade</a></h2>
+
+<p>Apply fade-in/out effect to input audio.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>Specify the effect type, can be either <code>in</code> for fade-in, or
+<code>out</code> for a fade-out effect. Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_sample, ss</samp>’</dt>
+<dd><p>Specify the number of the start sample for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, ns</samp>’</dt>
+<dd><p>Specify the number of samples for which the fade effect has to last. At
+the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence. Default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify time for starting to apply the fade effect. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+If set this option is used instead of <var>start_sample</var> one.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration for which the fade effect has to last. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+At the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence.
+If set this option is used instead of <var>nb_samples</var> one.
+</p>
+</dd>
+<dt> ‘<samp>curve</samp>’</dt>
+<dd><p>Set curve for fade transition.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>tri</samp>’</dt>
+<dd><p>select triangular, linear slope (default)
+</p></dd>
+<dt> ‘<samp>qsin</samp>’</dt>
+<dd><p>select quarter of sine wave
+</p></dd>
+<dt> ‘<samp>hsin</samp>’</dt>
+<dd><p>select half of sine wave
+</p></dd>
+<dt> ‘<samp>esin</samp>’</dt>
+<dd><p>select exponential sine wave
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>select logarithmic
+</p></dd>
+<dt> ‘<samp>par</samp>’</dt>
+<dd><p>select inverted parabola
+</p></dd>
+<dt> ‘<samp>qua</samp>’</dt>
+<dd><p>select quadratic
+</p></dd>
+<dt> ‘<samp>cub</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>squ</samp>’</dt>
+<dd><p>select square root
+</p></dd>
+<dt> ‘<samp>cbr</samp>’</dt>
+<dd><p>select cubic root
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-33"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-33">25.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 15 seconds of audio:
+<table><tr><td> </td><td><pre class="example">afade=t=in:ss=0:d=15
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 25 seconds of a 900 seconds audio:
+<table><tr><td> </td><td><pre class="example">afade=t=out:st=875:d=25
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="aformat"></a>
+</p><a name="aformat-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aformat-1">25.6 aformat</a></h2>
+
+<p>Set output format constraints for the input audio. The framework will
+negotiate the most appropriate format to minimize conversions.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>sample_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample formats.
+</p>
+</dd>
+<dt> ‘<samp>sample_rates</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample rates.
+</p>
+</dd>
+<dt> ‘<samp>channel_layouts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested channel layouts.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p></dd>
+</dl>
+
+<p>If a parameter is omitted, all values are allowed.
+</p>
+<p>For example to force the output to either unsigned 8-bit or signed 16-bit stereo:
+</p><table><tr><td> </td><td><pre class="example">aformat=sample_fmts=u8|s16:channel_layouts=stereo
+</pre></td></tr></table>
+
+<a name="allpass"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-allpass">25.7 allpass</a></h2>
+
+<p>Apply a two-pole all-pass filter with central frequency (in Hz)
+<var>frequency</var>, and filter-width <var>width</var>.
+An all-pass filter changes the audio’s frequency to phase relationship
+without changing its frequency to amplitude relationship.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="amerge"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-amerge">25.8 amerge</a></h2>
+
+<p>Merge two or more audio streams into a single multi-channel stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Set the number of inputs. Default is 2.
+</p>
+</dd>
+</dl>
+
+<p>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.
+</p>
+<p>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).
+</p>
+<p>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.
+</p>
+<p>All inputs must have the same sample rate, and format.
+</p>
+<p>If inputs do not have the same duration, the output will stop with the
+shortest.
+</p>
+<a name="Examples-67"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-67">25.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge two mono files into a stereo stream:
+<table><tr><td> </td><td><pre class="example">amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
+</pre></td></tr></table>
+
+</li><li>
+Multiple merges assuming 1 video stream and 6 audio streams in ‘<tt>input.mkv</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="amix"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-amix">25.9 amix</a></h2>
+
+<p>Mixes multiple audio inputs into a single output.
+</p>
+<p>For example
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
+</pre></td></tr></table>
+<p>will mix 3 input audio streams to a single output with the same duration as the
+first input and a dropout transition time of 3 seconds.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of inputs. If unspecified, it defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>How to determine the end-of-stream.
+</p><dl compact="compact">
+<dt> ‘<samp>longest</samp>’</dt>
+<dd><p>Duration of longest input. (default)
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Duration of shortest input.
+</p>
+</dd>
+<dt> ‘<samp>first</samp>’</dt>
+<dd><p>Duration of first input.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dropout_transition</samp>’</dt>
+<dd><p>Transition time, in seconds, for volume renormalization when an input
+stream ends. The default value is 2 seconds.
+</p>
+</dd>
+</dl>
+
+<a name="anull"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-anull">25.10 anull</a></h2>
+
+<p>Pass the audio source unchanged to the output.
+</p>
+<a name="apad"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-apad">25.11 apad</a></h2>
+
+<p>Pad the end of a audio stream with silence, this can be used together with
+-shortest to extend audio streams to the same length as the video stream.
+</p>
+<a name="aphaser"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aphaser">25.12 aphaser</a></h2>
+<p>Add a phasing effect to the input audio.
+</p>
+<p>A phaser filter creates series of peaks and troughs in the frequency spectrum.
+The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain. Default is 0.74
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in milliseconds. Default is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>decay</samp>’</dt>
+<dd><p>Set decay. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>speed</samp>’</dt>
+<dd><p>Set modulation speed in Hz. Default is 0.5.
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Set modulation type. Default is triangular.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>triangular, t</samp>’</dt>
+<dt> ‘<samp>sinusoidal, s</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+<p><a name="aresample"></a>
+</p><a name="aresample-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aresample-1">25.13 aresample</a></h2>
+
+<p>Resample the input audio to the specified parameters, using the
+libswresample library. If none are specified then the filter will
+automatically convert between its input and output.
+</p>
+<p>This filter is also able to stretch/squeeze the audio data to make it match
+the timestamps or to inject silence / cut out audio to make it match the
+timestamps, do a combination of both or do neither.
+</p>
+<p>The filter accepts the syntax
+[<var>sample_rate</var>:]<var>resampler_options</var>, where <var>sample_rate</var>
+expresses a sample rate and <var>resampler_options</var> is a list of
+<var>key</var>=<var>value</var> pairs, separated by ":". See the
+ffmpeg-resampler manual for the complete list of supported options.
+</p>
+<a name="Examples-38"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-38">25.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Resample the input audio to 44100Hz:
+<table><tr><td> </td><td><pre class="example">aresample=44100
+</pre></td></tr></table>
+
+</li><li>
+Stretch/squeeze samples to the given timestamps, with a maximum of 1000
+samples per second compensation:
+<table><tr><td> </td><td><pre class="example">aresample=async=1000
+</pre></td></tr></table>
+</li></ul>
+
+<a name="asetnsamples"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-asetnsamples">25.14 asetnsamples</a></h2>
+
+<p>Set the number of samples per each output audio frame.
+</p>
+<p>The last output packet may contain a different number of samples, as
+the filter will flush all the remaining samples when the input audio
+signal its end.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_out_samples, n</samp>’</dt>
+<dd><p>Set the number of frames per each output audio frame. The number is
+intended as the number of samples <em>per each channel</em>.
+Default value is 1024.
+</p>
+</dd>
+<dt> ‘<samp>pad, p</samp>’</dt>
+<dd><p>If set to 1, the filter will pad the last audio frame with zeroes, so
+that the last frame will contain the same number of samples as the
+previous ones. Default value is 1.
+</p></dd>
+</dl>
+
+<p>For example, to set the number of per-frame samples to 1234 and
+disable padding for the last frame, use:
+</p><table><tr><td> </td><td><pre class="example">asetnsamples=n=1234:p=0
+</pre></td></tr></table>
+
+<a name="asetrate"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-asetrate">25.15 asetrate</a></h2>
+
+<p>Set the sample rate without altering the PCM data.
+This will result in a change of speed and pitch.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Set the output sample rate. Default is 44100 Hz.
+</p></dd>
+</dl>
+
+<a name="ashowinfo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ashowinfo">25.16 ashowinfo</a></h2>
+
+<p>Show a line containing various information for each input audio frame.
+The input audio is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation timestamp of the input frame, in time base units; the time base
+depends on the filter input pad, and is usually 1/<var>sample_rate</var>.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>presentation timestamp of the input frame in seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic audio)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>sample format
+</p>
+</dd>
+<dt> ‘<samp>chlayout</samp>’</dt>
+<dd><p>channel layout
+</p>
+</dd>
+<dt> ‘<samp>rate</samp>’</dt>
+<dd><p>sample rate for the audio frame
+</p>
+</dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples (per channel) in the frame
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio
+the data is treated as if all the planes were concatenated.
+</p>
+</dd>
+<dt> ‘<samp>plane_checksums</samp>’</dt>
+<dd><p>A list of Adler-32 checksums for each data plane.
+</p></dd>
+</dl>
+
+<a name="astats"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-astats">25.17 astats</a></h2>
+
+<p>Display time domain statistical information about the audio channels.
+Statistics are calculated and displayed for each audio channel and,
+where applicable, an overall figure is also given.
+</p>
+<p>The filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>length</samp>’</dt>
+<dd><p>Short window length in seconds, used for peak and trough RMS measurement.
+Default is <code>0.05</code> (50 miliseconds). Allowed range is <code>[0.1 - 10]</code>.
+</p></dd>
+</dl>
+
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>DC offset</samp>’</dt>
+<dd><p>Mean amplitude displacement from zero.
+</p>
+</dd>
+<dt> ‘<samp>Min level</samp>’</dt>
+<dd><p>Minimal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Max level</samp>’</dt>
+<dd><p>Maximal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Peak level dB</samp>’</dt>
+<dt> ‘<samp>RMS level dB</samp>’</dt>
+<dd><p>Standard peak and RMS level measured in dBFS.
+</p>
+</dd>
+<dt> ‘<samp>RMS peak dB</samp>’</dt>
+<dt> ‘<samp>RMS trough dB</samp>’</dt>
+<dd><p>Peak and trough values for RMS level measured over a short window.
+</p>
+</dd>
+<dt> ‘<samp>Crest factor</samp>’</dt>
+<dd><p>Standard ratio of peak to RMS level (note: not in dB).
+</p>
+</dd>
+<dt> ‘<samp>Flat factor</samp>’</dt>
+<dd><p>Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels
+(i.e. either <var>Min level</var> or <var>Max level</var>).
+</p>
+</dd>
+<dt> ‘<samp>Peak count</samp>’</dt>
+<dd><p>Number of occasions (not the number of samples) that the signal attained either
+<var>Min level</var> or <var>Max level</var>.
+</p></dd>
+</dl>
+
+<a name="astreamsync"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-astreamsync">25.18 astreamsync</a></h2>
+
+<p>Forward two audio streams and control the order the buffers are forwarded.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the 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:
+</p>
+<dl compact="compact">
+<dt> <var>b1 b2</var></dt>
+<dd><p>number of buffers forwarded so far on each stream
+</p></dd>
+<dt> <var>s1 s2</var></dt>
+<dd><p>number of samples forwarded so far on each stream
+</p></dd>
+<dt> <var>t1 t2</var></dt>
+<dd><p>current timestamp of each stream
+</p></dd>
+</dl>
+
+<p>The default value is <code>t1-t2</code>, which means to always forward the stream
+that has a smaller timestamp.
+</p></dd>
+</dl>
+
+<a name="Examples-41"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-41">25.18.1 Examples</a></h3>
+
+<p>Stress-test <code>amerge</code> by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+</p><table><tr><td> </td><td><pre class="example">amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
+[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
+[a2] [b2] amerge
+</pre></td></tr></table>
+
+<a name="asyncts"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-asyncts">25.19 asyncts</a></h2>
+
+<p>Synchronize audio data with timestamps by squeezing/stretching it and/or
+dropping samples/adding silence when needed.
+</p>
+<p>This filter is not built by default, please use <a href="#aresample">aresample</a> to do squeezing/stretching.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>compensate</samp>’</dt>
+<dd><p>Enable stretching/squeezing the data to make it match the timestamps. Disabled
+by default. When disabled, time gaps are covered with silence.
+</p>
+</dd>
+<dt> ‘<samp>min_delta</samp>’</dt>
+<dd><p>Minimum difference between timestamps and audio data (in seconds) to trigger
+adding/dropping samples. Default value is 0.1. If you get non-perfect sync with
+this filter, try setting this parameter to 0.
+</p>
+</dd>
+<dt> ‘<samp>max_comp</samp>’</dt>
+<dd><p>Maximum compensation in samples per second. Relevant only with compensate=1.
+Default value 500.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>Assume the first pts should be this value. The time base is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+</dl>
+
+<a name="atempo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-atempo">25.20 atempo</a></h2>
+
+<p>Adjust audio tempo.
+</p>
+<p>The filter accepts exactly one parameter, the audio tempo. If not
+specified then the filter will assume nominal 1.0 tempo. Tempo must
+be in the [0.5, 2.0] range.
+</p>
+<a name="Examples-81"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-81">25.20.1 Examples</a></h3>
+
+<ul>
+<li>
+Slow down audio to 80% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=0.8
+</pre></td></tr></table>
+
+</li><li>
+To speed up audio to 125% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=1.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="atrim"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-atrim">25.21 atrim</a></h2>
+
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the audio sample
+with the timestamp <var>start</var> will be the first sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first audio sample that will be dropped, i.e. the
+audio sample immediately preceding the one with the timestamp <var>end</var> will be
+the last sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in samples
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in samples instead
+of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _sample options simply count the
+samples that pass through the filter. So start/end_pts and start/end_sample will
+give different results when the timestamps are wrong, inexact or do not start at
+zero. Also note that this filter does not modify the timestamps. If you wish
+that the output timestamps start at zero, insert the asetpts filter after the
+atrim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all samples that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple atrim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first 1000 samples
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=end_sample=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="bandpass"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-bandpass">25.22 bandpass</a></h2>
+
+<p>Apply a two-pole Butterworth band-pass filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width width.
+The <var>csg</var> option selects a constant skirt gain (peak gain = Q)
+instead of the default: constant 0dB peak gain.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>csg</samp>’</dt>
+<dd><p>Constant skirt gain if set to 1. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bandreject"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-bandreject">25.23 bandreject</a></h2>
+
+<p>Apply a two-pole Butterworth band-reject filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width <var>width</var>.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bass"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-bass">25.24 bass</a></h2>
+
+<p>Boost or cut the bass (lower) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at 0 Hz. Its useful range is about -20
+(for a large cut) to +20 (for a large boost).
+Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>100</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="biquad"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-biquad">25.25 biquad</a></h2>
+
+<p>Apply a biquad IIR filter with the given coefficients.
+Where <var>b0</var>, <var>b1</var>, <var>b2</var> and <var>a0</var>, <var>a1</var>, <var>a2</var>
+are the numerator and denominator coefficients respectively.
+</p>
+<a name="channelmap"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-channelmap">25.26 channelmap</a></h2>
+
+<p>Remap input channels to new locations.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the output stream.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from input to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>in_channel</var>-<var>out_channel</var></code> or
+<var>in_channel</var> form. <var>in_channel</var> can be either the name of the input
+channel (e.g. FL for front left) or its index in the input channel layout.
+<var>out_channel</var> is the name of the output channel or its index in the output
+channel layout. If <var>out_channel</var> is not given then it is implicitly an
+index, starting with zero and increasing by one for each mapping.
+</p></dd>
+</dl>
+
+<p>If no mapping is present, the filter will implicitly map input channels to
+output channels preserving index.
+</p>
+<p>For example, assuming a 5.1+downmix input MOV file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
+</pre></td></tr></table>
+<p>will create an output WAV file tagged as stereo from the downmix channels of
+the input.
+</p>
+<p>To fix a 5.1 WAV improperly encoded in AAC’s native channel order
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
+</pre></td></tr></table>
+
+<a name="channelsplit"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-channelsplit">25.27 channelsplit</a></h2>
+
+<p>Split each channel in input audio stream into a separate output stream.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the input stream. Default is "stereo".
+</p></dd>
+</dl>
+
+<p>For example, assuming a stereo input MP3 file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
+</pre></td></tr></table>
+<p>will create an output Matroska file with two audio streams, one containing only
+the left channel and the other the right channel.
+</p>
+<p>To split a 5.1 WAV file into per-channel files
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter_complex
+'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
+-map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
+front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
+side_right.wav
+</pre></td></tr></table>
+
+<a name="compand"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-compand">25.28 compand</a></h2>
+<p>Compress or expand audio dynamic range.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>attacks</samp>’</dt>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of times in seconds for each channel over which the instantaneous level
+of the input signal is averaged to determine its volume. <var>attacks</var> refers to
+increase of volume and <var>decays</var> refers to decrease of volume. For most
+situations, the attack time (response to the audio getting louder) should be
+shorter than the decay time because the human ear is more sensitive to sudden
+loud audio than sudden soft audio. A typical value for attack is 0.3 seconds and
+a typical value for decay is 0.8 seconds.
+</p>
+</dd>
+<dt> ‘<samp>points</samp>’</dt>
+<dd><p>Set list of points for the transfer function, specified in dB relative to the
+maximum possible signal amplitude. Each key points list must be defined using
+the following syntax: <code>x0/y0|x1/y1|x2/y2|....</code> or
+<code>x0/y0 x1/y1 x2/y2 ....</code>
+</p>
+<p>The input values must be in strictly increasing order but the transfer function
+does not have to be monotonically rising. The point <code>0/0</code> is assumed but
+may be overridden (by <code>0/out-dBn</code>). Typical values for the transfer
+function are <code>-70/-70|-60/-20</code>.
+</p>
+</dd>
+<dt> ‘<samp>soft-knee</samp>’</dt>
+<dd><p>Set the curve radius in dB for all joints. Defaults to 0.01.
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>Set additional gain in dB to be applied at all points on the transfer function.
+This allows easy adjustment of the overall gain. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set initial volume in dB to be assumed for each channel when filtering starts.
+This permits the user to supply a nominal level initially, so that, for
+example, a very large gain is not applied to initial signal levels before the
+companding has begun to operate. A typical value for audio which is initially
+quiet is -90 dB. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in seconds. The input audio is analyzed immediately, but audio is
+delayed before being fed to the volume adjuster. Specifying a delay
+approximately equal to the attack/decay times allows the filter to effectively
+operate in predictive rather than reactive mode. Defaults to 0.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-21"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-21">25.28.1 Examples</a></h3>
+
+<ul>
+<li>
+Make music with both quiet and loud passages suitable for listening in a noisy
+environment:
+<table><tr><td> </td><td><pre class="example">compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
+</pre></td></tr></table>
+
+</li><li>
+Noise gate for when the noise is at a lower level than the signal:
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
+</pre></td></tr></table>
+
+</li><li>
+Here is another noise gate, this time for when the noise is at a higher level
+than the signal (making it, in some ways, similar to squelch):
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="earwax"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-earwax">25.29 earwax</a></h2>
+
+<p>Make audio easier to listen to on headphones.
+</p>
+<p>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).
+</p>
+<p>Ported from SoX.
+</p>
+<a name="equalizer"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-equalizer">25.30 equalizer</a></h2>
+
+<p>Apply a two-pole peaking equalisation (EQ) filter. With this
+filter, the signal-level at and around a selected frequency can
+be increased or decreased, whilst (unlike bandpass and bandreject
+filters) that at all other frequencies is unchanged.
+</p>
+<p>In order to produce complex equalisation curves, this filter can
+be given several times, each with a different central frequency.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p>
+</dd>
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Set the required gain or attenuation in dB.
+Beware of clipping when using a positive gain.
+</p></dd>
+</dl>
+
+<a name="Examples-70"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-70">25.30.1 Examples</a></h3>
+<ul>
+<li>
+Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=h:width=200:g=-10
+</pre></td></tr></table>
+
+</li><li>
+Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=q:width=1:g=2,equalizer=f=100:width_type=q:width=2:g=-5
+</pre></td></tr></table>
+</li></ul>
+
+<a name="highpass"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-highpass">25.31 highpass</a></h2>
+
+<p>Apply a high-pass filter with 3dB point frequency.
+The filter can be either single-pole, or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="join"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-join">25.32 join</a></h2>
+
+<p>Join multiple input streams into one multi-channel stream.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of input streams. Defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Desired output channel layout. Defaults to stereo.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from inputs to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>input_idx</var>.<var>in_channel</var>-<var>out_channel</var></code>
+form. <var>input_idx</var> is the 0-based index of the input stream. <var>in_channel</var>
+can be either the name of the input channel (e.g. FL for front left) or its
+index in the specified input stream. <var>out_channel</var> is the name of the output
+channel.
+</p></dd>
+</dl>
+
+<p>The filter will attempt to guess the mappings when those are not specified
+explicitly. It does so by first trying to find an unused matching input channel
+and if that fails it picks the first unused input channel.
+</p>
+<p>E.g. to join 3 inputs (with properly set channel layouts)
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
+</pre></td></tr></table>
+
+<p>To build a 5.1 output from 6 single-channel streams:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
+'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
+out
+</pre></td></tr></table>
+
+<a name="ladspa"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ladspa">25.33 ladspa</a></h2>
+
+<p>Load a LADSPA (Linux Audio Developer’s Simple Plugin API) plugin.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-ladspa</code>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file, f</samp>’</dt>
+<dd><p>Specifies the name of LADSPA plugin library to load. If the environment
+variable <code>LADSPA_PATH</code> is defined, the LADSPA plugin is searched in
+each one of the directories specified by the colon separated list in
+<code>LADSPA_PATH</code>, otherwise in the standard LADSPA paths, which are in
+this order: ‘<tt>HOME/.ladspa/lib/</tt>’, ‘<tt>/usr/local/lib/ladspa/</tt>’,
+‘<tt>/usr/lib/ladspa/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>plugin, p</samp>’</dt>
+<dd><p>Specifies the plugin within the library. Some libraries contain only
+one plugin, but others contain many of them. If this is not set filter
+will list all available plugins within the specified library.
+</p>
+</dd>
+<dt> ‘<samp>controls, c</samp>’</dt>
+<dd><p>Set the ’|’ separated list of controls which are zero or more floating point
+values that determine the behavior of the loaded plugin (for example delay,
+threshold or gain).
+Controls need to be defined using the following syntax:
+c0=<var>value0</var>|c1=<var>value1</var>|c2=<var>value2</var>|..., where
+<var>valuei</var> is the value set on the <var>i</var>-th control.
+If ‘<samp>controls</samp>’ is set to <code>help</code>, all available controls and
+their valid ranges are printed.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100. Only used if plugin have
+zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame, default
+is 1024. Only used if plugin have zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> for the accepted format, also check the "Time duration"
+section in the ffmpeg-utils manual.
+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.
+Only used if plugin have zero inputs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-45"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-45">25.33.1 Examples</a></h3>
+
+<ul>
+<li>
+List all available plugins within amp (LADSPA example plugin) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=amp
+</pre></td></tr></table>
+
+</li><li>
+List all available controls and their valid ranges for <code>vcf_notch</code>
+plugin from <code>VCF</code> library:
+<table><tr><td> </td><td><pre class="example">ladspa=f=vcf:p=vcf_notch:c=help
+</pre></td></tr></table>
+
+</li><li>
+Simulate low quality audio equipment using <code>Computer Music Toolkit</code> (CMT)
+plugin library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
+</pre></td></tr></table>
+
+</li><li>
+Add reverberation to the audio using TAP-plugins
+(Tom’s Audio Processing plugins):
+<table><tr><td> </td><td><pre class="example">ladspa=file=tap_reverb:tap_reverb
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise, with 0.2 amplitude:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:noise_source_white:c=c0=.2
+</pre></td></tr></table>
+
+</li><li>
+Generate 20 bpm clicks using plugin <code>C* Click - Metronome</code> from the
+<code>C* Audio Plugin Suite</code> (CAPS) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=caps:Click:c=c1=20'
+</pre></td></tr></table>
+
+</li><li>
+Apply <code>C* Eq10X2 - Stereo 10-band equaliser</code> effect:
+<table><tr><td> </td><td><pre class="example">ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands-2"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands-2">25.33.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>cN</samp>’</dt>
+<dd><p>Modify the <var>N</var>-th control value.
+</p>
+<p>If the specified value is not valid, it is ignored and prior one is kept.
+</p></dd>
+</dl>
+
+<a name="lowpass"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-lowpass">25.34 lowpass</a></h2>
+
+<p>Apply a low-pass filter with 3dB point frequency.
+The filter can be either single-pole or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 500.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="pan"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pan">25.35 pan</a></h2>
+
+<p>Mix channels with specific gain levels. The filter accepts the output
+channel layout followed by a set of channels definitions.
+</p>
+<p>This filter is also designed to remap efficiently the channels of an audio
+stream.
+</p>
+<p>The filter accepts parameters of the form:
+"<var>l</var>:<var>outdef</var>:<var>outdef</var>:..."
+</p>
+<dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>output channel layout or number of channels
+</p>
+</dd>
+<dt> ‘<samp>outdef</samp>’</dt>
+<dd><p>output channel specification, of the form:
+"<var>out_name</var>=[<var>gain</var>*]<var>in_name</var>[+[<var>gain</var>*]<var>in_name</var>...]"
+</p>
+</dd>
+<dt> ‘<samp>out_name</samp>’</dt>
+<dd><p>output channel to define, either a channel name (FL, FR, etc.) or a channel
+number (c0, c1, etc.)
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>multiplicative coefficient for the channel, 1 leaving the volume unchanged
+</p>
+</dd>
+<dt> ‘<samp>in_name</samp>’</dt>
+<dd><p>input channel to use, see out_name for details; it is not possible to mix
+named and numbered input channels
+</p></dd>
+</dl>
+
+<p>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.
+</p>
+<a name="Mixing-examples"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Mixing-examples">25.35.1 Mixing examples</a></h3>
+
+<p>For example, if you want to down-mix from stereo to mono, but with a bigger
+factor for the left channel:
+</p><table><tr><td> </td><td><pre class="example">pan=1:c0=0.9*c0+0.1*c1
+</pre></td></tr></table>
+
+<p>A customized down-mix to stereo that works automatically for 3-, 4-, 5- and
+7-channels surround:
+</p><table><tr><td> </td><td><pre class="example">pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
+</pre></td></tr></table>
+
+<p>Note that <code>ffmpeg</code> integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+</p>
+<a name="Remapping-examples"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Remapping-examples">25.35.2 Remapping examples</a></h3>
+
+<p>The channel remapping will be effective if, and only if:
+</p>
+<ul>
+<li> gain coefficients are zeroes or ones,
+</li><li> only one input per channel output,
+</li></ul>
+
+<p>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.
+</p>
+<p>For example, if you have a 5.1 source and want a stereo audio stream by
+dropping the extra channels:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FL : c1=FR"
+</pre></td></tr></table>
+
+<p>Given the same source, you can also switch front left and front right channels
+and keep the input channel layout:
+</p><table><tr><td> </td><td><pre class="example">pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
+</pre></td></tr></table>
+
+<p>If the input is a stereo audio stream, you can mute the front left channel (and
+still keep the stereo channel layout) with:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo:c1=c1"
+</pre></td></tr></table>
+
+<p>Still with a stereo audio stream input, you can copy the right channel in both
+front left and right:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FR : c1=FR"
+</pre></td></tr></table>
+
+<a name="replaygain"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-replaygain">25.36 replaygain</a></h2>
+
+<p>ReplayGain scanner filter. This filter takes an audio stream as an input and
+outputs it unchanged.
+At end of filtering it displays <code>track_gain</code> and <code>track_peak</code>.
+</p>
+<a name="resample"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-resample">25.37 resample</a></h2>
+
+<p>Convert the audio sample format, sample rate and channel layout. This filter is
+not meant to be used directly.
+</p>
+<a name="silencedetect"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-silencedetect">25.38 silencedetect</a></h2>
+
+<p>Detect silence in an audio stream.
+</p>
+<p>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.
+</p>
+<p>The printed times and duration are expressed in seconds.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set silence duration until notification (default is 2 seconds).
+</p>
+</dd>
+<dt> ‘<samp>noise, n</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<a name="Examples-8"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-8">25.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Detect 5 seconds of silence with -50dB noise tolerance:
+<table><tr><td> </td><td><pre class="example">silencedetect=n=-50dB:d=5
+</pre></td></tr></table>
+
+</li><li>
+Complete example with <code>ffmpeg</code> to detect silence with 0.0001 noise
+tolerance in ‘<tt>silence.mp3</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="treble"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-treble">25.39 treble</a></h2>
+
+<p>Boost or cut treble (upper) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at whichever is the lower of ~22 kHz and the
+Nyquist frequency. Its useful range is about -20 (for a large cut)
+to +20 (for a large boost). Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>3000</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="volume"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-volume">25.40 volume</a></h2>
+
+<p>Adjust the input audio volume.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set audio volume expression.
+</p>
+<p>Output values are clipped to the maximum value.
+</p>
+<p>The output audio volume is given by the relation:
+</p><table><tr><td> </td><td><pre class="example"><var>output_volume</var> = <var>volume</var> * <var>input_volume</var>
+</pre></td></tr></table>
+
+<p>Default value for <var>volume</var> is "1.0".
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>Set the mathematical precision.
+</p>
+<p>This determines which input sample formats will be allowed, which affects the
+precision of the volume scaling.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fixed</samp>’</dt>
+<dd><p>8-bit fixed-point; limits input sample format to U8, S16, and S32.
+</p></dd>
+<dt> ‘<samp>float</samp>’</dt>
+<dd><p>32-bit floating-point; limits input sample format to FLT. (default)
+</p></dd>
+<dt> ‘<samp>double</samp>’</dt>
+<dd><p>64-bit floating-point; limits input sample format to DBL.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the volume expression is evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>once</samp>’</dt>
+<dd><p>only evaluate expression once during the filter initialization, or
+when the ‘<samp>volume</samp>’ command is sent
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expression for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>once</samp>’.
+</p></dd>
+</dl>
+
+<p>The volume expression can contain the following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame number (starting at zero)
+</p></dd>
+<dt> ‘<samp>nb_channels</samp>’</dt>
+<dd><p>number of channels
+</p></dd>
+<dt> ‘<samp>nb_consumed_samples</samp>’</dt>
+<dd><p>number of samples consumed by the filter
+</p></dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples in the current frame
+</p></dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>original frame position in the file
+</p></dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>frame PTS
+</p></dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>sample rate
+</p></dd>
+<dt> ‘<samp>startpts</samp>’</dt>
+<dd><p>PTS at start of stream
+</p></dd>
+<dt> ‘<samp>startt</samp>’</dt>
+<dd><p>time at start of stream
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>frame time
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>timestamp timebase
+</p></dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>last set volume value
+</p></dd>
+</dl>
+
+<p>Note that when ‘<samp>eval</samp>’ is set to ‘<samp>once</samp>’ only the
+<var>sample_rate</var> and <var>tb</var> variables are available, all other
+variables will evaluate to NAN.
+</p>
+<a name="Commands-1"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands-1">25.40.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Modify the volume expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-22"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-22">25.40.2 Examples</a></h3>
+
+<ul>
+<li>
+Halve the input audio volume:
+<table><tr><td> </td><td><pre class="example">volume=volume=0.5
+volume=volume=1/2
+volume=volume=-6.0206dB
+</pre></td></tr></table>
+
+<p>In all the above example the named key for ‘<samp>volume</samp>’ can be
+omitted, for example like in:
+</p><table><tr><td> </td><td><pre class="example">volume=0.5
+</pre></td></tr></table>
+
+</li><li>
+Increase input audio power by 6 decibels using fixed-point precision:
+<table><tr><td> </td><td><pre class="example">volume=volume=6dB:precision=fixed
+</pre></td></tr></table>
+
+</li><li>
+Fade volume after time 10 with an annihilation period of 5 seconds:
+<table><tr><td> </td><td><pre class="example">volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
+</pre></td></tr></table>
+</li></ul>
+
+<a name="volumedetect"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-volumedetect">25.41 volumedetect</a></h2>
+
+<p>Detect the volume of the input video.
+</p>
+<p>The filter has no parameters. The input is not modified. Statistics about
+the volume will be printed in the log when the input stream end is reached.
+</p>
+<p>In particular it will show the mean volume (root mean square), maximum
+volume (on a per-sample basis), and the beginning of a histogram of the
+registered volume values (from the maximum value to a cumulated 1/1000 of
+the samples).
+</p>
+<p>All volumes are in decibels relative to the maximum PCM value.
+</p>
+<a name="Examples-74"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-74">25.41.1 Examples</a></h3>
+
+<p>Here is an excerpt of the output:
+</p><table><tr><td> </td><td><pre class="example">[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB
+[Parsed_volumedetect_0 0xa23120] max_volume: -4 dB
+[Parsed_volumedetect_0 0xa23120] histogram_4db: 6
+[Parsed_volumedetect_0 0xa23120] histogram_5db: 62
+[Parsed_volumedetect_0 0xa23120] histogram_6db: 286
+[Parsed_volumedetect_0 0xa23120] histogram_7db: 1042
+[Parsed_volumedetect_0 0xa23120] histogram_8db: 2551
+[Parsed_volumedetect_0 0xa23120] histogram_9db: 4609
+[Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
+</pre></td></tr></table>
+
+<p>It means that:
+</p><ul>
+<li>
+The mean square energy is approximately -27 dB, or 10^-2.7.
+</li><li>
+The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB.
+</li><li>
+There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc.
+</li></ul>
+
+<p>In other words, raising the volume by +4 dB does not cause any clipping,
+raising it by +5 dB causes clipping for 6 samples, etc.
+</p>
+
+<a name="Audio-Sources"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Audio-Sources">26. Audio Sources</a></h1>
+
+<p>Below is a description of the currently available audio sources.
+</p>
+<a name="abuffer"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-abuffer">26.1 abuffer</a></h2>
+
+<p>Buffer audio frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/asrc_abuffer.h</tt>’.
+</p>
+<p>It accepts the following named parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Timebase which will be used for timestamps of submitted frames. It must be
+either a floating-point number or in <var>numerator</var>/<var>denominator</var> form.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>The sample rate of the incoming audio buffers.
+</p>
+</dd>
+<dt> ‘<samp>sample_fmt</samp>’</dt>
+<dd><p>The sample format of the incoming audio buffers.
+Either a sample format name or its corresponging integer representation from
+the enum AVSampleFormat in ‘<tt>libavutil/samplefmt.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>The channel layout of the incoming audio buffers.
+Either a channel layout name from channel_layout_map in
+‘<tt>libavutil/channel_layout.c</tt>’ or its corresponding integer representation
+from the AV_CH_LAYOUT_* macros in ‘<tt>libavutil/channel_layout.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>The number of channels of the incoming audio buffers.
+If both <var>channels</var> and <var>channel_layout</var> are specified, then they
+must be consistent.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-83"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-83">26.1.1 Examples</a></h3>
+
+<table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
+</pre></td></tr></table>
+
+<p>will instruct the source to accept planar 16bit signed stereo at 44100Hz.
+Since the sample format with name "s16p" corresponds to the number
+6 and the "stereo" channel layout corresponds to the value 0x3, this is
+equivalent to:
+</p><table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
+</pre></td></tr></table>
+
+<a name="aevalsrc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-aevalsrc">26.2 aevalsrc</a></h2>
+
+<p>Generate an audio signal specified by an expression.
+</p>
+<p>This source accepts in input one or more expressions (one for each
+channel), which are evaluated and used to generate a corresponding
+audio signal.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. In case the
+‘<samp>channel_layout</samp>’ option is not specified, the selected channel layout
+depends on the number of provided expressions. Otherwise the last
+specified expression is applied to the remaining output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set the channel layout. The number of channels in the specified layout
+must be equal to the number of specified expressions.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> 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.
+</p>
+<p>If not specified, or the expressed duration is negative, the audio is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame,
+default to 1024.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+</dl>
+
+<a name="Examples-55"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-55">26.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate silence:
+<table><tr><td> </td><td><pre class="example">aevalsrc=0
+</pre></td></tr></table>
+
+</li><li>
+Generate a sin signal with frequency of 440 Hz, set sample rate to
+8000 Hz:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(440*2*PI*t):s=8000"
+</pre></td></tr></table>
+
+</li><li>
+Generate a two channels signal, specify the channel layout (Front
+Center + Back Center) explicitly:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise:
+<table><tr><td> </td><td><pre class="example">aevalsrc="-2+random(0)"
+</pre></td></tr></table>
+
+</li><li>
+Generate an amplitude modulated signal:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
+</pre></td></tr></table>
+
+</li><li>
+Generate 2.5 Hz binaural beats on a 360 Hz carrier:
+<table><tr><td> </td><td><pre class="example">aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="anullsrc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-anullsrc">26.3 anullsrc</a></h2>
+
+<p>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).
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>channel_layout, cl</samp>’</dt>
+<dd>
+<p>Specify the channel layout, and can be either an integer or a string
+representing a channel layout. The default value of <var>channel_layout</var>
+is "stereo".
+</p>
+<p>Check the channel_layout_map definition in
+‘<tt>libavutil/channel_layout.c</tt>’ for the mapping between strings and
+channel layout values.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, and defaults to 44100.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per requested frames.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-40"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-40">26.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=4
+</pre></td></tr></table>
+
+</li><li>
+Do the same operation with a more obvious syntax:
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=mono
+</pre></td></tr></table>
+</li></ul>
+
+<p>All the parameters need to be explicitly defined.
+</p>
+<a name="flite"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-flite">26.4 flite</a></h2>
+
+<p>Synthesize a voice utterance using the libflite library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libflite</code>.
+</p>
+<p>Note that the flite library is not thread-safe.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>list_voices</samp>’</dt>
+<dd><p>If set to 1, list the names of the available voices and exit
+immediately. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the maximum number of samples per frame. Default value is 512.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>Set the filename containing the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>Set the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>voice, v</samp>’</dt>
+<dd><p>Set the voice to use for the speech synthesis. Default value is
+<code>kal</code>. See also the <var>list_voices</var> option.
+</p></dd>
+</dl>
+
+<a name="Examples-42"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-42">26.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Read from file ‘<tt>speech.txt</tt>’, and synthetize the text using the
+standard flite voice:
+<table><tr><td> </td><td><pre class="example">flite=textfile=speech.txt
+</pre></td></tr></table>
+
+</li><li>
+Read the specified text selecting the <code>slt</code> voice:
+<table><tr><td> </td><td><pre class="example">flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Input text to ffmpeg:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Make ‘<tt>ffplay</tt>’ speak the specified text, using <code>flite</code> and
+the <code>lavfi</code> device:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about libflite, check:
+<a href="http://www.speech.cs.cmu.edu/flite/">http://www.speech.cs.cmu.edu/flite/</a>
+</p>
+<a name="sine"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sine">26.5 sine</a></h2>
+
+<p>Generate an audio signal made of a sine wave with amplitude 1/8.
+</p>
+<p>The audio signal is bit-exact.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the carrier frequency. Default is 440 Hz.
+</p>
+</dd>
+<dt> ‘<samp>beep_factor, b</samp>’</dt>
+<dd><p>Enable a periodic beep every second with frequency <var>beep_factor</var> times
+the carrier frequency. Default is 0, meaning the beep is disabled.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration of the generated audio stream.
+</p>
+</dd>
+<dt> ‘<samp>samples_per_frame</samp>’</dt>
+<dd><p>Set the number of samples per output frame, default is 1024.
+</p></dd>
+</dl>
+
+<a name="Examples-20"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-20">26.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate a simple 440 Hz sine wave:
+<table><tr><td> </td><td><pre class="example">sine
+</pre></td></tr></table>
+
+</li><li>
+Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds:
+<table><tr><td> </td><td><pre class="example">sine=220:4:d=5
+sine=f=220:b=4:d=5
+sine=frequency=220:beep_factor=4:duration=5
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="Audio-Sinks"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Audio-Sinks">27. Audio Sinks</a></h1>
+
+<p>Below is a description of the currently available audio sinks.
+</p>
+<a name="abuffersink"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-abuffersink">27.1 abuffersink</a></h2>
+
+<p>Buffer audio frames, and make them available to the end of filter chain.
+</p>
+<p>This sink is mainly intended for programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="anullsink"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-anullsink">27.2 anullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Video-Filters"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Video-Filters">28. Video Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the video filters included in your
+build.
+</p>
+<p>Below is a description of the currently available video filters.
+</p>
+<a name="alphaextract"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-alphaextract">28.1 alphaextract</a></h2>
+
+<p>Extract the alpha component from the input as a grayscale video. This
+is especially useful with the <var>alphamerge</var> filter.
+</p>
+<a name="alphamerge"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-alphamerge">28.2 alphamerge</a></h2>
+
+<p>Add or replace the alpha component of the primary input with the
+grayscale value of a second input. This is intended for use with
+<var>alphaextract</var> to allow the transmission or storage of frame
+sequences that have alpha in a format that doesn’t support an alpha
+channel.
+</p>
+<p>For example, to reconstruct full frames from a normal YUV-encoded video
+and a separate video created with <var>alphaextract</var>, you might use:
+</p><table><tr><td> </td><td><pre class="example">movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
+</pre></td></tr></table>
+
+<p>Since this filter is designed for reconstruction, it operates on frame
+sequences without considering timestamps, and terminates when either
+input reaches end of stream. This will cause problems if your encoding
+pipeline drops frames. If you’re trying to apply an image as an
+overlay to a video stream, consider the <var>overlay</var> filter instead.
+</p>
+<a name="ass"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ass">28.3 ass</a></h2>
+
+<p>Same as the <a href="#subtitles">subtitles</a> filter, except that it doesn’t require libavcodec
+and libavformat to work. On the other hand, it is limited to ASS (Advanced
+Substation Alpha) subtitles files.
+</p>
+<a name="bbox"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-bbox">28.4 bbox</a></h2>
+
+<p>Compute the bounding box for the non-black pixels in the input frame
+luminance plane.
+</p>
+<p>This filter computes the bounding box containing all the pixels with a
+luminance value greater than the minimum allowed value.
+The parameters describing the bounding box are printed on the filter
+log.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>min_val</samp>’</dt>
+<dd><p>Set the minimal luminance value. Default is <code>16</code>.
+</p></dd>
+</dl>
+
+<a name="blackdetect"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-blackdetect">28.5 blackdetect</a></h2>
+
+<p>Detect video intervals that are (almost) completely black. Can be
+useful to detect chapter transitions, commercials, or invalid
+recordings. Output lines contains the time for the start, end and
+duration of the detected black interval expressed in seconds.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>black_min_duration, d</samp>’</dt>
+<dd><p>Set the minimum detected black duration expressed in seconds. It must
+be a non-negative floating point number.
+</p>
+<p>Default value is 2.0.
+</p>
+</dd>
+<dt> ‘<samp>picture_black_ratio_th, pic_th</samp>’</dt>
+<dd><p>Set the threshold for considering a picture "black".
+Express the minimum value for the ratio:
+</p><table><tr><td> </td><td><pre class="example"><var>nb_black_pixels</var> / <var>nb_pixels</var>
+</pre></td></tr></table>
+
+<p>for which a picture is considered black.
+Default value is 0.98.
+</p>
+</dd>
+<dt> ‘<samp>pixel_black_th, pix_th</samp>’</dt>
+<dd><p>Set the threshold for considering a pixel "black".
+</p>
+<p>The threshold expresses the maximum pixel luminance value for which a
+pixel is considered "black". The provided value is scaled according to
+the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>absolute_threshold</var> = <var>luminance_minimum_value</var> + <var>pixel_black_th</var> * <var>luminance_range_size</var>
+</pre></td></tr></table>
+
+<p><var>luminance_range_size</var> and <var>luminance_minimum_value</var> depend on
+the input video format, the range is [0-255] for YUV full-range
+formats and [16-235] for YUV non full-range formats.
+</p>
+<p>Default value is 0.10.
+</p></dd>
+</dl>
+
+<p>The following example sets the maximum pixel threshold to the minimum
+value, and detects only black intervals of 2 or more seconds:
+</p><table><tr><td> </td><td><pre class="example">blackdetect=d=2:pix_th=0.00
+</pre></td></tr></table>
+
+<a name="blackframe"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-blackframe">28.6 blackframe</a></h2>
+
+<p>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.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>amount</samp>’</dt>
+<dd><p>Set the percentage of the pixels that have to be below the threshold, defaults
+to <code>98</code>.
+</p>
+</dd>
+<dt> ‘<samp>threshold, thresh</samp>’</dt>
+<dd><p>Set the threshold below which a pixel value is considered black, defaults to
+<code>32</code>.
+</p>
+</dd>
+</dl>
+
+<a name="blend"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-blend">28.7 blend</a></h2>
+
+<p>Blend two video frames into each other.
+</p>
+<p>It takes two input streams and outputs one stream, the first input is the
+"top" layer and second input is "bottom" layer.
+Output terminates when shortest input terminates.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c0_mode</samp>’</dt>
+<dt> ‘<samp>c1_mode</samp>’</dt>
+<dt> ‘<samp>c2_mode</samp>’</dt>
+<dt> ‘<samp>c3_mode</samp>’</dt>
+<dt> ‘<samp>all_mode</samp>’</dt>
+<dd><p>Set blend mode for specific pixel component or all pixel components in case
+of <var>all_mode</var>. Default value is <code>normal</code>.
+</p>
+<p>Available values for component modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>addition</samp>’</dt>
+<dt> ‘<samp>and</samp>’</dt>
+<dt> ‘<samp>average</samp>’</dt>
+<dt> ‘<samp>burn</samp>’</dt>
+<dt> ‘<samp>darken</samp>’</dt>
+<dt> ‘<samp>difference</samp>’</dt>
+<dt> ‘<samp>divide</samp>’</dt>
+<dt> ‘<samp>dodge</samp>’</dt>
+<dt> ‘<samp>exclusion</samp>’</dt>
+<dt> ‘<samp>hardlight</samp>’</dt>
+<dt> ‘<samp>lighten</samp>’</dt>
+<dt> ‘<samp>multiply</samp>’</dt>
+<dt> ‘<samp>negation</samp>’</dt>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>or</samp>’</dt>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dt> ‘<samp>phoenix</samp>’</dt>
+<dt> ‘<samp>pinlight</samp>’</dt>
+<dt> ‘<samp>reflect</samp>’</dt>
+<dt> ‘<samp>screen</samp>’</dt>
+<dt> ‘<samp>softlight</samp>’</dt>
+<dt> ‘<samp>subtract</samp>’</dt>
+<dt> ‘<samp>vividlight</samp>’</dt>
+<dt> ‘<samp>xor</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>c0_opacity</samp>’</dt>
+<dt> ‘<samp>c1_opacity</samp>’</dt>
+<dt> ‘<samp>c2_opacity</samp>’</dt>
+<dt> ‘<samp>c3_opacity</samp>’</dt>
+<dt> ‘<samp>all_opacity</samp>’</dt>
+<dd><p>Set blend opacity for specific pixel component or all pixel components in case
+of <var>all_opacity</var>. Only used in combination with pixel component blend modes.
+</p>
+</dd>
+<dt> ‘<samp>c0_expr</samp>’</dt>
+<dt> ‘<samp>c1_expr</samp>’</dt>
+<dt> ‘<samp>c2_expr</samp>’</dt>
+<dt> ‘<samp>c3_expr</samp>’</dt>
+<dt> ‘<samp>all_expr</samp>’</dt>
+<dd><p>Set blend expression for specific pixel component or all pixel components in case
+of <var>all_expr</var>. Note that related mode options will be ignored if those are set.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>the coordinates of the current sample
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of currently filtered plane
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>TOP, A</samp>’</dt>
+<dd><p>Value of pixel component at current location for first video frame (top layer).
+</p>
+</dd>
+<dt> ‘<samp>BOTTOM, B</samp>’</dt>
+<dd><p>Value of pixel component at current location for second video frame (bottom layer).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last bottom frame after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the bottom layer is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-63"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-63">28.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply transition from bottom layer to top layer in first 10 seconds:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
+</pre></td></tr></table>
+
+</li><li>
+Apply 1x1 checkerboard effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(N*SW+X,W),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover down effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(Y-N*SH,0),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover up-left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="boxblur"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-boxblur">28.8 boxblur</a></h2>
+
+<p>Apply boxblur algorithm to the input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+</dl>
+
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dd><p>Set an expression for the box radius in pixels used for blurring the
+corresponding input plane.
+</p>
+<p>The radius value must be a non-negative number, and must not be
+greater than the value of the expression <code>min(w,h)/2</code> for the
+luma and alpha planes, and of <code>min(cw,ch)/2</code> for the chroma
+planes.
+</p>
+<p>Default value for ‘<samp>luma_radius</samp>’ is "2". If not specified,
+‘<samp>chroma_radius</samp>’ and ‘<samp>alpha_radius</samp>’ default to the
+corresponding value set for ‘<samp>luma_radius</samp>’.
+</p>
+<p>The expressions can contain the following constants:
+</p><dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>cw</samp>’</dt>
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>the input chroma image width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+<dd><p>Specify how many times the boxblur filter is applied to the
+corresponding plane.
+</p>
+<p>Default value for ‘<samp>luma_power</samp>’ is 2. If not specified,
+‘<samp>chroma_power</samp>’ and ‘<samp>alpha_power</samp>’ default to the
+corresponding value set for ‘<samp>luma_power</samp>’.
+</p>
+<p>A value of 0 will disable the effect.
+</p></dd>
+</dl>
+
+<a name="Examples-36"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-36">28.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply a boxblur filter with luma, chroma, and alpha radius
+set to 2:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=2:luma_power=1
+boxblur=2:1
+</pre></td></tr></table>
+
+</li><li>
+Set luma radius to 2, alpha and chroma radius to 0:
+<table><tr><td> </td><td><pre class="example">boxblur=2:1:cr=0:ar=0
+</pre></td></tr></table>
+
+</li><li>
+Set luma and chroma radius to a fraction of the video dimension:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorbalance"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-colorbalance">28.9 colorbalance</a></h2>
+<p>Modify intensity of primary colors (red, green and blue) of input frames.
+</p>
+<p>The filter allows an input frame to be adjusted in the shadows, midtones or highlights
+regions for the red-cyan, green-magenta or blue-yellow balance.
+</p>
+<p>A positive adjustment value shifts the balance towards the primary color, a negative
+value towards the complementary color.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rs</samp>’</dt>
+<dt> ‘<samp>gs</samp>’</dt>
+<dt> ‘<samp>bs</samp>’</dt>
+<dd><p>Adjust red, green and blue shadows (darkest pixels).
+</p>
+</dd>
+<dt> ‘<samp>rm</samp>’</dt>
+<dt> ‘<samp>gm</samp>’</dt>
+<dt> ‘<samp>bm</samp>’</dt>
+<dd><p>Adjust red, green and blue midtones (medium pixels).
+</p>
+</dd>
+<dt> ‘<samp>rh</samp>’</dt>
+<dt> ‘<samp>gh</samp>’</dt>
+<dt> ‘<samp>bh</samp>’</dt>
+<dd><p>Adjust red, green and blue highlights (brightest pixels).
+</p>
+<p>Allowed ranges for options are <code>[-1.0, 1.0]</code>. Defaults are <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-78"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-78">28.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Add red color cast to shadows:
+<table><tr><td> </td><td><pre class="example">colorbalance=rs=.3
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorchannelmixer"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-colorchannelmixer">28.10 colorchannelmixer</a></h2>
+
+<p>Adjust video input frames by re-mixing color channels.
+</p>
+<p>This filter modifies a color channel by adding the values associated to
+the other channels of the same pixels. For example if the value to
+modify is red, the output value will be:
+</p><table><tr><td> </td><td><pre class="example"><var>red</var>=<var>red</var>*<var>rr</var> + <var>blue</var>*<var>rb</var> + <var>green</var>*<var>rg</var> + <var>alpha</var>*<var>ra</var>
+</pre></td></tr></table>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rr</samp>’</dt>
+<dt> ‘<samp>rg</samp>’</dt>
+<dt> ‘<samp>rb</samp>’</dt>
+<dt> ‘<samp>ra</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output red channel.
+Default is <code>1</code> for <var>rr</var>, and <code>0</code> for <var>rg</var>, <var>rb</var> and <var>ra</var>.
+</p>
+</dd>
+<dt> ‘<samp>gr</samp>’</dt>
+<dt> ‘<samp>gg</samp>’</dt>
+<dt> ‘<samp>gb</samp>’</dt>
+<dt> ‘<samp>ga</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output green channel.
+Default is <code>1</code> for <var>gg</var>, and <code>0</code> for <var>gr</var>, <var>gb</var> and <var>ga</var>.
+</p>
+</dd>
+<dt> ‘<samp>br</samp>’</dt>
+<dt> ‘<samp>bg</samp>’</dt>
+<dt> ‘<samp>bb</samp>’</dt>
+<dt> ‘<samp>ba</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output blue channel.
+Default is <code>1</code> for <var>bb</var>, and <code>0</code> for <var>br</var>, <var>bg</var> and <var>ba</var>.
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dt> ‘<samp>ag</samp>’</dt>
+<dt> ‘<samp>ab</samp>’</dt>
+<dt> ‘<samp>aa</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output alpha channel.
+Default is <code>1</code> for <var>aa</var>, and <code>0</code> for <var>ar</var>, <var>ag</var> and <var>ab</var>.
+</p>
+<p>Allowed ranges for options are <code>[-2.0, 2.0]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples">28.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert source to grayscale:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
+</pre></td></tr></table>
+</li><li>
+Simulate sepia tones:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colormatrix"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-colormatrix">28.11 colormatrix</a></h2>
+
+<p>Convert color matrix.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>src</samp>’</dt>
+<dt> ‘<samp>dst</samp>’</dt>
+<dd><p>Specify the source and destination color matrix. Both values must be
+specified.
+</p>
+<p>The accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>BT.709
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>BT.601
+</p>
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>SMPTE-240M
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>FCC
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>For example to convert from BT.601 to SMPTE-240M, use the command:
+</p><table><tr><td> </td><td><pre class="example">colormatrix=bt601:smpte240m
+</pre></td></tr></table>
+
+<a name="copy"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-copy">28.12 copy</a></h2>
+
+<p>Copy the input source unchanged to the output. Mainly useful for
+testing purposes.
+</p>
+<a name="crop"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-crop">28.13 crop</a></h2>
+
+<p>Crop the input video to given dimensions.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w, out_w</samp>’</dt>
+<dd><p>Width of the output video. It defaults to <code>iw</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>h, out_h</samp>’</dt>
+<dd><p>Height of the output video. It defaults to <code>ih</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dd><p>Horizontal position, in the input video, of the left edge of the output video.
+It defaults to <code>(in_w-out_w)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Vertical position, in the input video, of the top edge of the output video.
+It defaults to <code>(in_h-out_h)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>keep_aspect</samp>’</dt>
+<dd><p>If set to 1 will force the output display aspect ratio
+to be the same of the input, by changing the output sample aspect
+ratio. It defaults to 0.
+</p></dd>
+</dl>
+
+<p>The <var>out_w</var>, <var>out_h</var>, <var>x</var>, <var>y</var> parameters are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output (cropped) width and height
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>The expression for <var>out_w</var> may depend on the value of <var>out_h</var>,
+and the expression for <var>out_h</var> may depend on <var>out_w</var>, but they
+cannot depend on <var>x</var> and <var>y</var>, as <var>x</var> and <var>y</var> are
+evaluated after <var>out_w</var> and <var>out_h</var>.
+</p>
+<p>The <var>x</var> and <var>y</var> 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.
+</p>
+<p>The expression for <var>x</var> may depend on <var>y</var>, and the expression
+for <var>y</var> may depend on <var>x</var>.
+</p>
+<a name="Examples-73"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-73">28.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Crop area with size 100x100 at position (12,34).
+<table><tr><td> </td><td><pre class="example">crop=100:100:12:34
+</pre></td></tr></table>
+
+<p>Using named options, the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">crop=w=100:h=100:x=12:y=34
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 100x100:
+<table><tr><td> </td><td><pre class="example">crop=100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 2/3 of the input video:
+<table><tr><td> </td><td><pre class="example">crop=2/3*in_w:2/3*in_h
+</pre></td></tr></table>
+
+</li><li>
+Crop the input video central square:
+<table><tr><td> </td><td><pre class="example">crop=out_w=in_h
+crop=in_h
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">crop=in_w-100:in_h-100:100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop 10 pixels from the left and right borders, and 20 pixels from
+the top and bottom borders
+<table><tr><td> </td><td><pre class="example">crop=in_w-2*10:in_h-2*20
+</pre></td></tr></table>
+
+</li><li>
+Keep only the bottom right quarter of the input image:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:in_w/2:in_h/2
+</pre></td></tr></table>
+
+</li><li>
+Crop height for getting Greek harmony:
+<table><tr><td> </td><td><pre class="example">crop=in_w:1/PHI*in_w
+</pre></td></tr></table>
+
+</li><li>
+Appply trembling effect:
+<table><tr><td> </td><td><pre class="example">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)
+</pre></td></tr></table>
+
+</li><li>
+Apply erratic camera effect depending on timestamp:
+<table><tr><td> </td><td><pre class="example">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)"
+</pre></td></tr></table>
+
+</li><li>
+Set x depending on the value of y:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:y:10+10*sin(n/10)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="cropdetect"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-cropdetect">28.14 cropdetect</a></h2>
+
+<p>Auto-detect crop size.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>limit</samp>’</dt>
+<dd><p>Set higher black value threshold, which can be optionally specified
+from nothing (0) to everything (255). An intensity value greater
+to the set value is considered non-black. Default value is 24.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Set the value for which the width/height should be divisible by. 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. Default value is 16.
+</p>
+</dd>
+<dt> ‘<samp>reset_count, reset</samp>’</dt>
+<dd><p>Set the 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. Default value is 0.
+</p>
+<p>This can be useful when channel logos distort the video area. 0
+indicates never reset and return the largest area encountered during
+playback.
+</p></dd>
+</dl>
+
+<p><a name="curves"></a>
+</p><a name="curves-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-curves-1">28.15 curves</a></h2>
+
+<p>Apply color adjustments using curves.
+</p>
+<p>This filter is similar to the Adobe Photoshop and GIMP curves tools. Each
+component (red, green and blue) has its values defined by <var>N</var> key points
+tied from each other using a smooth curve. The x-axis represents the pixel
+values from the input frame, and the y-axis the new pixel values to be set for
+the output frame.
+</p>
+<p>By default, a component curve is defined by the two points <var>(0;0)</var> and
+<var>(1;1)</var>. This creates a straight line where each original pixel value is
+"adjusted" to its own value, which means no change to the image.
+</p>
+<p>The filter allows you to redefine these two points and add some more. A new
+curve (using a natural cubic spline interpolation) will be define to pass
+smoothly through all these new coordinates. The new defined points needs to be
+strictly increasing over the x-axis, and their <var>x</var> and <var>y</var> values must
+be in the <var>[0;1]</var> interval. If the computed curves happened to go outside
+the vector spaces, the values will be clipped accordingly.
+</p>
+<p>If there is no key point defined in <code>x=0</code>, the filter will automatically
+insert a <var>(0;0)</var> point. In the same way, if there is no key point defined
+in <code>x=1</code>, the filter will automatically insert a <var>(1;1)</var> point.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>preset</samp>’</dt>
+<dd><p>Select one of the available color presets. This option can be used in addition
+to the ‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ parameters; in this case, the later
+options takes priority on the preset values.
+Available presets are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dt> ‘<samp>color_negative</samp>’</dt>
+<dt> ‘<samp>cross_process</samp>’</dt>
+<dt> ‘<samp>darker</samp>’</dt>
+<dt> ‘<samp>increase_contrast</samp>’</dt>
+<dt> ‘<samp>lighter</samp>’</dt>
+<dt> ‘<samp>linear_contrast</samp>’</dt>
+<dt> ‘<samp>medium_contrast</samp>’</dt>
+<dt> ‘<samp>negative</samp>’</dt>
+<dt> ‘<samp>strong_contrast</samp>’</dt>
+<dt> ‘<samp>vintage</samp>’</dt>
+</dl>
+<p>Default is <code>none</code>.
+</p></dd>
+<dt> ‘<samp>master, m</samp>’</dt>
+<dd><p>Set the master key points. These points will define a second pass mapping. It
+is sometimes called a "luminance" or "value" mapping. It can be used with
+‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ or ‘<samp>all</samp>’ since it acts like a
+post-processing LUT.
+</p></dd>
+<dt> ‘<samp>red, r</samp>’</dt>
+<dd><p>Set the key points for the red component.
+</p></dd>
+<dt> ‘<samp>green, g</samp>’</dt>
+<dd><p>Set the key points for the green component.
+</p></dd>
+<dt> ‘<samp>blue, b</samp>’</dt>
+<dd><p>Set the key points for the blue component.
+</p></dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Set the key points for all components (not including master).
+Can be used in addition to the other key points component
+options. In this case, the unset component(s) will fallback on this
+‘<samp>all</samp>’ setting.
+</p></dd>
+<dt> ‘<samp>psfile</samp>’</dt>
+<dd><p>Specify a Photoshop curves file (<code>.asv</code>) to import the settings from.
+</p></dd>
+</dl>
+
+<p>To avoid some filtergraph syntax conflicts, each key points list need to be
+defined using the following syntax: <code>x0/y0 x1/y1 x2/y2 ...</code>.
+</p>
+<a name="Examples-61"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-61">28.15.1 Examples</a></h3>
+
+<ul>
+<li>
+Increase slightly the middle level of blue:
+<table><tr><td> </td><td><pre class="example">curves=blue='0.5/0.58'
+</pre></td></tr></table>
+
+</li><li>
+Vintage effect:
+<table><tr><td> </td><td><pre class="example">curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
+</pre></td></tr></table>
+<p>Here we obtain the following coordinates for each components:
+</p><dl compact="compact">
+<dt> <var>red</var></dt>
+<dd><p><code>(0;0.11) (0.42;0.51) (1;0.95)</code>
+</p></dd>
+<dt> <var>green</var></dt>
+<dd><p><code>(0;0) (0.50;0.48) (1;1)</code>
+</p></dd>
+<dt> <var>blue</var></dt>
+<dd><p><code>(0;0.22) (0.49;0.44) (1;0.80)</code>
+</p></dd>
+</dl>
+
+</li><li>
+The previous example can also be achieved with the associated built-in preset:
+<table><tr><td> </td><td><pre class="example">curves=preset=vintage
+</pre></td></tr></table>
+
+</li><li>
+Or simply:
+<table><tr><td> </td><td><pre class="example">curves=vintage
+</pre></td></tr></table>
+
+</li><li>
+Use a Photoshop preset and redefine the points of the green component:
+<table><tr><td> </td><td><pre class="example">curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="dctdnoiz"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-dctdnoiz">28.16 dctdnoiz</a></h2>
+
+<p>Denoise frames using 2D DCT (frequency domain filtering).
+</p>
+<p>This filter is not designed for real time and can be extremely slow.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sigma, s</samp>’</dt>
+<dd><p>Set the noise sigma constant.
+</p>
+<p>This <var>sigma</var> defines a hard threshold of <code>3 * sigma</code>; every DCT
+coefficient (absolute value) below this threshold with be dropped.
+</p>
+<p>If you need a more advanced filtering, see ‘<samp>expr</samp>’.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>overlap</samp>’</dt>
+<dd><p>Set number overlapping pixels for each block. Each block is of size
+<code>16x16</code>. Since the filter can be slow, you may want to reduce this value,
+at the cost of a less effective filter and the risk of various artefacts.
+</p>
+<p>If the overlapping value doesn’t allow to process the whole input width or
+height, a warning will be displayed and according borders won’t be denoised.
+</p>
+<p>Default value is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the coefficient factor expression.
+</p>
+<p>For each coefficient of a DCT block, this expression will be evaluated as a
+multiplier value for the coefficient.
+</p>
+<p>If this is option is set, the ‘<samp>sigma</samp>’ option will be ignored.
+</p>
+<p>The absolute value of the coefficient can be accessed through the <var>c</var>
+variable.
+</p></dd>
+</dl>
+
+<a name="Examples-25"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-25">28.16.1 Examples</a></h3>
+
+<p>Apply a denoise with a ‘<samp>sigma</samp>’ of <code>4.5</code>:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=4.5
+</pre></td></tr></table>
+
+<p>The same operation can be achieved using the expression system:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=e='gte(c, 4.5*3)'
+</pre></td></tr></table>
+
+<p><a name="decimate"></a>
+</p><a name="decimate-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-decimate-1">28.17 decimate</a></h2>
+
+<p>Drop duplicated frames at regular intervals.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Set the number of frames from which one will be dropped. Setting this to
+<var>N</var> means one frame in every batch of <var>N</var> frames will be dropped.
+Default is <code>5</code>.
+</p>
+</dd>
+<dt> ‘<samp>dupthresh</samp>’</dt>
+<dd><p>Set the threshold for duplicate detection. If the difference metric for a frame
+is less than or equal to this value, then it is declared as duplicate. Default
+is <code>1.1</code>
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set scene change threshold. Default is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Set the size of the x and y-axis blocks used during metric calculations.
+Larger blocks give better noise suppression, but also give worse detection of
+small movements. Must be a power of two. Default is <code>32</code>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark main input as a pre-processed input and activate clean source input
+stream. This allows the input to be pre-processed with various filters to help
+the metrics calculation while keeping the frame selection lossless. When set to
+<code>1</code>, the first stream is for the pre-processed input, and the second
+stream is the clean source from where the kept frames are chosen. Default is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Set whether or not chroma is considered in the metric calculations. Default is
+<code>1</code>.
+</p></dd>
+</dl>
+
+<a name="dejudder"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-dejudder">28.18 dejudder</a></h2>
+
+<p>Remove judder produced by partially interlaced telecined content.
+</p>
+<p>Judder can be introduced, for instance, by <a href="#pullup">pullup</a> filter. If the original
+source was partially telecined content then the output of <code>pullup,dejudder</code>
+will have a variable frame rate. May change the recorded frame rate of the
+container. Aside from that change, this filter will not affect constant frame
+rate video.
+</p>
+<p>The option available in this filter is:
+</p><dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Specify the length of the window over which the judder repeats.
+</p>
+<p>Accepts any interger greater than 1. Useful values are:
+</p><dl compact="compact">
+<dt> ‘<samp>4</samp>’</dt>
+<dd><p>If the original was telecined from 24 to 30 fps (Film to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>5</samp>’</dt>
+<dd><p>If the original was telecined from 25 to 30 fps (PAL to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>20</samp>’</dt>
+<dd><p>If a mixture of the two.
+</p></dd>
+</dl>
+
+<p>The default is ‘<samp>4</samp>’.
+</p></dd>
+</dl>
+
+<a name="delogo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-delogo">28.19 delogo</a></h2>
+
+<p>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).
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify the top left corner coordinates of the logo. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the width and height of the logo to clear. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>band, t</samp>’</dt>
+<dd><p>Specify the thickness of the fuzzy edge of the rectangle (added to
+<var>w</var> and <var>h</var>). The default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>When set to 1, a green rectangle is drawn on the screen to simplify
+finding the right <var>x</var>, <var>y</var>, <var>w</var>, and <var>h</var> parameters.
+The default value is 0.
+</p>
+<p>The rectangle is drawn on the outermost pixels which will be (partly)
+replaced with interpolated values. The values of the next pixels
+immediately outside this rectangle in each direction will be used to
+compute the interpolated pixel values inside the rectangle.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-37"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-37">28.19.1 Examples</a></h3>
+
+<ul>
+<li>
+Set a rectangle covering the area with top left corner coordinates 0,0
+and size 100x77, setting a band of size 10:
+<table><tr><td> </td><td><pre class="example">delogo=x=0:y=0:w=100:h=77:band=10
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="deshake"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-deshake">28.20 deshake</a></h2>
+
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This is useful when simultaneous movement of subjects within the frame
+might be confused for camera motion by the motion vector search.
+</p>
+<p>If any or all of <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> 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.
+</p>
+<p>Default - search the whole frame.
+</p>
+</dd>
+<dt> ‘<samp>rx</samp>’</dt>
+<dt> ‘<samp>ry</samp>’</dt>
+<dd><p>Specify the maximum extent of movement in x and y directions in the
+range 0-64 pixels. Default 16.
+</p>
+</dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>Specify how to generate pixels to fill blanks at the edge of the
+frame. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>blank, 0</samp>’</dt>
+<dd><p>Fill zeroes at blank locations
+</p></dd>
+<dt> ‘<samp>original, 1</samp>’</dt>
+<dd><p>Original image at blank locations
+</p></dd>
+<dt> ‘<samp>clamp, 2</samp>’</dt>
+<dd><p>Extruded edge value at blank locations
+</p></dd>
+<dt> ‘<samp>mirror, 3</samp>’</dt>
+<dd><p>Mirrored edge at blank locations
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>mirror</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Specify the blocksize to use for motion search. Range 4-128 pixels,
+default 8.
+</p>
+</dd>
+<dt> ‘<samp>contrast</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>search</samp>’</dt>
+<dd><p>Specify the search strategy. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>exhaustive, 0</samp>’</dt>
+<dd><p>Set exhaustive search
+</p></dd>
+<dt> ‘<samp>less, 1</samp>’</dt>
+<dd><p>Set less exhaustive search.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>exhaustive</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>If set then a detailed log of the motion search is written to the
+specified file.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<a name="drawbox"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-drawbox">28.21 drawbox</a></h2>
+
+<p>Draw a colored box on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the top left corner coordinates of the box. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the box, if 0 they are interpreted as
+the input width and height. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the box to write. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the box edge color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the box edge. Default value is <code>3</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y offset coordinates where the box is drawn.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn box.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn box.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-50"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-50">28.21.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a black box around the edge of the input image:
+<table><tr><td> </td><td><pre class="example">drawbox
+</pre></td></tr></table>
+
+</li><li>
+Draw a box with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawbox=10:20:200:60:red@0.5
+</pre></td></tr></table>
+
+<p>The previous example can be specified as:
+</p><table><tr><td> </td><td><pre class="example">drawbox=x=10:y=20:w=200:h=60:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Fill the box with pink color:
+<table><tr><td> </td><td><pre class="example">drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
+</pre></td></tr></table>
+
+</li><li>
+Draw a 2-pixel red 2.40:1 mask:
+<table><tr><td> </td><td><pre class="example">drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
+</pre></td></tr></table>
+</li></ul>
+
+<a name="drawgrid"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-drawgrid">28.22 drawgrid</a></h2>
+
+<p>Draw a grid on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the grid cell, if 0 they are interpreted as the
+input width and height, respectively, minus <code>thickness</code>, so image gets
+framed. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the grid. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the grid color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the grid line. Default value is <code>1</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input grid cell width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y coordinates of some point of grid intersection (meant to configure offset).
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn cell.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn cell.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-30"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-30">28.22.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=width=100:height=100:thickness=2:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Draw a white 3x3 grid with an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="drawtext"></a>
+</p><a name="drawtext-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-drawtext-1">28.23 drawtext</a></h2>
+
+<p>Draw text string or text from specified file on top of video using the
+libfreetype library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libfreetype</code>.
+</p>
+<a name="Syntax-2"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Syntax-2">28.23.1 Syntax</a></h3>
+
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>box</samp>’</dt>
+<dd><p>Used to draw a box around text using background color.
+Value should be either 1 (enable) or 0 (disable).
+The default value of <var>box</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>boxcolor</samp>’</dt>
+<dd><p>The color to be used for drawing box around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>boxcolor</var> is "white".
+</p>
+</dd>
+<dt> ‘<samp>borderw</samp>’</dt>
+<dd><p>Set the width of the border to be drawn around the text using <var>bordercolor</var>.
+The default value of <var>borderw</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>bordercolor</samp>’</dt>
+<dd><p>Set the color to be used for drawing border around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>bordercolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>expansion</samp>’</dt>
+<dd><p>Select how the <var>text</var> is expanded. Can be either <code>none</code>,
+<code>strftime</code> (deprecated) or
+<code>normal</code> (default). See the <a href="#drawtext_005fexpansion">Text expansion</a> section
+below for details.
+</p>
+</dd>
+<dt> ‘<samp>fix_bounds</samp>’</dt>
+<dd><p>If true, check and fix text coords to avoid clipping.
+</p>
+</dd>
+<dt> ‘<samp>fontcolor</samp>’</dt>
+<dd><p>The color to be used for drawing fonts. For the syntax of this option, check
+the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>fontcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>fontfile</samp>’</dt>
+<dd><p>The font file to be used for drawing text. Path must be included.
+This parameter is mandatory.
+</p>
+</dd>
+<dt> ‘<samp>fontsize</samp>’</dt>
+<dd><p>The font size to be used for drawing text.
+The default value of <var>fontsize</var> is 16.
+</p>
+</dd>
+<dt> ‘<samp>ft_load_flags</samp>’</dt>
+<dd><p>Flags to be used for loading the fonts.
+</p>
+<p>The flags map the corresponding flags supported by libfreetype, and are
+a combination of the following values:
+</p><dl compact="compact">
+<dt> <var>default</var></dt>
+<dt> <var>no_scale</var></dt>
+<dt> <var>no_hinting</var></dt>
+<dt> <var>render</var></dt>
+<dt> <var>no_bitmap</var></dt>
+<dt> <var>vertical_layout</var></dt>
+<dt> <var>force_autohint</var></dt>
+<dt> <var>crop_bitmap</var></dt>
+<dt> <var>pedantic</var></dt>
+<dt> <var>ignore_global_advance_width</var></dt>
+<dt> <var>no_recurse</var></dt>
+<dt> <var>ignore_transform</var></dt>
+<dt> <var>monochrome</var></dt>
+<dt> <var>linear_design</var></dt>
+<dt> <var>no_autohint</var></dt>
+</dl>
+
+<p>Default value is "default".
+</p>
+<p>For more information consult the documentation for the FT_LOAD_*
+libfreetype flags.
+</p>
+</dd>
+<dt> ‘<samp>shadowcolor</samp>’</dt>
+<dd><p>The color to be used for drawing a shadow behind the drawn text. For the
+syntax of this option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>shadowcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>shadowx</samp>’</dt>
+<dt> ‘<samp>shadowy</samp>’</dt>
+<dd><p>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".
+</p>
+</dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>The starting frame number for the n/frame_num variable. The default value
+is "0".
+</p>
+</dd>
+<dt> ‘<samp>tabsize</samp>’</dt>
+<dd><p>The size in number of spaces to use for rendering the tab.
+Default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>timecode</samp>’</dt>
+<dd><p>Set the initial timecode representation in "hh:mm:ss[:;.]ff"
+format. It can be used with or without text parameter. <var>timecode_rate</var>
+option must be specified.
+</p>
+</dd>
+<dt> ‘<samp>timecode_rate, rate, r</samp>’</dt>
+<dd><p>Set the timecode frame rate (timecode only).
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>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
+<var>textfile</var>.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>A text file containing text to be drawn. The text must be a sequence
+of UTF-8 encoded characters.
+</p>
+<p>This parameter is mandatory if no text string is specified with the
+parameter <var>text</var>.
+</p>
+<p>If both <var>text</var> and <var>textfile</var> are specified, an error is thrown.
+</p>
+</dd>
+<dt> ‘<samp>reload</samp>’</dt>
+<dd><p>If set to 1, the <var>textfile</var> will be reloaded before each frame.
+Be sure to update it atomically, or it may be read partially, or even fail.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>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.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is "0".
+</p>
+<p>See below for the list of accepted constants and functions.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var> and <var>y</var> are expressions containing the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>line_h, lh</samp>’</dt>
+<dd><p>the height of each text line
+</p>
+</dd>
+<dt> ‘<samp>main_h, h, H</samp>’</dt>
+<dd><p>the input height
+</p>
+</dd>
+<dt> ‘<samp>main_w, w, W</samp>’</dt>
+<dd><p>the input width
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_a, ascent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_d, descent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_h</samp>’</dt>
+<dd><p>maximum glyph height, that is the maximum height for all the glyphs
+contained in the rendered text, it is equivalent to <var>ascent</var> -
+<var>descent</var>.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_w</samp>’</dt>
+<dd><p>maximum glyph width, that is the maximum width for all the glyphs
+contained in the rendered text
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>rand(min, max)</samp>’</dt>
+<dd><p>return a random number included between <var>min</var> and <var>max</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>text_h, th</samp>’</dt>
+<dd><p>the height of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>text_w, tw</samp>’</dt>
+<dd><p>the width of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the x and y offset coordinates where the text is drawn.
+</p>
+<p>These parameters allow the <var>x</var> and <var>y</var> expressions to refer
+each other, so you can for example specify <code>y=x/dar</code>.
+</p></dd>
+</dl>
+
+<p>If libavfilter was built with <code>--enable-fontconfig</code>, then
+‘<samp>fontfile</samp>’ can be a fontconfig pattern or omitted.
+</p>
+<p><a name="drawtext_005fexpansion"></a>
+</p><a name="Text-expansion"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Text-expansion">28.23.2 Text expansion</a></h3>
+
+<p>If ‘<samp>expansion</samp>’ is set to <code>strftime</code>,
+the filter recognizes strftime() sequences in the provided text and
+expands them accordingly. Check the documentation of strftime(). This
+feature is deprecated.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>none</code>, the text is printed verbatim.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>normal</code> (which is the default),
+the following expansion mechanism is used.
+</p>
+<p>The backslash character ’\’, followed by any character, always expands to
+the second character.
+</p>
+<p>Sequence of the form <code>%{...}</code> are expanded. The text between the
+braces is a function name, possibly followed by arguments separated by ’:’.
+If the arguments contain special characters or delimiters (’:’ or ’}’),
+they should be escaped.
+</p>
+<p>Note that they probably must also be escaped as the value for the
+‘<samp>text</samp>’ option in the filter argument string and as the filter
+argument in the filtergraph description, and possibly also for the shell,
+that makes up to four levels of escaping; using a text file avoids these
+problems.
+</p>
+<p>The following functions are available:
+</p>
+<dl compact="compact">
+<dt> <code>expr, e</code></dt>
+<dd><p>The expression evaluation result.
+</p>
+<p>It must take one argument specifying the expression to be evaluated,
+which accepts the same constants and functions as the <var>x</var> and
+<var>y</var> values. Note that not all constants should be used, for
+example the text size is not known when evaluating the expression, so
+the constants <var>text_w</var> and <var>text_h</var> will have an undefined
+value.
+</p>
+</dd>
+<dt> <code>gmtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in UTC.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>localtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in the local time zone.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>metadata</code></dt>
+<dd><p>Frame metadata. It must take one argument specifying metadata key.
+</p>
+</dd>
+<dt> <code>n, frame_num</code></dt>
+<dd><p>The frame number, starting from 0.
+</p>
+</dd>
+<dt> <code>pict_type</code></dt>
+<dd><p>A 1 character description of the current picture type.
+</p>
+</dd>
+<dt> <code>pts</code></dt>
+<dd><p>The timestamp of the current frame, in seconds, with microsecond accuracy.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-62"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-62">28.23.3 Examples</a></h3>
+
+<ul>
+<li>
+Draw "Test Text" with font FreeSerif, using the default values for the
+optional parameters.
+
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
+</pre></td></tr></table>
+
+</li><li>
+Draw ’Test Text’ with font FreeSerif of size 24 at position x=100
+and y=50 (counting from the top-left corner of the screen), text is
+yellow with a red box around it. Both the text and the box have an
+opacity of 20%.
+
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>Note that the double quotes are not necessary if spaces are not used
+within the parameter list.
+</p>
+</li><li>
+Show the text at the center of the video frame:
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
+</pre></td></tr></table>
+
+</li><li>
+Show a text line sliding from right to left in the last row of the video
+frame. The file ‘<tt>LONG_LINE</tt>’ is assumed to contain a single line
+with no newlines.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
+</pre></td></tr></table>
+
+</li><li>
+Show the content of file ‘<tt>CREDITS</tt>’ off the bottom of the frame and scroll up.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
+</pre></td></tr></table>
+
+</li><li>
+Draw a single green letter "g", at the center of the input video.
+The glyph baseline is placed at half screen height.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
+</pre></td></tr></table>
+
+</li><li>
+Show text for 1 second every 3 seconds:
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
+</pre></td></tr></table>
+
+</li><li>
+Use fontconfig to set the font. Note that the colons need to be escaped.
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
+</pre></td></tr></table>
+
+</li><li>
+Print the date of a real-time encoding (see strftime(3)):
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
+</pre></td></tr></table>
+
+</li></ul>
+
+<p>For more information about libfreetype, check:
+<a href="http://www.freetype.org/">http://www.freetype.org/</a>.
+</p>
+<p>For more information about fontconfig, check:
+<a href="http://freedesktop.org/software/fontconfig/fontconfig-user.html">http://freedesktop.org/software/fontconfig/fontconfig-user.html</a>.
+</p>
+<a name="edgedetect"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-edgedetect">28.24 edgedetect</a></h2>
+
+<p>Detect and draw edges. The filter uses the Canny Edge Detection algorithm.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low</samp>’</dt>
+<dt> ‘<samp>high</samp>’</dt>
+<dd><p>Set low and high threshold values used by the Canny thresholding
+algorithm.
+</p>
+<p>The high threshold selects the "strong" edge pixels, which are then
+connected through 8-connectivity with the "weak" edge pixels selected
+by the low threshold.
+</p>
+<p><var>low</var> and <var>high</var> threshold values must be chosen in the range
+[0,1], and <var>low</var> should be lesser or equal to <var>high</var>.
+</p>
+<p>Default value for <var>low</var> is <code>20/255</code>, and default value for <var>high</var>
+is <code>50/255</code>.
+</p></dd>
+</dl>
+
+<p>Example:
+</p><table><tr><td> </td><td><pre class="example">edgedetect=low=0.1:high=0.4
+</pre></td></tr></table>
+
+<a name="extractplanes"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-extractplanes">28.25 extractplanes</a></h2>
+
+<p>Extract color channel components from input video stream into
+separate grayscale video streams.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>planes</samp>’</dt>
+<dd><p>Set plane(s) to extract.
+</p>
+<p>Available values for planes are:
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>u</samp>’</dt>
+<dt> ‘<samp>v</samp>’</dt>
+<dt> ‘<samp>a</samp>’</dt>
+<dt> ‘<samp>r</samp>’</dt>
+<dt> ‘<samp>g</samp>’</dt>
+<dt> ‘<samp>b</samp>’</dt>
+</dl>
+
+<p>Choosing planes not available in the input will result in an error.
+That means you cannot select <code>r</code>, <code>g</code>, <code>b</code> planes
+with <code>y</code>, <code>u</code>, <code>v</code> planes at same time.
+</p></dd>
+</dl>
+
+<a name="Examples-26"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-26">28.25.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract luma, u and v color channel component from input video frame
+into 3 grayscale outputs:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
+</pre></td></tr></table>
+</li></ul>
+
+<a name="elbg"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-elbg">28.26 elbg</a></h2>
+
+<p>Apply a posterize effect using the ELBG (Enhanced LBG) algorithm.
+</p>
+<p>For each input image, the filter will compute the optimal mapping from
+the input to the output given the codebook length, that is the number
+of distinct output colors.
+</p>
+<p>This filter accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>codebook_length, l</samp>’</dt>
+<dd><p>Set codebook length. The value must be a positive integer, and
+represents the number of distinct output colors. Default value is 256.
+</p>
+</dd>
+<dt> ‘<samp>nb_steps, n</samp>’</dt>
+<dd><p>Set the maximum number of iterations to apply for computing the optimal
+mapping. The higher the value the better the result and the higher the
+computation time. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>seed, s</samp>’</dt>
+<dd><p>Set a random seed, 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.
+</p></dd>
+</dl>
+
+<a name="fade"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-fade">28.27 fade</a></h2>
+
+<p>Apply fade-in/out effect to input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>The effect type – can be either "in" for fade-in, or "out" for a fade-out
+effect.
+Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_frame, s</samp>’</dt>
+<dd><p>Specify the number of the start frame for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames, n</samp>’</dt>
+<dd><p>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 filled with the
+selected ‘<samp>color</samp>’.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>alpha</samp>’</dt>
+<dd><p>If set to 1, fade only alpha channel, if one exists on the input.
+Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify the timestamp (in seconds) of the frame to start to apply the fade
+effect. If both start_frame and start_time are specified, the fade will start at
+whichever comes last. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>The number of seconds 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 filled with the
+selected ‘<samp>color</samp>’.
+If both duration and nb_frames are specified, duration is used. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the fade. Default is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-52"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-52">28.27.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 30 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:30
+</pre></td></tr></table>
+
+<p>The command above is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">fade=t=in:s=0:n=30
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 45 frames of a 200-frame video:
+<table><tr><td> </td><td><pre class="example">fade=out:155:45
+fade=type=out:start_frame=155:nb_frames=45
+</pre></td></tr></table>
+
+</li><li>
+Fade in first 25 frames and fade out last 25 frames of a 1000-frame video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25, fade=out:975:25
+</pre></td></tr></table>
+
+</li><li>
+Make first 5 frames yellow, then fade in from frame 5-24:
+<table><tr><td> </td><td><pre class="example">fade=in:5:20:color=yellow
+</pre></td></tr></table>
+
+</li><li>
+Fade in alpha over first 25 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25:alpha=1
+</pre></td></tr></table>
+
+</li><li>
+Make first 5.5 seconds black, then fade in for 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">fade=t=in:st=5.5:d=0.5
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="field"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-field">28.28 field</a></h2>
+
+<p>Extract a single field from an interlaced image using stride
+arithmetic to avoid wasting CPU time. The output frames are marked as
+non-interlaced.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Specify whether to extract the top (if the value is <code>0</code> or
+<code>top</code>) or the bottom field (if the value is <code>1</code> or
+<code>bottom</code>).
+</p></dd>
+</dl>
+
+<a name="fieldmatch"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-fieldmatch">28.29 fieldmatch</a></h2>
+
+<p>Field matching filter for inverse telecine. It is meant to reconstruct the
+progressive frames from a telecined stream. The filter does not drop duplicated
+frames, so to achieve a complete inverse telecine <code>fieldmatch</code> needs to be
+followed by a decimation filter such as <a href="#decimate">decimate</a> in the filtergraph.
+</p>
+<p>The separation of the field matching and the decimation is notably motivated by
+the possibility of inserting a de-interlacing filter fallback between the two.
+If the source has mixed telecined and real interlaced content,
+<code>fieldmatch</code> will not be able to match fields for the interlaced parts.
+But these remaining combed frames will be marked as interlaced, and thus can be
+de-interlaced by a later filter such as <a href="#yadif">yadif</a> before decimation.
+</p>
+<p>In addition to the various configuration options, <code>fieldmatch</code> can take an
+optional second stream, activated through the ‘<samp>ppsrc</samp>’ option. If
+enabled, the frames reconstruction will be based on the fields and frames from
+this second stream. This allows the first input to be pre-processed in order to
+help the various algorithms of the filter, while keeping the output lossless
+(assuming the fields are matched properly). Typically, a field-aware denoiser,
+or brightness/contrast adjustments can help.
+</p>
+<p>Note that this filter uses the same algorithms as TIVTC/TFM (AviSynth project)
+and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from
+which <code>fieldmatch</code> is based on. While the semantic and usage are very
+close, some behaviour and options names can differ.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Specify the assumed field order of the input stream. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Auto detect parity (use FFmpeg’s internal parity value).
+</p></dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Assume bottom field first.
+</p></dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Assume top field first.
+</p></dd>
+</dl>
+
+<p>Note that it is sometimes recommended not to trust the parity announced by the
+stream.
+</p>
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the matching mode or strategy to use. ‘<samp>pc</samp>’ mode is the safest in the
+sense that it won’t risk creating jerkiness due to duplicate frames when
+possible, but if there are bad edits or blended fields it will end up
+outputting combed frames when a good match might actually exist. On the other
+hand, ‘<samp>pcn_ub</samp>’ mode is the most risky in terms of creating jerkiness,
+but will almost always find a good frame if there is one. The other values are
+all somewhere in between ‘<samp>pc</samp>’ and ‘<samp>pcn_ub</samp>’ in terms of risking
+jerkiness and creating duplicate frames versus finding good matches in sections
+with bad edits, orphaned fields, blended fields, etc.
+</p>
+<p>More details about p/c/n/u/b are available in <a href="#p_002fc_002fn_002fu_002fb-meaning">p/c/n/u/b meaning</a> section.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>pc</samp>’</dt>
+<dd><p>2-way matching (p/c)
+</p></dd>
+<dt> ‘<samp>pc_n</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match if still combed (p/c + n)
+</p></dd>
+<dt> ‘<samp>pc_u</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match (same order) if still combed (p/c + u)
+</p></dd>
+<dt> ‘<samp>pc_n_ub</samp>’</dt>
+<dd><p>2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if
+still combed (p/c + n + u/b)
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>3-way matching (p/c/n)
+</p></dd>
+<dt> ‘<samp>pcn_ub</samp>’</dt>
+<dd><p>3-way matching, and trying 4th/5th matches if all 3 of the original matches are
+detected as combed (p/c/n + u/b)
+</p></dd>
+</dl>
+
+<p>The parenthesis at the end indicate the matches that would be used for that
+mode assuming ‘<samp>order</samp>’=<var>tff</var> (and ‘<samp>field</samp>’ on <var>auto</var> or
+<var>top</var>).
+</p>
+<p>In terms of speed ‘<samp>pc</samp>’ mode is by far the fastest and ‘<samp>pcn_ub</samp>’ is
+the slowest.
+</p>
+<p>Default value is <var>pc_n</var>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark the main input stream as a pre-processed input, and enable the secondary
+input stream as the clean source to pick the fields from. See the filter
+introduction for more details. It is similar to the ‘<samp>clip2</samp>’ feature from
+VFM/TFM.
+</p>
+<p>Default value is <code>0</code> (disabled).
+</p>
+</dd>
+<dt> ‘<samp>field</samp>’</dt>
+<dd><p>Set the field to match from. It is recommended to set this to the same value as
+‘<samp>order</samp>’ unless you experience matching failures with that setting. In
+certain circumstances changing the field that is used to match from can have a
+large impact on matching performance. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatic (same value as ‘<samp>order</samp>’).
+</p></dd>
+<dt> ‘<samp>bottom</samp>’</dt>
+<dd><p>Match from the bottom field.
+</p></dd>
+<dt> ‘<samp>top</samp>’</dt>
+<dd><p>Match from the top field.
+</p></dd>
+</dl>
+
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mchroma</samp>’</dt>
+<dd><p>Set whether or not chroma is included during the match comparisons. In most
+cases it is recommended to leave this enabled. You should set this to <code>0</code>
+only if your clip has bad chroma problems such as heavy rainbowing or other
+artifacts. Setting this to <code>0</code> could also be used to speed things up at
+the cost of some accuracy.
+</p>
+<p>Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dd><p>These define an exclusion band which excludes the lines between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ from being included in the field matching decision. An exclusion
+band can be used to ignore subtitles, a logo, or other things that may
+interfere with the matching. ‘<samp>y0</samp>’ sets the starting scan line and
+‘<samp>y1</samp>’ sets the ending line; all lines in between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ (including ‘<samp>y0</samp>’ and ‘<samp>y1</samp>’) will be ignored. Setting
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ to the same value will disable the feature.
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ defaults to <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set the scene change detection threshold as a percentage of maximum change on
+the luma plane. Good values are in the <code>[8.0, 14.0]</code> range. Scene change
+detection is only relevant in case ‘<samp>combmatch</samp>’=<var>sc</var>. The range for
+‘<samp>scthresh</samp>’ is <code>[0.0, 100.0]</code>.
+</p>
+<p>Default value is <code>12.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>combmatch</samp>’</dt>
+<dd><p>When ‘<samp>combatch</samp>’ is not <var>none</var>, <code>fieldmatch</code> will take into
+account the combed scores of matches when deciding what match to use as the
+final match. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No final matching based on combed scores.
+</p></dd>
+<dt> ‘<samp>sc</samp>’</dt>
+<dd><p>Combed scores are only used when a scene change is detected.
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Use combed scores all the time.
+</p></dd>
+</dl>
+
+<p>Default is <var>sc</var>.
+</p>
+</dd>
+<dt> ‘<samp>combdbg</samp>’</dt>
+<dd><p>Force <code>fieldmatch</code> to calculate the combed metrics for certain matches and
+print them. This setting is known as ‘<samp>micout</samp>’ in TFM/VFM vocabulary.
+Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No forced calculation.
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>Force p/c/n calculations.
+</p></dd>
+<dt> ‘<samp>pcnub</samp>’</dt>
+<dd><p>Force p/c/n/u/b calculations.
+</p></dd>
+</dl>
+
+<p>Default value is <var>none</var>.
+</p>
+</dd>
+<dt> ‘<samp>cthresh</samp>’</dt>
+<dd><p>This is the area combing threshold used for combed frame detection. This
+essentially controls how "strong" or "visible" combing must be to be detected.
+Larger values mean combing must be more visible and smaller values mean combing
+can be less visible or strong and still be detected. Valid settings are from
+<code>-1</code> (every pixel will be detected as combed) to <code>255</code> (no pixel will
+be detected as combed). This is basically a pixel difference value. A good
+range is <code>[8, 12]</code>.
+</p>
+<p>Default value is <code>9</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Sets whether or not chroma is considered in the combed frame decision. Only
+disable this if your source has chroma problems (rainbowing, etc.) that are
+causing problems for the combed frame detection with chroma enabled. Actually,
+using ‘<samp>chroma</samp>’=<var>0</var> is usually more reliable, except for the case
+where there is chroma only combing in the source.
+</p>
+<p>Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Respectively set the x-axis and y-axis size of the window used during combed
+frame detection. This has to do with the size of the area in which
+‘<samp>combpel</samp>’ pixels are required to be detected as combed for a frame to be
+declared combed. See the ‘<samp>combpel</samp>’ parameter description for more info.
+Possible values are any number that is a power of 2 starting at 4 and going up
+to 512.
+</p>
+<p>Default value is <code>16</code>.
+</p>
+</dd>
+<dt> ‘<samp>combpel</samp>’</dt>
+<dd><p>The number of combed pixels inside any of the ‘<samp>blocky</samp>’ by
+‘<samp>blockx</samp>’ size blocks on the frame for the frame to be detected as
+combed. While ‘<samp>cthresh</samp>’ controls how "visible" the combing must be, this
+setting controls "how much" combing there must be in any localized area (a
+window defined by the ‘<samp>blockx</samp>’ and ‘<samp>blocky</samp>’ settings) on the
+frame. Minimum value is <code>0</code> and maximum is <code>blocky x blockx</code> (at
+which point no frames will ever be detected as combed). This setting is known
+as ‘<samp>MI</samp>’ in TFM/VFM vocabulary.
+</p>
+<p>Default value is <code>80</code>.
+</p></dd>
+</dl>
+
+<p><a name="p_002fc_002fn_002fu_002fb-meaning"></a>
+</p><a name="p_002fc_002fn_002fu_002fb-meaning-1"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-p_002fc_002fn_002fu_002fb-meaning-1">28.29.1 p/c/n/u/b meaning</a></h3>
+
+<a name="p_002fc_002fn"></a>
+<h4 class="subsubsection"><a href="ffplay-all.html#toc-p_002fc_002fn">28.29.1.1 p/c/n</a></h4>
+
+<p>We assume the following telecined stream:
+</p>
+<table><tr><td> </td><td><pre class="example">Top fields: 1 2 2 3 4
+Bottom fields: 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>The numbers correspond to the progressive frame the fields relate to. Here, the
+first two frames are progressive, the 3rd and 4th are combed, and so on.
+</p>
+<p>When <code>fieldmatch</code> is configured to run a matching from bottom
+(‘<samp>field</samp>’=<var>bottom</var>) this is how this input stream get transformed:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4
+ B 1 2 3 4 4 <-- matching reference
+
+Matches: c c n n c
+
+Output stream:
+ T 1 2 3 4 4
+ B 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>As a result of the field matching, we can see that some frames get duplicated.
+To perform a complete inverse telecine, you need to rely on a decimation filter
+after this operation. See for instance the <a href="#decimate">decimate</a> filter.
+</p>
+<p>The same operation now matching from top fields (‘<samp>field</samp>’=<var>top</var>)
+looks like this:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4 <-- matching reference
+ B 1 2 3 4 4
+
+Matches: c c p p c
+
+Output stream:
+ T 1 2 2 3 4
+ B 1 2 2 3 4
+</pre></td></tr></table>
+
+<p>In these examples, we can see what <var>p</var>, <var>c</var> and <var>n</var> mean;
+basically, they refer to the frame and field of the opposite parity:
+</p>
+<ul>
+<li> <var>p</var> matches the field of the opposite parity in the previous frame
+</li><li> <var>c</var> matches the field of the opposite parity in the current frame
+</li><li> <var>n</var> matches the field of the opposite parity in the next frame
+</li></ul>
+
+<a name="u_002fb"></a>
+<h4 class="subsubsection"><a href="ffplay-all.html#toc-u_002fb">28.29.1.2 u/b</a></h4>
+
+<p>The <var>u</var> and <var>b</var> matching are a bit special in the sense that they match
+from the opposite parity flag. In the following examples, we assume that we are
+currently matching the 2nd frame (Top:2, bottom:2). According to the match, a
+’x’ is placed above and below each matched fields.
+</p>
+<p>With bottom matching (‘<samp>field</samp>’=<var>bottom</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 1 2 2 2
+ 2 2 2 1 3
+</pre></td></tr></table>
+
+<p>With top matching (‘<samp>field</samp>’=<var>top</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 2 2 1 2
+ 2 1 3 2 2
+</pre></td></tr></table>
+
+<a name="Examples-16"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-16">28.29.2 Examples</a></h3>
+
+<p>Simple IVTC of a top field first telecined stream:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=none, decimate
+</pre></td></tr></table>
+
+<p>Advanced IVTC, with fallback on <a href="#yadif">yadif</a> for still combed frames:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
+</pre></td></tr></table>
+
+<a name="fieldorder"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-fieldorder">28.30 fieldorder</a></h2>
+
+<p>Transform the field order of the input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Output field order. Valid values are <var>tff</var> for top field first or <var>bff</var>
+for bottom field first.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>tff</samp>’.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter is very useful when converting to or from PAL DV material,
+which is bottom field first.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
+</pre></td></tr></table>
+
+<a name="fifo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-fifo">28.31 fifo</a></h2>
+
+<p>Buffer input images and send them when they are requested.
+</p>
+<p>This filter is mainly useful when auto-inserted by the libavfilter
+framework.
+</p>
+<p>The filter does not take parameters.
+</p>
+<p><a name="format"></a>
+</p><a name="format-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-format-1">28.32 format</a></h2>
+
+<p>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.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-57"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-57">28.32.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert the input video to the format <var>yuv420p</var>
+<table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p
+</pre></td></tr></table>
+
+<p>Convert the input video to any of the formats in the list
+</p><table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="fps"></a>
+</p><a name="fps-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-fps-1">28.33 fps</a></h2>
+
+<p>Convert the video to specified constant frame rate by duplicating or dropping
+frames as necessary.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>fps</samp>’</dt>
+<dd><p>Desired output frame rate. The default is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Rounding method.
+</p>
+<p>Possible values are:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero round towards 0
+</p></dd>
+<dt> ‘<samp>inf</samp>’</dt>
+<dd><p>round away from 0
+</p></dd>
+<dt> ‘<samp>down</samp>’</dt>
+<dd><p>round towards -infinity
+</p></dd>
+<dt> ‘<samp>up</samp>’</dt>
+<dd><p>round towards +infinity
+</p></dd>
+<dt> ‘<samp>near</samp>’</dt>
+<dd><p>round to nearest
+</p></dd>
+</dl>
+<p>The default is <code>near</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Assume the first PTS should be the given value, in seconds. This allows for
+padding/trimming at the start of stream. By default, no assumption is made
+about the first frame’s expected PTS, so no padding or trimming is done.
+For example, this could be set to 0 to pad the beginning with duplicates of
+the first frame if a video stream starts after the audio stream or to trim any
+frames with a negative PTS.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>fps</var>[:<var>round</var>].
+</p>
+<p>See also the <a href="#setpts">setpts</a> filter.
+</p>
+<a name="Examples-72"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-72">28.33.1 Examples</a></h3>
+
+<ul>
+<li>
+A typical usage in order to set the fps to 25:
+<table><tr><td> </td><td><pre class="example">fps=fps=25
+</pre></td></tr></table>
+
+</li><li>
+Sets the fps to 24, using abbreviation and rounding method to round to nearest:
+<table><tr><td> </td><td><pre class="example">fps=fps=film:round=near
+</pre></td></tr></table>
+</li></ul>
+
+<a name="framepack"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-framepack">28.34 framepack</a></h2>
+
+<p>Pack two different video streams into a stereoscopic video, setting proper
+metadata on supported codecs. The two views should have the same size and
+framerate and processing will stop when the shorter video ends. Please note
+that you may conveniently adjust view properties with the <a href="#scale">scale</a> and
+<a href="#fps">fps</a> filters.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Desired packing format. Supported values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sbs</samp>’</dt>
+<dd><p>Views are next to each other (default).
+</p>
+</dd>
+<dt> ‘<samp>tab</samp>’</dt>
+<dd><p>Views are on top of each other.
+</p>
+</dd>
+<dt> ‘<samp>lines</samp>’</dt>
+<dd><p>Views are packed by line.
+</p>
+</dd>
+<dt> ‘<samp>columns</samp>’</dt>
+<dd><p>Views are eacked by column.
+</p>
+</dd>
+<dt> ‘<samp>frameseq</samp>’</dt>
+<dd><p>Views are temporally interleaved.
+</p>
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<p>Some examples follow:
+</p>
+<table><tr><td> </td><td><pre class="example"># Convert left and right views into a frame sequential video.
+ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT
+
+# Convert views into a side-by-side video with the same output resolution as the input.
+ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
+</pre></td></tr></table>
+
+<a name="framestep"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-framestep">28.35 framestep</a></h2>
+
+<p>Select one frame every N-th frame.
+</p>
+<p>This filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Select frame after every <code>step</code> frames.
+Allowed values are positive integers higher than 0. Default value is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><a name="frei0r"></a>
+</p><a name="frei0r-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-frei0r-1">28.36 frei0r</a></h2>
+
+<p>Apply a frei0r effect to the input video.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r effect to load. If the environment variable
+<code>FREI0R_PATH</code> is defined, the frei0r effect is searched in each one of the
+directories specified by the colon separated list in <code>FREIOR_PATH</code>,
+otherwise in the standard frei0r paths, which are in this order:
+‘<tt>HOME/.frei0r-1/lib/</tt>’, ‘<tt>/usr/local/lib/frei0r-1/</tt>’,
+‘<tt>/usr/lib/frei0r-1/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r effect.
+</p>
+</dd>
+</dl>
+
+<p>A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+<var>R</var>/<var>G</var>/<var>B</var>, (<var>R</var>, <var>G</var>, and <var>B</var> being float
+numbers from 0.0 to 1.0) or by a color description specified in the "Color"
+section in the ffmpeg-utils manual), a position (specified by the syntax <var>X</var>/<var>Y</var>,
+<var>X</var> and <var>Y</var> being float numbers) and a string.
+</p>
+<p>The number and kind of parameters depend on the loaded effect. If an
+effect parameter is not specified the default value is set.
+</p>
+<a name="Examples-49"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-49">28.36.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the distort0r effect, set the first two double parameters:
+<table><tr><td> </td><td><pre class="example">frei0r=filter_name=distort0r:filter_params=0.5|0.01
+</pre></td></tr></table>
+
+</li><li>
+Apply the colordistance effect, take a color as first parameter:
+<table><tr><td> </td><td><pre class="example">frei0r=colordistance:0.2/0.3/0.4
+frei0r=colordistance:violet
+frei0r=colordistance:0x112233
+</pre></td></tr></table>
+
+</li><li>
+Apply the perspective effect, specify the top left and top right image
+positions:
+<table><tr><td> </td><td><pre class="example">frei0r=perspective:0.2/0.2|0.8/0.2
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information see:
+<a href="http://frei0r.dyne.org">http://frei0r.dyne.org</a>
+</p>
+<a name="geq"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-geq">28.37 geq</a></h2>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>lum_expr, lum</samp>’</dt>
+<dd><p>Set the luminance expression.
+</p></dd>
+<dt> ‘<samp>cb_expr, cb</samp>’</dt>
+<dd><p>Set the chrominance blue expression.
+</p></dd>
+<dt> ‘<samp>cr_expr, cr</samp>’</dt>
+<dd><p>Set the chrominance red expression.
+</p></dd>
+<dt> ‘<samp>alpha_expr, a</samp>’</dt>
+<dd><p>Set the alpha expression.
+</p></dd>
+<dt> ‘<samp>red_expr, r</samp>’</dt>
+<dd><p>Set the red expression.
+</p></dd>
+<dt> ‘<samp>green_expr, g</samp>’</dt>
+<dd><p>Set the green expression.
+</p></dd>
+<dt> ‘<samp>blue_expr, b</samp>’</dt>
+<dd><p>Set the blue expression.
+</p></dd>
+</dl>
+
+<p>The colorspace is selected according to the specified options. If one
+of the ‘<samp>lum_expr</samp>’, ‘<samp>cb_expr</samp>’, or ‘<samp>cr_expr</samp>’
+options is specified, the filter will automatically select a YCbCr
+colorspace. If one of the ‘<samp>red_expr</samp>’, ‘<samp>green_expr</samp>’, or
+‘<samp>blue_expr</samp>’ options is specified, it will select an RGB
+colorspace.
+</p>
+<p>If one of the chrominance expression is not defined, it falls back on the other
+one. If no alpha expression is specified it will evaluate to opaque value.
+If none of chrominance expressions are specified, they will evaluate
+to the luminance expression.
+</p>
+<p>The expressions can use the following variables and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>The coordinates of the current sample.
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>The width and height of the image.
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>p(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the current
+plane.
+</p>
+</dd>
+<dt> ‘<samp>lum(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the luminance
+plane.
+</p>
+</dd>
+<dt> ‘<samp>cb(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+blue-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>cr(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>r(x, y)</samp>’</dt>
+<dt> ‘<samp>g(x, y)</samp>’</dt>
+<dt> ‘<samp>b(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red/green/blue component. Return 0 if there is no such component.
+</p>
+</dd>
+<dt> ‘<samp>alpha(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the alpha
+plane. Return 0 if there is no such plane.
+</p></dd>
+</dl>
+
+<p>For functions, if <var>x</var> and <var>y</var> are outside the area, the value will be
+automatically clipped to the closer edge.
+</p>
+<a name="Examples-19"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-19">28.37.1 Examples</a></h3>
+
+<ul>
+<li>
+Flip the image horizontally:
+<table><tr><td> </td><td><pre class="example">geq=p(W-X\,Y)
+</pre></td></tr></table>
+
+</li><li>
+Generate a bidimensional sine wave, with angle <code>PI/3</code> and a
+wavelength of 100 pixels:
+<table><tr><td> </td><td><pre class="example">geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a fancy enigmatic moving light:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a quick emboss effect:
+<table><tr><td> </td><td><pre class="example">format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
+</pre></td></tr></table>
+
+</li><li>
+Modify RGB components depending on pixel position:
+<table><tr><td> </td><td><pre class="example">geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="gradfun"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-gradfun">28.38 gradfun</a></h2>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>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
+64, default value is 1.2, out-of-range values will be clipped to the valid
+range.
+</p>
+</dd>
+<dt> ‘<samp>radius</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>strength</var>[:<var>radius</var>]
+</p>
+<a name="Examples-24"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-24">28.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the filter with a <code>3.5</code> strength and radius of <code>8</code>:
+<table><tr><td> </td><td><pre class="example">gradfun=3.5:8
+</pre></td></tr></table>
+
+</li><li>
+Specify radius, omitting the strength (which will fall-back to the default
+value):
+<table><tr><td> </td><td><pre class="example">gradfun=radius=8
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="haldclut"></a>
+</p><a name="haldclut-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-haldclut-1">28.39 haldclut</a></h2>
+
+<p>Apply a Hald CLUT to a video stream.
+</p>
+<p>First input is the video stream to process, and second one is the Hald CLUT.
+The Hald CLUT input can be a simple picture or a complete video stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last CLUT after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the CLUT is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><code>haldclut</code> also has the same interpolation options as <a href="#lut3d">lut3d</a> (both
+filters share the same internals).
+</p>
+<p>More information about the Hald CLUT can be found on Eskil Steenberg’s website
+(Hald CLUT author) at <a href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>.
+</p>
+<a name="Workflow-examples"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Workflow-examples">28.39.1 Workflow examples</a></h3>
+
+<a name="Hald-CLUT-video-stream"></a>
+<h4 class="subsubsection"><a href="ffplay-all.html#toc-Hald-CLUT-video-stream">28.39.1.1 Hald CLUT video stream</a></h4>
+
+<p>Generate an identity Hald CLUT stream altered with various effects:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
+</pre></td></tr></table>
+
+<p>Note: make sure you use a lossless codec.
+</p>
+<p>Then use it with <code>haldclut</code> to apply it on some random stream:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
+</pre></td></tr></table>
+
+<p>The Hald CLUT will be applied to the 10 first seconds (duration of
+‘<tt>clut.nut</tt>’), then the latest picture of that CLUT stream will be applied
+to the remaining frames of the <code>mandelbrot</code> stream.
+</p>
+<a name="Hald-CLUT-with-preview"></a>
+<h4 class="subsubsection"><a href="ffplay-all.html#toc-Hald-CLUT-with-preview">28.39.1.2 Hald CLUT with preview</a></h4>
+
+<p>A Hald CLUT is supposed to be a squared image of <code>Level*Level*Level</code> by
+<code>Level*Level*Level</code> pixels. For a given Hald CLUT, FFmpeg will select the
+biggest possible square starting at the top left of the picture. The remaining
+padding pixels (bottom or right) will be ignored. This area can be used to add
+a preview of the Hald CLUT.
+</p>
+<p>Typically, the following generated Hald CLUT will be supported by the
+<code>haldclut</code> filter:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "
+ pad=iw+320 [padded_clut];
+ smptebars=s=320x256, split [a][b];
+ [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
+ [main][b] overlay=W-320" -frames:v 1 clut.png
+</pre></td></tr></table>
+
+<p>It contains the original and a preview of the effect of the CLUT: SMPTE color
+bars are displayed on the right-top, and below the same color bars processed by
+the color changes.
+</p>
+<p>Then, the effect of this Hald CLUT can be visualized with:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
+</pre></td></tr></table>
+
+<a name="hflip"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-hflip">28.40 hflip</a></h2>
+
+<p>Flip the input video horizontally.
+</p>
+<p>For example to horizontally flip the input video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "hflip" out.avi
+</pre></td></tr></table>
+
+<a name="histeq"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-histeq">28.41 histeq</a></h2>
+<p>This filter applies a global color histogram equalization on a
+per-frame basis.
+</p>
+<p>It can be used to correct video that has a compressed range of pixel
+intensities. The filter redistributes the pixel intensities to
+equalize their distribution across the intensity range. It may be
+viewed as an "automatically adjusting contrast filter". This filter is
+useful only for correcting degraded or poorly captured source
+video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>Determine the amount of equalization to be applied. As the strength
+is reduced, the distribution of pixel intensities more-and-more
+approaches that of the input frame. The value must be a float number
+in the range [0,1] and defaults to 0.200.
+</p>
+</dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>Set the maximum intensity that can generated and scale the output
+values appropriately. The strength should be set as desired and then
+the intensity can be limited if needed to avoid washing-out. The value
+must be a float number in the range [0,1] and defaults to 0.210.
+</p>
+</dd>
+<dt> ‘<samp>antibanding</samp>’</dt>
+<dd><p>Set the antibanding level. If enabled the filter will randomly vary
+the luminance of output pixels by a small amount to avoid banding of
+the histogram. Possible values are <code>none</code>, <code>weak</code> or
+<code>strong</code>. It defaults to <code>none</code>.
+</p></dd>
+</dl>
+
+<a name="histogram"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-histogram">28.42 histogram</a></h2>
+
+<p>Compute and draw a color distribution histogram for the input video.
+</p>
+<p>The computed histogram is a representation of the color component
+distribution in an image.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set histogram mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>levels</samp>’</dt>
+<dd><p>Standard histogram that displays the color components distribution in an
+image. Displays color graph for each color component. Shows distribution of
+the Y, U, V, A or R, G, B components, depending on input format, in the
+current frame. Below each graph a color component scale meter is shown.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Displays chroma values (U/V color placement) in a two dimensional
+graph (which is called a vectorscope). The brighter a pixel in the
+vectorscope, the more pixels of the input frame correspond to that pixel
+(i.e., more pixels have this chroma value). The V component is displayed on
+the horizontal (X) axis, with the leftmost side being V = 0 and the rightmost
+side being V = 255. The U component is displayed on the vertical (Y) axis,
+with the top representing U = 0 and the bottom representing U = 255.
+</p>
+<p>The position of a white pixel in the graph corresponds to the chroma value of
+a pixel of the input clip. The graph can therefore be used to read the hue
+(color flavor) and the saturation (the dominance of the hue in the color). As
+the hue of a color changes, it moves around the square. At the center of the
+square the saturation is zero, which means that the corresponding pixel has no
+color. If the amount of a specific color is increased (while leaving the other
+colors unchanged) the saturation increases, and the indicator moves towards
+the edge of the square.
+</p>
+</dd>
+<dt> ‘<samp>color2</samp>’</dt>
+<dd><p>Chroma values in vectorscope, similar as <code>color</code> but actual chroma values
+are displayed.
+</p>
+</dd>
+<dt> ‘<samp>waveform</samp>’</dt>
+<dd><p>Per row/column color component graph. In row mode, the graph on the left side
+represents color component value 0 and the right side represents value = 255.
+In column mode, the top side represents color component value = 0 and bottom
+side represents value = 255.
+</p></dd>
+</dl>
+<p>Default value is <code>levels</code>.
+</p>
+</dd>
+<dt> ‘<samp>level_height</samp>’</dt>
+<dd><p>Set height of level in <code>levels</code>. Default value is <code>200</code>.
+Allowed range is [50, 2048].
+</p>
+</dd>
+<dt> ‘<samp>scale_height</samp>’</dt>
+<dd><p>Set height of color scale in <code>levels</code>. Default value is <code>12</code>.
+Allowed range is [0, 40].
+</p>
+</dd>
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Set step for <code>waveform</code> mode. Smaller values are useful to find out how
+many values of the same luminance are distributed across input rows/columns.
+Default value is <code>10</code>. Allowed range is [1, 255].
+</p>
+</dd>
+<dt> ‘<samp>waveform_mode</samp>’</dt>
+<dd><p>Set mode for <code>waveform</code>. Can be either <code>row</code>, or <code>column</code>.
+Default is <code>row</code>.
+</p>
+</dd>
+<dt> ‘<samp>waveform_mirror</samp>’</dt>
+<dd><p>Set mirroring mode for <code>waveform</code>. <code>0</code> means unmirrored, <code>1</code>
+means mirrored. In mirrored mode, higher values will be represented on the left
+side for <code>row</code> mode and at the top for <code>column</code> mode. Default is
+<code>0</code> (unmirrored).
+</p>
+</dd>
+<dt> ‘<samp>display_mode</samp>’</dt>
+<dd><p>Set display mode for <code>waveform</code> and <code>levels</code>.
+It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>parade</samp>’</dt>
+<dd><p>Display separate graph for the color components side by side in
+<code>row</code> waveform mode or one below the other in <code>column</code> waveform mode
+for <code>waveform</code> histogram mode. For <code>levels</code> histogram mode,
+per color component graphs are placed below each other.
+</p>
+<p>Using this display mode in <code>waveform</code> histogram mode makes it easy to
+spot color casts in the highlights and shadows of an image, by comparing the
+contours of the top and the bottom graphs of each waveform. Since whites,
+grays, and blacks are characterized by exactly equal amounts of red, green,
+and blue, neutral areas of the picture should display three waveforms of
+roughly equal width/height. If not, the correction is easy to perform by
+making level adjustments the three waveforms.
+</p>
+</dd>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dd><p>Presents information identical to that in the <code>parade</code>, except
+that the graphs representing color components are superimposed directly
+over one another.
+</p>
+<p>This display mode in <code>waveform</code> histogram mode makes it easier to spot
+relative differences or similarities in overlapping areas of the color
+components that are supposed to be identical, such as neutral whites, grays,
+or blacks.
+</p></dd>
+</dl>
+<p>Default is <code>parade</code>.
+</p>
+</dd>
+<dt> ‘<samp>levels_mode</samp>’</dt>
+<dd><p>Set mode for <code>levels</code>. Can be either <code>linear</code>, or <code>logarithmic</code>.
+Default is <code>linear</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-58"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-58">28.42.1 Examples</a></h3>
+
+<ul>
+<li>
+Calculate and draw histogram:
+<table><tr><td> </td><td><pre class="example">ffplay -i input -vf histogram
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="hqdn3d"></a>
+</p><a name="hqdn3d-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-hqdn3d-1">28.43 hqdn3d</a></h2>
+
+<p>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.
+</p>
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial luma strength,
+defaults to 4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial chroma strength,
+defaults to 3.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>luma_tmp</samp>’</dt>
+<dd><p>a float number which specifies luma temporal strength, defaults to
+6.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_tmp</samp>’</dt>
+<dd><p>a float number which specifies chroma temporal strength, defaults to
+<var>luma_tmp</var>*<var>chroma_spatial</var>/<var>luma_spatial</var>
+</p></dd>
+</dl>
+
+<a name="hue"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-hue">28.44 hue</a></h2>
+
+<p>Modify the hue and/or the saturation of the input.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the hue angle as a number of degrees. It accepts an expression,
+and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>Specify the saturation in the [-10,10] range. It accepts an expression and
+defaults to "1".
+</p>
+</dd>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Specify the hue angle as a number of radians. It accepts an
+expression, and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Specify the brightness in the [-10,10] range. It accepts an expression and
+defaults to "0".
+</p></dd>
+</dl>
+
+<p>‘<samp>h</samp>’ and ‘<samp>H</samp>’ are mutually exclusive, and can’t be
+specified at the same time.
+</p>
+<p>The ‘<samp>b</samp>’, ‘<samp>h</samp>’, ‘<samp>H</samp>’ and ‘<samp>s</samp>’ option values are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame count of the input frame starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>presentation timestamp of the input frame expressed in time base units
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+<a name="Examples-59"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-59">28.44.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the hue to 90 degrees and the saturation to 1.0:
+<table><tr><td> </td><td><pre class="example">hue=h=90:s=1
+</pre></td></tr></table>
+
+</li><li>
+Same command but expressing the hue in radians:
+<table><tr><td> </td><td><pre class="example">hue=H=PI/2:s=1
+</pre></td></tr></table>
+
+</li><li>
+Rotate hue and make the saturation swing between 0
+and 2 over a period of 1 second:
+<table><tr><td> </td><td><pre class="example">hue="H=2*PI*t: s=sin(2*PI*t)+1"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-in effect starting at 0:
+<table><tr><td> </td><td><pre class="example">hue="s=min(t/3\,1)"
+</pre></td></tr></table>
+
+<p>The general fade-in expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=min(0\, max((t-START)/DURATION\, 1))"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-out effect starting at 5 seconds:
+<table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (8-t)/3))"
+</pre></td></tr></table>
+
+<p>The general fade-out expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="Commands-4"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands-4">28.44.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dt> ‘<samp>s</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Modify the hue and/or the saturation and/or brightness of the input video.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="idet"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-idet">28.45 idet</a></h2>
+
+<p>Detect video interlacing type.
+</p>
+<p>This filter tries to detect if the input is interlaced or progressive,
+top or bottom field first.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>intl_thres</samp>’</dt>
+<dd><p>Set interlacing threshold.
+</p></dd>
+<dt> ‘<samp>prog_thres</samp>’</dt>
+<dd><p>Set progressive threshold.
+</p></dd>
+</dl>
+
+<a name="il"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-il">28.46 il</a></h2>
+
+<p>Deinterleave or interleave fields.
+</p>
+<p>This filter allows one to process interlaced images fields without
+deinterlacing them. Deinterleaving splits the input frame into 2
+fields (so called half pictures). Odd lines are moved to the top
+half of the output image, even lines to the bottom half.
+You can process (filter) them independently and then re-interleave them.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_mode, l</samp>’</dt>
+<dt> ‘<samp>chroma_mode, c</samp>’</dt>
+<dt> ‘<samp>alpha_mode, a</samp>’</dt>
+<dd><p>Available values for <var>luma_mode</var>, <var>chroma_mode</var> and
+<var>alpha_mode</var> are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing.
+</p>
+</dd>
+<dt> ‘<samp>deinterleave, d</samp>’</dt>
+<dd><p>Deinterleave fields, placing one above the other.
+</p>
+</dd>
+<dt> ‘<samp>interleave, i</samp>’</dt>
+<dd><p>Interleave fields. Reverse the effect of deinterleaving.
+</p></dd>
+</dl>
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_swap, ls</samp>’</dt>
+<dt> ‘<samp>chroma_swap, cs</samp>’</dt>
+<dt> ‘<samp>alpha_swap, as</samp>’</dt>
+<dd><p>Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="interlace"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-interlace">28.47 interlace</a></h2>
+
+<p>Simple interlacing filter from progressive contents. This interleaves upper (or
+lower) lines from odd frames with lower (or upper) lines from even frames,
+halving the frame rate and preserving image height. A vertical lowpass filter
+is always applied in order to avoid twitter effects and reduce moiré patterns.
+</p>
+<table><tr><td> </td><td><pre class="example"> Original Original New Frame
+ Frame 'j' Frame 'j+1' (tff)
+ ========== =========== ==================
+ Line 0 --------------------> Frame 'j' Line 0
+ Line 1 Line 1 ----> Frame 'j+1' Line 1
+ Line 2 ---------------------> Frame 'j' Line 2
+ Line 3 Line 3 ----> Frame 'j+1' Line 3
+ ... ... ...
+New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on
+</pre></td></tr></table>
+
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>scan</samp>’</dt>
+<dd><p>determines whether the interlaced frame is taken from the even (tff - default)
+or odd (bff) lines of the progressive frame.
+</p></dd>
+</dl>
+
+<a name="kerndeint"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-kerndeint">28.48 kerndeint</a></h2>
+
+<p>Deinterlace input video by applying Donald Graft’s adaptive kernel
+deinterling. Work on interlaced parts of a video to produce
+progressive frames.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>thresh</samp>’</dt>
+<dd><p>Set the threshold which affects the filter’s tolerance when
+determining if a pixel line must be processed. It must be an integer
+in the range [0,255] and defaults to 10. A value of 0 will result in
+applying the process on every pixels.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Paint pixels exceeding the threshold value to white if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Set the fields order. Swap fields if set to 1, leave fields alone if
+0. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>sharp</samp>’</dt>
+<dd><p>Enable additional sharpening if set to 1. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>twoway</samp>’</dt>
+<dd><p>Enable twoway sharpening if set to 1. Default is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-13"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-13">28.48.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply default values:
+<table><tr><td> </td><td><pre class="example">kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
+</pre></td></tr></table>
+
+</li><li>
+Enable additional sharpening:
+<table><tr><td> </td><td><pre class="example">kerndeint=sharp=1
+</pre></td></tr></table>
+
+</li><li>
+Paint processed pixels in white:
+<table><tr><td> </td><td><pre class="example">kerndeint=map=1
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="lut3d"></a>
+</p><a name="lut3d-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-lut3d-1">28.49 lut3d</a></h2>
+
+<p>Apply a 3D LUT to an input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>Set the 3D LUT file name.
+</p>
+<p>Currently supported formats:
+</p><dl compact="compact">
+<dt> ‘<samp>3dl</samp>’</dt>
+<dd><p>AfterEffects
+</p></dd>
+<dt> ‘<samp>cube</samp>’</dt>
+<dd><p>Iridas
+</p></dd>
+<dt> ‘<samp>dat</samp>’</dt>
+<dd><p>DaVinci
+</p></dd>
+<dt> ‘<samp>m3d</samp>’</dt>
+<dd><p>Pandora
+</p></dd>
+</dl>
+</dd>
+<dt> ‘<samp>interp</samp>’</dt>
+<dd><p>Select interpolation mode.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nearest</samp>’</dt>
+<dd><p>Use values from the nearest defined point.
+</p></dd>
+<dt> ‘<samp>trilinear</samp>’</dt>
+<dd><p>Interpolate values using the 8 points defining a cube.
+</p></dd>
+<dt> ‘<samp>tetrahedral</samp>’</dt>
+<dd><p>Interpolate values using a tetrahedron.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="lut_002c-lutrgb_002c-lutyuv"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-lut_002c-lutrgb_002c-lutyuv">28.50 lut, lutrgb, lutyuv</a></h2>
+
+<p>Compute a look-up table for binding each pixel component input value
+to an output value, and apply it to input video.
+</p>
+<p><var>lutyuv</var> applies a lookup table to a YUV input video, <var>lutrgb</var>
+to an RGB input video.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>c0</samp>’</dt>
+<dd><p>set first pixel component expression
+</p></dd>
+<dt> ‘<samp>c1</samp>’</dt>
+<dd><p>set second pixel component expression
+</p></dd>
+<dt> ‘<samp>c2</samp>’</dt>
+<dd><p>set third pixel component expression
+</p></dd>
+<dt> ‘<samp>c3</samp>’</dt>
+<dd><p>set fourth pixel component expression, corresponds to the alpha component
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>set red component expression
+</p></dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>set green component expression
+</p></dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>set blue component expression
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>alpha component expression
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>set Y/luminance component expression
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>set U/Cb component expression
+</p></dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>set V/Cr component expression
+</p></dd>
+</dl>
+
+<p>Each of them specifies the expression to use for computing the lookup table for
+the corresponding pixel component values.
+</p>
+<p>The exact component associated to each of the <var>c*</var> options depends on the
+format in input.
+</p>
+<p>The <var>lut</var> filter requires either YUV or RGB pixel formats in input,
+<var>lutrgb</var> requires RGB pixel formats in input, and <var>lutyuv</var> requires YUV.
+</p>
+<p>The expressions can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>val</samp>’</dt>
+<dd><p>input value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>clipval</samp>’</dt>
+<dd><p>the input value clipped in the <var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>maxval</samp>’</dt>
+<dd><p>maximum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>minval</samp>’</dt>
+<dd><p>minimum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>negval</samp>’</dt>
+<dd><p>the negated value for the pixel component value clipped in the
+<var>minval</var>-<var>maxval</var> range , it corresponds to the expression
+"maxval-clipval+minval"
+</p>
+</dd>
+<dt> ‘<samp>clip(val)</samp>’</dt>
+<dd><p>the computed value in <var>val</var> clipped in the
+<var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>gammaval(gamma)</samp>’</dt>
+<dd><p>the computed gamma correction value of the pixel component value
+clipped in the <var>minval</var>-<var>maxval</var> range, corresponds to the
+expression
+"pow((clipval-minval)/(maxval-minval)\,<var>gamma</var>)*(maxval-minval)+minval"
+</p>
+</dd>
+</dl>
+
+<p>All expressions default to "val".
+</p>
+<a name="Examples-44"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-44">28.50.1 Examples</a></h3>
+
+<ul>
+<li>
+Negate input video:
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>The above is the same as:
+</p><table><tr><td> </td><td><pre class="example">lutrgb="r=negval:g=negval:b=negval"
+lutyuv="y=negval:u=negval:v=negval"
+</pre></td></tr></table>
+
+</li><li>
+Negate luminance:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=negval
+</pre></td></tr></table>
+
+</li><li>
+Remove chroma components, turns the video into a graytone image:
+<table><tr><td> </td><td><pre class="example">lutyuv="u=128:v=128"
+</pre></td></tr></table>
+
+</li><li>
+Apply a luma burning effect:
+<table><tr><td> </td><td><pre class="example">lutyuv="y=2*val"
+</pre></td></tr></table>
+
+</li><li>
+Remove green and blue components:
+<table><tr><td> </td><td><pre class="example">lutrgb="g=0:b=0"
+</pre></td></tr></table>
+
+</li><li>
+Set a constant alpha channel value on input:
+<table><tr><td> </td><td><pre class="example">format=rgba,lutrgb=a="maxval-minval/2"
+</pre></td></tr></table>
+
+</li><li>
+Correct luminance gamma by a 0.5 factor:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=gammaval(0.5)
+</pre></td></tr></table>
+
+</li><li>
+Discard least significant bits of luma:
+<table><tr><td> </td><td><pre class="example">lutyuv=y='bitand(val, 128+64+32)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mergeplanes"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mergeplanes">28.51 mergeplanes</a></h2>
+
+<p>Merge color channel components from several video streams.
+</p>
+<p>The filter accepts up to 4 input streams, and merge selected input
+planes to the output video.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mapping</samp>’</dt>
+<dd><p>Set input to output plane mapping. Default is <code>0</code>.
+</p>
+<p>The mappings is specified as a bitmap. It should be specified as a
+hexadecimal number in the form 0xAa[Bb[Cc[Dd]]]. ’Aa’ describes the
+mapping for the first plane of the output stream. ’A’ sets the number of
+the input stream to use (from 0 to 3), and ’a’ the plane number of the
+corresponding input to use (from 0 to 3). The rest of the mappings is
+similar, ’Bb’ describes the mapping for the output stream second
+plane, ’Cc’ describes the mapping for the output stream third plane and
+’Dd’ describes the mapping for the output stream fourth plane.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set output pixel format. Default is <code>yuva444p</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-4"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-4">28.51.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge three gray video streams of same width and height into single video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1][a2]mergeplanes=0x001020:yuv444p
+</pre></td></tr></table>
+
+</li><li>
+Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1]mergeplanes=0x00010210:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap Y and A plane in yuva444p stream:
+<table><tr><td> </td><td><pre class="example">format=yuva444p,mergeplanes=0x03010200:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap U and V plane in yuv420p stream:
+<table><tr><td> </td><td><pre class="example">format=yuv420p,mergeplanes=0x000201:yuv420p
+</pre></td></tr></table>
+
+</li><li>
+Cast a rgb24 clip to yuv444p:
+<table><tr><td> </td><td><pre class="example">format=rgb24,mergeplanes=0x000102:yuv444p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mcdeint"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mcdeint">28.52 mcdeint</a></h2>
+
+<p>Apply motion-compensation deinterlacing.
+</p>
+<p>It needs one field per frame as input and must thus be used together
+with yadif=1/3 or equivalent.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the deinterlacing mode.
+</p>
+<p>It accepts one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dt> ‘<samp>medium</samp>’</dt>
+<dt> ‘<samp>slow</samp>’</dt>
+<dd><p>use iterative motion estimation
+</p></dd>
+<dt> ‘<samp>extra_slow</samp>’</dt>
+<dd><p>like ‘<samp>slow</samp>’, but use multiple reference frames.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>fast</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>Set the picture field parity assumed for the input video. It must be
+one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>bff</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Set per-block quantization parameter (QP) used by the internal
+encoder.
+</p>
+<p>Higher values should result in a smoother motion vector field but less
+optimal individual vectors. Default value is 1.
+</p></dd>
+</dl>
+
+<a name="mp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mp">28.53 mp</a></h2>
+
+<p>Apply an MPlayer filter to the input video.
+</p>
+<p>This filter provides a wrapper around some of the filters of
+MPlayer/MEncoder.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the parameters:
+<var>filter_name</var>[:=]<var>filter_params</var>
+</p>
+<p><var>filter_name</var> is the name of a supported MPlayer filter,
+<var>filter_params</var> is a string containing the parameters accepted by
+the named filter.
+</p>
+<p>The list of the currently supported filters follows:
+</p><dl compact="compact">
+<dt> <var>eq2</var></dt>
+<dt> <var>eq</var></dt>
+<dt> <var>fspp</var></dt>
+<dt> <var>ilpack</var></dt>
+<dt> <var>pp7</var></dt>
+<dt> <var>softpulldown</var></dt>
+<dt> <var>uspp</var></dt>
+</dl>
+
+<p>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.
+</p>
+<a name="Examples-84"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-84">28.53.1 Examples</a></h3>
+
+<ul>
+<li>
+Adjust gamma, brightness, contrast:
+<table><tr><td> </td><td><pre class="example">mp=eq2=1.0:2:0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p>See also mplayer(1), <a href="http://www.mplayerhq.hu/">http://www.mplayerhq.hu/</a>.
+</p>
+<a name="mpdecimate"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mpdecimate">28.54 mpdecimate</a></h2>
+
+<p>Drop frames that do not differ greatly from the previous frame in
+order to reduce frame rate.
+</p>
+<p>The main use of this filter is for very-low-bitrate encoding
+(e.g. streaming over dialup modem), but it could in theory be used for
+fixing movies that were inverse-telecined incorrectly.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum number of consecutive frames which can be dropped (if
+positive), or the minimum interval between dropped frames (if
+negative). If the value is 0, the frame is dropped unregarding the
+number of previous sequentially dropped frames.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dt> ‘<samp>lo</samp>’</dt>
+<dt> ‘<samp>frac</samp>’</dt>
+<dd><p>Set the dropping threshold values.
+</p>
+<p>Values for ‘<samp>hi</samp>’ and ‘<samp>lo</samp>’ are for 8x8 pixel blocks and
+represent actual pixel value differences, so a threshold of 64
+corresponds to 1 unit of difference for each pixel, or the same spread
+out differently over the block.
+</p>
+<p>A frame is a candidate for dropping if no 8x8 blocks differ by more
+than a threshold of ‘<samp>hi</samp>’, and if no more than ‘<samp>frac</samp>’ blocks (1
+meaning the whole image) differ by more than a threshold of ‘<samp>lo</samp>’.
+</p>
+<p>Default value for ‘<samp>hi</samp>’ is 64*12, default value for ‘<samp>lo</samp>’ is
+64*5, and default value for ‘<samp>frac</samp>’ is 0.33.
+</p></dd>
+</dl>
+
+
+<a name="negate"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-negate">28.55 negate</a></h2>
+
+<p>Negate input video.
+</p>
+<p>This filter accepts an integer in input, if non-zero it negates the
+alpha component (if available). The default value in input is 0.
+</p>
+<a name="noformat"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-noformat">28.56 noformat</a></h2>
+
+<p>Force libavfilter not to use any of the specified pixel formats for the
+input to the next filter.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-68"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-68">28.56.1 Examples</a></h3>
+
+<ul>
+<li>
+Force libavfilter to use a format different from <var>yuv420p</var> for the
+input to the vflip filter:
+<table><tr><td> </td><td><pre class="example">noformat=pix_fmts=yuv420p,vflip
+</pre></td></tr></table>
+
+</li><li>
+Convert the input video to any of the formats not contained in the list:
+<table><tr><td> </td><td><pre class="example">noformat=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="noise-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-noise-1">28.57 noise</a></h2>
+
+<p>Add noise on video input frame.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all_seed</samp>’</dt>
+<dt> ‘<samp>c0_seed</samp>’</dt>
+<dt> ‘<samp>c1_seed</samp>’</dt>
+<dt> ‘<samp>c2_seed</samp>’</dt>
+<dt> ‘<samp>c3_seed</samp>’</dt>
+<dd><p>Set noise seed for specific pixel component or all pixel components in case
+of <var>all_seed</var>. Default value is <code>123457</code>.
+</p>
+</dd>
+<dt> ‘<samp>all_strength, alls</samp>’</dt>
+<dt> ‘<samp>c0_strength, c0s</samp>’</dt>
+<dt> ‘<samp>c1_strength, c1s</samp>’</dt>
+<dt> ‘<samp>c2_strength, c2s</samp>’</dt>
+<dt> ‘<samp>c3_strength, c3s</samp>’</dt>
+<dd><p>Set noise strength for specific pixel component or all pixel components in case
+<var>all_strength</var>. Default value is <code>0</code>. Allowed range is [0, 100].
+</p>
+</dd>
+<dt> ‘<samp>all_flags, allf</samp>’</dt>
+<dt> ‘<samp>c0_flags, c0f</samp>’</dt>
+<dt> ‘<samp>c1_flags, c1f</samp>’</dt>
+<dt> ‘<samp>c2_flags, c2f</samp>’</dt>
+<dt> ‘<samp>c3_flags, c3f</samp>’</dt>
+<dd><p>Set pixel component flags or set flags for all components if <var>all_flags</var>.
+Available values for component flags are:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>averaged temporal noise (smoother)
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>mix random noise with a (semi)regular pattern
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>temporal noise (noise pattern changes between frames)
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>uniform noise (gaussian otherwise)
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-80"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-80">28.57.1 Examples</a></h3>
+
+<p>Add temporal and uniform noise to input video:
+</p><table><tr><td> </td><td><pre class="example">noise=alls=20:allf=t+u
+</pre></td></tr></table>
+
+<a name="null"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-null">28.58 null</a></h2>
+
+<p>Pass the video source unchanged to the output.
+</p>
+<a name="ocv"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ocv">28.59 ocv</a></h2>
+
+<p>Apply video transform using libopencv.
+</p>
+<p>To enable this filter install libopencv library and headers and
+configure FFmpeg with <code>--enable-libopencv</code>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name of the libopencv filter to apply.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>The parameters to pass to the libopencv filter. If not specified the default
+values are assumed.
+</p>
+</dd>
+</dl>
+
+<p>Refer to the official libopencv documentation for more precise
+information:
+<a href="http://opencv.willowgarage.com/documentation/c/image_filtering.html">http://opencv.willowgarage.com/documentation/c/image_filtering.html</a>
+</p>
+<p>Follows the list of supported libopencv filters.
+</p>
+<p><a name="dilate"></a>
+</p><a name="dilate-1"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-dilate-1">28.59.1 dilate</a></h3>
+
+<p>Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvDilate</code>.
+</p>
+<p>It accepts the parameters: <var>struct_el</var>|<var>nb_iterations</var>.
+</p>
+<p><var>struct_el</var> represents a structuring element, and has the syntax:
+<var>cols</var>x<var>rows</var>+<var>anchor_x</var>x<var>anchor_y</var>/<var>shape</var>
+</p>
+<p><var>cols</var> and <var>rows</var> represent the number of columns and rows of
+the structuring element, <var>anchor_x</var> and <var>anchor_y</var> the anchor
+point, and <var>shape</var> the shape for the structuring element, and
+can be one of the values "rect", "cross", "ellipse", "custom".
+</p>
+<p>If the value for <var>shape</var> is "custom", it must be followed by a
+string of the form "=<var>filename</var>". The file with name
+<var>filename</var> is assumed to represent a binary image, with each
+printable character corresponding to a bright pixel. When a custom
+<var>shape</var> is used, <var>cols</var> and <var>rows</var> are ignored, the number
+or columns and rows of the read file are assumed instead.
+</p>
+<p>The default value for <var>struct_el</var> is "3x3+0x0/rect".
+</p>
+<p><var>nb_iterations</var> specifies the number of times the transform is
+applied to the image, and defaults to 1.
+</p>
+<p>Follow some example:
+</p><table><tr><td> </td><td><pre class="example"># use the default values
+ocv=dilate
+
+# dilate using a structuring element with a 5x5 cross, iterate two times
+ocv=filter_name=dilate:filter_params=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=dilate:0x0+2x2/custom=diamond.shape|2
+</pre></td></tr></table>
+
+<a name="erode"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-erode">28.59.2 erode</a></h3>
+
+<p>Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvErode</code>.
+</p>
+<p>The filter accepts the parameters: <var>struct_el</var>:<var>nb_iterations</var>,
+with the same syntax and semantics as the <a href="#dilate">dilate</a> filter.
+</p>
+<a name="smooth"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-smooth">28.59.3 smooth</a></h3>
+
+<p>Smooth the input video.
+</p>
+<p>The filter takes the following parameters:
+<var>type</var>|<var>param1</var>|<var>param2</var>|<var>param3</var>|<var>param4</var>.
+</p>
+<p><var>type</var> 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".
+</p>
+<p><var>param1</var>, <var>param2</var>, <var>param3</var>, and <var>param4</var> are
+parameters whose meanings depend on smooth type. <var>param1</var> and
+<var>param2</var> accept integer positive values or 0, <var>param3</var> and
+<var>param4</var> accept float values.
+</p>
+<p>The default value for <var>param1</var> is 3, the default value for the
+other parameters is 0.
+</p>
+<p>These parameters correspond to the parameters assigned to the
+libopencv function <code>cvSmooth</code>.
+</p>
+<p><a name="overlay"></a>
+</p><a name="overlay-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-overlay-1">28.60 overlay</a></h2>
+
+<p>Overlay one video on top of another.
+</p>
+<p>It takes two inputs and one output, the first input is the "main"
+video on which the second input is overlayed.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Set the expression for the x and y coordinates of the overlayed video
+on the main video. Default value is "0" for both expressions. In case
+the expression is invalid, it is set to a huge value (meaning that the
+overlay will not be displayed within the output visible area).
+</p>
+</dd>
+<dt> ‘<samp>eof_action</samp>’</dt>
+<dd><p>The action to take when EOF is encountered on the secondary input, accepts one
+of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>repeat</samp>’</dt>
+<dd><p>repeat the last frame (the default)
+</p></dd>
+<dt> ‘<samp>endall</samp>’</dt>
+<dd><p>end both streams
+</p></dd>
+<dt> ‘<samp>pass</samp>’</dt>
+<dd><p>pass through the main input
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the expressions for ‘<samp>x</samp>’, and ‘<samp>y</samp>’ are evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>only evaluate expressions once during the filter initialization or
+when a command is processed
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expressions for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>frame</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>If set to 1, force the output to terminate when the shortest input
+terminates. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set the format for the output video.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>yuv420</samp>’</dt>
+<dd><p>force YUV420 output
+</p>
+</dd>
+<dt> ‘<samp>yuv422</samp>’</dt>
+<dd><p>force YUV422 output
+</p>
+</dd>
+<dt> ‘<samp>yuv444</samp>’</dt>
+<dd><p>force YUV444 output
+</p>
+</dd>
+<dt> ‘<samp>rgb</samp>’</dt>
+<dd><p>force RGB output
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>yuv420</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>rgb <em>(deprecated)</em></samp>’</dt>
+<dd><p>If set to 1, force the filter to accept inputs in the RGB
+color space. Default value is 0. This option is deprecated, use
+‘<samp>format</samp>’ instead.
+</p>
+</dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>If set to 1, force the filter to draw the last overlay frame over the
+main input until the end of the stream. A value of 0 disables this
+behavior. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The ‘<samp>x</samp>’, and ‘<samp>y</samp>’ expressions can contain the following
+parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>main_w, W</samp>’</dt>
+<dt> ‘<samp>main_h, H</samp>’</dt>
+<dd><p>main input width and height
+</p>
+</dd>
+<dt> ‘<samp>overlay_w, w</samp>’</dt>
+<dt> ‘<samp>overlay_h, h</samp>’</dt>
+<dd><p>overlay input width and height
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values of the output
+format. For example for the pixel format "yuv422p" <var>hsub</var> is 2 and
+<var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>Note that the <var>n</var>, <var>pos</var>, <var>t</var> variables are available only
+when evaluation is done <em>per frame</em>, and will evaluate to NAN
+when ‘<samp>eval</samp>’ is set to ‘<samp>init</samp>’.
+</p>
+<p>Be aware that frames are taken from each input video in timestamp
+order, hence, if their initial timestamps differ, it is a good idea
+to pass the two inputs through a <var>setpts=PTS-STARTPTS</var> filter to
+have them begin in the same zero timestamp, as it does the example for
+the <var>movie</var> filter.
+</p>
+<p>You can chain together more overlays but you should test the
+efficiency of such approach.
+</p>
+<a name="Commands-3"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands-3">28.60.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Modify the x and y of the overlay input.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-5"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-5">28.60.2 Examples</a></h3>
+
+<ul>
+<li>
+Draw the overlay at 10 pixels from the bottom right corner of the main
+video:
+<table><tr><td> </td><td><pre class="example">overlay=main_w-overlay_w-10:main_h-overlay_h-10
+</pre></td></tr></table>
+
+<p>Using named options the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
+</pre></td></tr></table>
+
+</li><li>
+Insert a transparent PNG logo in the bottom left corner of the input,
+using the <code>ffmpeg</code> tool with the <code>-filter_complex</code> option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Insert 2 different transparent PNG logos (second logo on bottom
+right corner) using the <code>ffmpeg</code> tool:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Add a transparent color layer on top of the main video, <code>WxH</code>
+must specify the size of the main input to the overlay filter:
+<table><tr><td> </td><td><pre class="example">color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
+</pre></td></tr></table>
+
+</li><li>
+Play an original video and a filtered version (here with the deshake
+filter) side by side using the <code>ffplay</code> tool:
+<table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
+</pre></td></tr></table>
+
+<p>The above command is the same as:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
+</pre></td></tr></table>
+
+</li><li>
+Make a sliding overlay appearing from the left to the right top part of the
+screen starting since time 2:
+<table><tr><td> </td><td><pre class="example">overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
+</pre></td></tr></table>
+
+</li><li>
+Compose output by putting two input videos side to side:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i left.avi -i right.avi -filter_complex "
+nullsrc=size=200x100 [background];
+[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
+[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
+[background][left] overlay=shortest=1 [background+left];
+[background+left][right] overlay=shortest=1:x=100 [left+right]
+"
+</pre></td></tr></table>
+
+</li><li>
+mask 10-20 seconds of a video by applying the delogo filter to a section
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
+-vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
+masked.avi
+</pre></td></tr></table>
+
+</li><li>
+Chain several overlays in cascade:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=200x200 [bg];
+testsrc=s=100x100, split=4 [in0][in1][in2][in3];
+[in0] lutrgb=r=0, [bg] overlay=0:0 [mid0];
+[in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1];
+[in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2];
+[in3] null, [mid2] overlay=100:100 [out0]
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="owdenoise"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-owdenoise">28.61 owdenoise</a></h2>
+
+<p>Apply Overcomplete Wavelet denoiser.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>depth</samp>’</dt>
+<dd><p>Set depth.
+</p>
+<p>Larger depth values will denoise lower frequency components more, but
+slow down filtering.
+</p>
+<p>Must be an int in the range 8-16, default is <code>8</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p></dd>
+</dl>
+
+<a name="pad"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pad">28.62 pad</a></h2>
+
+<p>Add paddings to the input image, and place the original input at the
+given coordinates <var>x</var>, <var>y</var>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Specify an expression for the size of the output image with the
+paddings added. If the value for <var>width</var> or <var>height</var> is 0, the
+corresponding input size is used for the output.
+</p>
+<p>The <var>width</var> expression can reference the value set by the
+<var>height</var> expression, and vice versa.
+</p>
+<p>The default value of <var>width</var> and <var>height</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify an expression for the offsets where to place the input image
+in the padded area with respect to the top/left border of the output
+image.
+</p>
+<p>The <var>x</var> expression can reference the value set by the <var>y</var>
+expression, and vice versa.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the padded area. For the syntax of this option,
+check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>color</var> is "black".
+</p></dd>
+</dl>
+
+<p>The value for the <var>width</var>, <var>height</var>, <var>x</var>, and <var>y</var>
+options are expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>x and y offsets as specified by the <var>x</var> and <var>y</var>
+expressions, or NAN if not yet specified
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-17"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-17">28.62.1 Examples</a></h3>
+
+<ul>
+<li>
+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:
+<table><tr><td> </td><td><pre class="example">pad=640:480:0:40:violet
+</pre></td></tr></table>
+
+<p>The example above is equivalent to the following command:
+</p><table><tr><td> </td><td><pre class="example">pad=width=640:height=480:x=0:y=40:color=violet
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get an output with dimensions increased by 3/2,
+and put the input video at the center of the padded area:
+<table><tr><td> </td><td><pre class="example">pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get a final w/h ratio of 16:9:
+<table><tr><td> </td><td><pre class="example">pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+In case of anamorphic video, in order to set the output display aspect
+correctly, it is necessary to use <var>sar</var> in the expression,
+according to the relation:
+<table><tr><td> </td><td><pre class="example">(ih * X / ih) * sar = output_dar
+X = output_dar / sar
+</pre></td></tr></table>
+
+<p>Thus the previous example needs to be modified to:
+</p><table><tr><td> </td><td><pre class="example">pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Double output size and put the input video in the bottom-right
+corner of the output padded area:
+<table><tr><td> </td><td><pre class="example">pad="2*iw:2*ih:ow-iw:oh-ih"
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perspective"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-perspective">28.63 perspective</a></h2>
+
+<p>Correct perspective of video not recorded perpendicular to the screen.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>x1</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dt> ‘<samp>x2</samp>’</dt>
+<dt> ‘<samp>y2</samp>’</dt>
+<dt> ‘<samp>x3</samp>’</dt>
+<dt> ‘<samp>y3</samp>’</dt>
+<dd><p>Set coordinates expression for top left, top right, bottom left and bottom right corners.
+Default values are <code>0:0:W:0:0:H:W:H</code> with which perspective will remain unchanged.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of video frame.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>interpolation</samp>’</dt>
+<dd><p>Set interpolation for perspective correction.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>linear</samp>’</dt>
+<dt> ‘<samp>cubic</samp>’</dt>
+</dl>
+
+<p>Default value is ‘<samp>linear</samp>’.
+</p></dd>
+</dl>
+
+<a name="phase"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-phase">28.64 phase</a></h2>
+
+<p>Delay interlaced video by one field time so that the field order changes.
+</p>
+<p>The intended use is to fix PAL movies that have been captured with the
+opposite field order to the film-to-video transfer.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set phase mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>Capture field order top-first, transfer bottom-first.
+Filter will delay the bottom field.
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Capture field order bottom-first, transfer top-first.
+Filter will delay the top field.
+</p>
+</dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>Capture and transfer with the same field order. This mode only exists
+for the documentation of the other options to refer to, but if you
+actually select it, the filter will faithfully do nothing.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Capture field order determined automatically by field flags, transfer
+opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ modes on a frame by frame
+basis using field flags. If no field information is available,
+then this works just like ‘<samp>u</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Capture unknown or varying, transfer opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ on a frame by frame basis by
+analyzing the images and selecting the alternative that produces best
+match between the fields.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Capture top-first, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>B</samp>’</dt>
+<dd><p>Capture bottom-first, transfer unknown or varying.
+Filter selects among ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>A</samp>’</dt>
+<dd><p>Capture determined by field flags, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using field flags and
+image analysis. If no field information is available, then this works just
+like ‘<samp>U</samp>’. This is the default mode.
+</p>
+</dd>
+<dt> ‘<samp>U</samp>’</dt>
+<dd><p>Both capture and transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis only.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="pixdesctest"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pixdesctest">28.65 pixdesctest</a></h2>
+
+<p>Pixel format descriptor test filter, mainly useful for internal
+testing. The output video should be equal to the input video.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">format=monow, pixdesctest
+</pre></td></tr></table>
+
+<p>can be used to test the monowhite pixel format descriptor definition.
+</p>
+<a name="pp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pp">28.66 pp</a></h2>
+
+<p>Enable the specified chain of postprocessing subfilters using libpostproc. This
+library should be automatically selected with a GPL build (<code>--enable-gpl</code>).
+Subfilters must be separated by ’/’ and can be disabled by prepending a ’-’.
+Each subfilter and some options have a short and a long name that can be used
+interchangeably, i.e. dr/dering are the same.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>subfilters</samp>’</dt>
+<dd><p>Set postprocessing subfilters string.
+</p></dd>
+</dl>
+
+<p>All subfilters share common options to determine their scope:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a/autoq</samp>’</dt>
+<dd><p>Honor the quality commands for this subfilter.
+</p>
+</dd>
+<dt> ‘<samp>c/chrom</samp>’</dt>
+<dd><p>Do chrominance filtering, too (default).
+</p>
+</dd>
+<dt> ‘<samp>y/nochrom</samp>’</dt>
+<dd><p>Do luminance filtering only (no chrominance).
+</p>
+</dd>
+<dt> ‘<samp>n/noluma</samp>’</dt>
+<dd><p>Do chrominance filtering only (no luminance).
+</p></dd>
+</dl>
+
+<p>These options can be appended after the subfilter name, separated by a ’|’.
+</p>
+<p>Available subfilters are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hb/hdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vb/vdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ha/hadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>va/vadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>The horizontal and vertical deblocking filters share the difference and
+flatness values so you cannot set different horizontal and vertical
+thresholds.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h1/x1hdeblock</samp>’</dt>
+<dd><p>Experimental horizontal deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>v1/x1vdeblock</samp>’</dt>
+<dd><p>Experimental vertical deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>dr/dering</samp>’</dt>
+<dd><p>Deringing filter
+</p>
+</dd>
+<dt> ‘<samp>tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>threshold1</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold2</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold3</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>al/autolevels[:f/fullyrange], automatic brightness / contrast correction</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>f/fullyrange</samp>’</dt>
+<dd><p>Stretch luminance to <code>0-255</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lb/linblenddeint</samp>’</dt>
+<dd><p>Linear blend deinterlacing filter that deinterlaces the given block by
+filtering all lines with a <code>(1 2 1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>li/linipoldeint</samp>’</dt>
+<dd><p>Linear interpolating deinterlacing filter that deinterlaces the given block by
+linearly interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>ci/cubicipoldeint</samp>’</dt>
+<dd><p>Cubic interpolating deinterlacing filter deinterlaces the given block by
+cubically interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>md/mediandeint</samp>’</dt>
+<dd><p>Median deinterlacing filter that deinterlaces the given block by applying a
+median filter to every second line.
+</p>
+</dd>
+<dt> ‘<samp>fd/ffmpegdeint</samp>’</dt>
+<dd><p>FFmpeg deinterlacing filter that deinterlaces the given block by filtering every
+second line with a <code>(-1 4 2 4 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>l5/lowpass5</samp>’</dt>
+<dd><p>Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
+block by filtering all lines with a <code>(-1 2 6 2 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>fq/forceQuant[|quantizer]</samp>’</dt>
+<dd><p>Overrides the quantizer table from the input with the constant quantizer you
+specify.
+</p><dl compact="compact">
+<dt> ‘<samp>quantizer</samp>’</dt>
+<dd><p>Quantizer to use
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>de/default</samp>’</dt>
+<dd><p>Default pp filter combination (<code>hb|a,vb|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>fa/fast</samp>’</dt>
+<dd><p>Fast pp filter combination (<code>h1|a,v1|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>High quality pp filter combination (<code>ha|a|128|7,va|a,dr|a</code>)
+</p></dd>
+</dl>
+
+<a name="Examples-48"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-48">28.66.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply horizontal and vertical deblocking, deringing and automatic
+brightness/contrast:
+<table><tr><td> </td><td><pre class="example">pp=hb/vb/dr/al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters without brightness/contrast correction:
+<table><tr><td> </td><td><pre class="example">pp=de/-al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters and temporal denoiser:
+<table><tr><td> </td><td><pre class="example">pp=default/tmpnoise|1|2|3
+</pre></td></tr></table>
+
+</li><li>
+Apply deblocking on luminance only, and switch vertical deblocking on or off
+automatically depending on available CPU time:
+<table><tr><td> </td><td><pre class="example">pp=hb|y/vb|a
+</pre></td></tr></table>
+</li></ul>
+
+<a name="psnr"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-psnr">28.67 psnr</a></h2>
+
+<p>Obtain the average, maximum and minimum PSNR (Peak Signal to Noise
+Ratio) between two input videos.
+</p>
+<p>This filter takes in input two input videos, the first input is
+considered the "main" source and is passed unchanged to the
+output. The second input is used as a "reference" video for computing
+the PSNR.
+</p>
+<p>Both video inputs must have the same resolution and pixel format for
+this filter to work correctly. Also it assumes that both inputs
+have the same number of frames, which are compared one by one.
+</p>
+<p>The obtained average PSNR is printed through the logging system.
+</p>
+<p>The filter stores the accumulated MSE (mean squared error) of each
+frame, and at the end of the processing it is averaged across all frames
+equally, and the following formula is applied to obtain the PSNR:
+</p>
+<table><tr><td> </td><td><pre class="example">PSNR = 10*log10(MAX^2/MSE)
+</pre></td></tr></table>
+
+<p>Where MAX is the average of the maximum values of each component of the
+image.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>stats_file, f</samp>’</dt>
+<dd><p>If specified the filter will use the named file to save the PSNR of
+each individual frame.
+</p></dd>
+</dl>
+
+<p>The file printed if <var>stats_file</var> is selected, contains a sequence of
+key/value pairs of the form <var>key</var>:<var>value</var> for each compared
+couple of frames.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 1
+</p>
+</dd>
+<dt> ‘<samp>mse_avg</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames, averaged over all the image components.
+</p>
+</dd>
+<dt> ‘<samp>mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames for the component specified by the suffix.
+</p>
+</dd>
+<dt> ‘<samp>psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a</samp>’</dt>
+<dd><p>Peak Signal to Noise ratio of the compared frames for the component
+specified by the suffix.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
+[main][ref] psnr="stats_file=stats.log" [out]
+</pre></td></tr></table>
+
+<p>On this example the input file being processed is compared with the
+reference file ‘<tt>ref_movie.mpg</tt>’. The PSNR of each individual frame
+is stored in ‘<tt>stats.log</tt>’.
+</p>
+<p><a name="pullup"></a>
+</p><a name="pullup-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-pullup-1">28.68 pullup</a></h2>
+
+<p>Pulldown reversal (inverse telecine) filter, capable of handling mixed
+hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive
+content.
+</p>
+<p>The pullup filter is designed to take advantage of future context in making
+its decisions. This filter is stateless in the sense that it does not lock
+onto a pattern to follow, but it instead looks forward to the following
+fields in order to identify matches and rebuild progressive frames.
+</p>
+<p>To produce content with an even framerate, insert the fps filter after
+pullup, use <code>fps=24000/1001</code> if the input frame rate is 29.97fps,
+<code>fps=24</code> for 30fps and the (rare) telecined 25fps input.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>jl</samp>’</dt>
+<dt> ‘<samp>jr</samp>’</dt>
+<dt> ‘<samp>jt</samp>’</dt>
+<dt> ‘<samp>jb</samp>’</dt>
+<dd><p>These options set the amount of "junk" to ignore at the left, right, top, and
+bottom of the image, respectively. Left and right are in units of 8 pixels,
+while top and bottom are in units of 2 lines.
+The default is 8 pixels on each side.
+</p>
+</dd>
+<dt> ‘<samp>sb</samp>’</dt>
+<dd><p>Set the strict breaks. Setting this option to 1 will reduce the chances of
+filter generating an occasional mismatched frame, but it may also cause an
+excessive number of frames to be dropped during high motion sequences.
+Conversely, setting it to -1 will make filter match fields more easily.
+This may help processing of video where there is slight blurring between
+the fields, but may also cause there to be interlaced frames in the output.
+Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mp</samp>’</dt>
+<dd><p>Set the metric plane to use. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>Use luma plane.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Use chroma blue plane.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Use chroma red plane.
+</p></dd>
+</dl>
+
+<p>This option may be set to use chroma plane instead of the default luma plane
+for doing filter’s computations. This may improve accuracy on very clean
+source material, but more likely will decrease accuracy, especially if there
+is chroma noise (rainbow effect) or any grayscale video.
+The main purpose of setting ‘<samp>mp</samp>’ to a chroma plane is to reduce CPU
+load and make pullup usable in realtime on slow machines.
+</p></dd>
+</dl>
+
+<p>For best results (without duplicated frames in the output file) it is
+necessary to change the output frame rate. For example, to inverse
+telecine NTSC input:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf pullup -r 24000/1001 ...
+</pre></td></tr></table>
+
+<a name="removelogo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-removelogo">28.69 removelogo</a></h2>
+
+<p>Suppress a TV station logo, using an image file to determine which
+pixels comprise the logo. It works by filling in the pixels that
+comprise the logo with neighboring pixels.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filter bitmap file, which can be any image format supported by
+libavformat. The width and height of the image file must match those of the
+video stream being processed.
+</p></dd>
+</dl>
+
+<p>Pixels in the provided bitmap image with a value of zero are not
+considered part of the logo, non-zero pixels are considered part of
+the logo. If you use white (255) for the logo and black (0) for the
+rest, you will be safe. For making the filter bitmap, it is
+recommended to take a screen capture of a black frame with the logo
+visible, and then using a threshold filter followed by the erode
+filter once or twice.
+</p>
+<p>If needed, little splotches can be fixed manually. Remember that if
+logo pixels are not covered, the filter quality will be much
+reduced. Marking too many pixels as part of the logo does not hurt as
+much, but it will increase the amount of blurring needed to cover over
+the image and will destroy more information than necessary, and extra
+pixels will slow things down on a large logo.
+</p>
+<a name="rotate"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-rotate">28.70 rotate</a></h2>
+
+<p>Rotate video by an arbitrary angle expressed in radians.
+</p>
+<p>The filter accepts the following options:
+</p>
+<p>A description of the optional parameters follows.
+</p><dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set an expression for the angle by which to rotate the input video
+clockwise, expressed as a number of radians. A negative value will
+result in a counter-clockwise rotation. By default it is set to "0".
+</p>
+<p>This expression is evaluated for each frame.
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dd><p>Set the output width expression, default value is "iw".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>Set the output height expression, default value is "ih".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Enable bilinear interpolation if set to 1, a value of 0 disables
+it. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>fillcolor, c</samp>’</dt>
+<dd><p>Set the color used to fill the output area not covered by the rotated
+image. For the generalsyntax of this option, check the "Color" section in the
+ffmpeg-utils manual. If the special value "none" is selected then no
+background is printed (useful for example if the background is never shown).
+</p>
+<p>Default value is "black".
+</p></dd>
+</dl>
+
+<p>The expressions for the angle and the output size can contain the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0. It is always NAN
+before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time in seconds of the input frame, it is set to 0 when the filter is
+configured. It is always NAN before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>rotw(a)</samp>’</dt>
+<dt> ‘<samp>roth(a)</samp>’</dt>
+<dd><p>the minimal width/height required for completely containing the input
+video rotated by <var>a</var> radians.
+</p>
+<p>These are only available when computing the ‘<samp>out_w</samp>’ and
+‘<samp>out_h</samp>’ expressions.
+</p></dd>
+</dl>
+
+<a name="Examples-65"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-65">28.70.1 Examples</a></h3>
+
+<ul>
+<li>
+Rotate the input by PI/6 radians clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by PI/6 radians counter-clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=-PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by 45 degrees clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=45*PI/180
+</pre></td></tr></table>
+
+</li><li>
+Apply a constant rotation with period T, starting from an angle of PI/3:
+<table><tr><td> </td><td><pre class="example">rotate=PI/3+2*PI*t/T
+</pre></td></tr></table>
+
+</li><li>
+Make the input video rotation oscillating with a period of T
+seconds and an amplitude of A radians:
+<table><tr><td> </td><td><pre class="example">rotate=A*sin(2*PI/T*t)
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, output size is chosen so that the whole rotating
+input video is always completely contained in the output:
+<table><tr><td> </td><td><pre class="example">rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, reduce the output size so that no background is ever
+shown:
+<table><tr><td> </td><td><pre class="example">rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands">28.70.2 Commands</a></h3>
+
+<p>The filter supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a, angle</samp>’</dt>
+<dd><p>Set the angle expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="sab"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sab">28.71 sab</a></h2>
+
+<p>Apply Shape Adaptive Blur.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set luma blur filter strength, must be a value in range 0.1-4.0, default
+value is 1.0. A greater value will result in a more blurred image, and
+in slower processing.
+</p>
+</dd>
+<dt> ‘<samp>luma_pre_filter_radius, lpfr</samp>’</dt>
+<dd><p>Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default
+value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma maximum difference between pixels to still be considered, must
+be a value in the 0.1-100.0 range, default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set chroma blur filter strength, must be a value in range 0.1-4.0. A
+greater value will result in a more blurred image, and in slower
+processing.
+</p>
+</dd>
+<dt> ‘<samp>chroma_pre_filter_radius, cpfr</samp>’</dt>
+<dd><p>Set chroma pre-filter radius, must be a value in the 0.1-2.0 range.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma maximum difference between pixels to still be considered,
+must be a value in the 0.1-100.0 range.
+</p></dd>
+</dl>
+
+<p>Each chroma option value, if not explicitly specified, is set to the
+corresponding luma option value.
+</p>
+<p><a name="scale"></a>
+</p><a name="scale-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-scale-1">28.72 scale</a></h2>
+
+<p>Scale (resize) the input video, using the libswscale library.
+</p>
+<p>The scale filter forces the output display aspect ratio to be the same
+of the input, by changing the output sample aspect ratio.
+</p>
+<p>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.
+</p>
+<a name="Options-6"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-6">28.72.1 Options</a></h3>
+<p>The filter accepts the following options, or any of the options
+supported by the libswscale scaler.
+</p>
+<p>See <a href="ffmpeg-scaler.html#scaler_005foptions">(ffmpeg-scaler)scaler_options</a> for
+the complete list of scaler options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Set the output video dimension expression. Default value is the input
+dimension.
+</p>
+<p>If the value is 0, the input width is used for the output.
+</p>
+<p>If one of the values is -1, the scale filter will use a value that
+maintains the aspect ratio of the input image, calculated from the
+other specified dimension. If both of them are -1, the input size is
+used
+</p>
+<p>If one of the values is -n with n > 1, the scale filter will also use a value
+that maintains the aspect ratio of the input image, calculated from the other
+specified dimension. After that it will, however, make sure that the calculated
+dimension is divisible by n and adjust the value if necessary.
+</p>
+<p>See below for the list of accepted constants for use in the dimension
+expression.
+</p>
+</dd>
+<dt> ‘<samp>interl</samp>’</dt>
+<dd><p>Set the interlacing mode. It accepts the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Force interlaced aware scaling.
+</p>
+</dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>Do not apply interlaced scaling.
+</p>
+</dd>
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>Select interlaced aware scaling depending on whether the source frames
+are flagged as interlaced or not.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>0</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set libswscale scaling flags. See
+<a href="ffmpeg-scaler.html#sws_005fflags">(ffmpeg-scaler)sws_flags</a> for the
+complete list of values. If not explicitly specified the filter applies
+the default flags.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>in_color_matrix</samp>’</dt>
+<dt> ‘<samp>out_color_matrix</samp>’</dt>
+<dd><p>Set in/output YCbCr color space type.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder.
+</p>
+<p>If not specified, the color space type depends on the pixel format.
+</p>
+<p>Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>Format conforming to International Telecommunication Union (ITU)
+Recommendation BT.709.
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>Set color space conforming to the United States Federal Communications
+Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a).
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>Set color space conforming to:
+</p>
+<ul>
+<li>
+ITU Radiocommunication Sector (ITU-R) Recommendation BT.601
+
+</li><li>
+ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G
+
+</li><li>
+Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004
+
+</li></ul>
+
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>Set color space conforming to SMPTE ST 240:1999.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>in_range</samp>’</dt>
+<dt> ‘<samp>out_range</samp>’</dt>
+<dd><p>Set in/output YCbCr sample range.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder. If not specified, the
+range depends on the pixel format. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>jpeg/full/pc</samp>’</dt>
+<dd><p>Set full range (0-255 in case of 8-bit luma).
+</p>
+</dd>
+<dt> ‘<samp>mpeg/tv</samp>’</dt>
+<dd><p>Set "MPEG" range (16-235 in case of 8-bit luma).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>force_original_aspect_ratio</samp>’</dt>
+<dd><p>Enable decreasing or increasing output video width or height if necessary to
+keep the original aspect ratio. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>disable</samp>’</dt>
+<dd><p>Scale the video as specified and disable this feature.
+</p>
+</dd>
+<dt> ‘<samp>decrease</samp>’</dt>
+<dd><p>The output video dimensions will automatically be decreased if needed.
+</p>
+</dd>
+<dt> ‘<samp>increase</samp>’</dt>
+<dd><p>The output video dimensions will automatically be increased if needed.
+</p>
+</dd>
+</dl>
+
+<p>One useful instance of this option is that when you know a specific device’s
+maximum allowed resolution, you can use this to limit the output video to
+that, while retaining the aspect ratio. For example, device A allows
+1280x720 playback, and your video is 1920x800. Using this option (set it to
+decrease) and specifying 1280x720 to the command line makes the output
+1280x533.
+</p>
+<p>Please note that this is a different thing than specifying -1 for ‘<samp>w</samp>’
+or ‘<samp>h</samp>’, you still need to specify the output resolution for this option
+to work.
+</p>
+</dd>
+</dl>
+
+<p>The values of the ‘<samp>w</samp>’ and ‘<samp>h</samp>’ options are expressions
+containing the following constants:
+</p>
+<dl compact="compact">
+<dt> <var>in_w</var></dt>
+<dt> <var>in_h</var></dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> <var>iw</var></dt>
+<dt> <var>ih</var></dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> <var>out_w</var></dt>
+<dt> <var>out_h</var></dt>
+<dd><p>the output (scaled) width and height
+</p>
+</dd>
+<dt> <var>ow</var></dt>
+<dt> <var>oh</var></dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> <var>a</var></dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> <var>sar</var></dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> <var>dar</var></dt>
+<dd><p>input display aspect ratio. Calculated from <code>(iw / ih) * sar</code>.
+</p>
+</dd>
+<dt> <var>hsub</var></dt>
+<dt> <var>vsub</var></dt>
+<dd><p>horizontal and vertical input chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> <var>ohsub</var></dt>
+<dt> <var>ovsub</var></dt>
+<dd><p>horizontal and vertical output chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-18"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-18">28.72.2 Examples</a></h3>
+
+<ul>
+<li>
+Scale the input video to a size of 200x100:
+<table><tr><td> </td><td><pre class="example">scale=w=200:h=100
+</pre></td></tr></table>
+
+<p>This is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">scale=200:100
+</pre></td></tr></table>
+
+<p>or:
+</p><table><tr><td> </td><td><pre class="example">scale=200x100
+</pre></td></tr></table>
+
+</li><li>
+Specify a size abbreviation for the output size:
+<table><tr><td> </td><td><pre class="example">scale=qcif
+</pre></td></tr></table>
+
+<p>which can also be written as:
+</p><table><tr><td> </td><td><pre class="example">scale=size=qcif
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x:
+<table><tr><td> </td><td><pre class="example">scale=w=2*iw:h=2*ih
+</pre></td></tr></table>
+
+</li><li>
+The above is the same as:
+<table><tr><td> </td><td><pre class="example">scale=2*in_w:2*in_h
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x with forced interlaced scaling:
+<table><tr><td> </td><td><pre class="example">scale=2*iw:2*ih:interl=1
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to half size:
+<table><tr><td> </td><td><pre class="example">scale=w=iw/2:h=ih/2
+</pre></td></tr></table>
+
+</li><li>
+Increase the width, and set the height to the same size:
+<table><tr><td> </td><td><pre class="example">scale=3/2*iw:ow
+</pre></td></tr></table>
+
+</li><li>
+Seek for Greek harmony:
+<table><tr><td> </td><td><pre class="example">scale=iw:1/PHI*iw
+scale=ih*PHI:ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the height, and set the width to 3/2 of the height:
+<table><tr><td> </td><td><pre class="example">scale=w=3/2*oh:h=3/5*ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the size, but make the size a multiple of the chroma
+subsample values:
+<table><tr><td> </td><td><pre class="example">scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
+</pre></td></tr></table>
+
+</li><li>
+Increase the width to a maximum of 500 pixels, keep the same input
+aspect ratio:
+<table><tr><td> </td><td><pre class="example">scale=w='min(500\, iw*3/2):h=-1'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="separatefields"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-separatefields">28.73 separatefields</a></h2>
+
+<p>The <code>separatefields</code> takes a frame-based video input and splits
+each frame into its components fields, producing a new half height clip
+with twice the frame rate and twice the frame count.
+</p>
+<p>This filter use field-dominance information in frame to decide which
+of each pair of fields to place first in the output.
+If it gets it wrong use <a href="#setfield">setfield</a> filter before <code>separatefields</code> filter.
+</p>
+<a name="setdar_002c-setsar"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-setdar_002c-setsar">28.74 setdar, setsar</a></h2>
+
+<p>The <code>setdar</code> filter sets the Display Aspect Ratio for the filter
+output video.
+</p>
+<p>This is done by changing the specified Sample (aka Pixel) Aspect
+Ratio, according to the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>DAR</var> = <var>HORIZONTAL_RESOLUTION</var> / <var>VERTICAL_RESOLUTION</var> * <var>SAR</var>
+</pre></td></tr></table>
+
+<p>Keep in mind that the <code>setdar</code> 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.
+</p>
+<p>The <code>setsar</code> filter sets the Sample (aka Pixel) Aspect Ratio for
+the filter output video.
+</p>
+<p>Note that as a consequence of the application of this filter, the
+output display aspect ratio will change according to the equation
+above.
+</p>
+<p>Keep in mind that the sample aspect ratio set by the <code>setsar</code>
+filter may be changed by later filters in the filterchain, e.g. if
+another "setsar" or a "setdar" filter is applied.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>r, ratio, dar (<code>setdar</code> only), sar (<code>setsar</code> only)</samp>’</dt>
+<dd><p>Set the aspect ratio used by the filter.
+</p>
+<p>The parameter can be a floating point number string, an expression, or
+a string of the form <var>num</var>:<var>den</var>, where <var>num</var> and
+<var>den</var> are the numerator and denominator of the aspect ratio. If
+the parameter is not specified, it is assumed the value "0".
+In case the form "<var>num</var>:<var>den</var>" is used, the <code>:</code> character
+should be escaped.
+</p>
+</dd>
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum integer value to use for expressing numerator and
+denominator when reducing the expressed aspect ratio to a rational.
+Default value is <code>100</code>.
+</p>
+</dd>
+</dl>
+
+<p>The parameter <var>sar</var> is an expression containing
+the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>E, PI, PHI</samp>’</dt>
+<dd><p>the corresponding mathematical approximated values for e
+(euler number), pi (greek PI), phi (golden ratio)
+</p>
+</dd>
+<dt> ‘<samp>w, h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>w</var> / <var>h</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub, vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-76"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-76">28.74.1 Examples</a></h3>
+
+<ul>
+<li>
+To change the display aspect ratio to 16:9, specify one of the following:
+<table><tr><td> </td><td><pre class="example">setdar=dar=1.77777
+setdar=dar=16/9
+setdar=dar=1.77777
+</pre></td></tr></table>
+
+</li><li>
+To change the sample aspect ratio to 10:11, specify:
+<table><tr><td> </td><td><pre class="example">setsar=sar=10/11
+</pre></td></tr></table>
+
+</li><li>
+To set a display aspect ratio of 16:9, and specify a maximum integer value of
+1000 in the aspect ratio reduction, use the command:
+<table><tr><td> </td><td><pre class="example">setdar=ratio=16/9:max=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="setfield"></a>
+</p><a name="setfield-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-setfield-1">28.75 setfield</a></h2>
+
+<p>Force field for the output video frame.
+</p>
+<p>The <code>setfield</code> filter marks the interlace type field for the
+output frames. It does not change the input frame, but only sets the
+corresponding property, which affects how the frame is treated by
+following filters (e.g. <code>fieldorder</code> or <code>yadif</code>).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Keep the same field property.
+</p>
+</dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Mark the frame as bottom-field-first.
+</p>
+</dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Mark the frame as top-field-first.
+</p>
+</dd>
+<dt> ‘<samp>prog</samp>’</dt>
+<dd><p>Mark the frame as progressive.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="showinfo"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-showinfo">28.76 showinfo</a></h2>
+
+<p>Show a line containing various information for each input video frame.
+The input video is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+time base units. The time base unit depends on the filter input pad.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>pixel format name
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>sample aspect ratio of the input frame, expressed in the form
+<var>num</var>/<var>den</var>
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>size of the input frame. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>i</samp>’</dt>
+<dd><p>interlaced mode ("P" for "progressive", "T" for top field first, "B"
+for bottom field first)
+</p>
+</dd>
+<dt> ‘<samp>iskey</samp>’</dt>
+<dd><p>1 if the frame is a key frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>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 <code>AVPictureType</code> enum and of
+the <code>av_get_picture_type_char</code> function defined in
+‘<tt>libavutil/avutil.h</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame
+</p>
+</dd>
+<dt> ‘<samp>plane_checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of each plane of the input frame,
+expressed in the form "[<var>c0</var> <var>c1</var> <var>c2</var> <var>c3</var>]"
+</p></dd>
+</dl>
+
+<p><a name="smartblur"></a>
+</p><a name="smartblur-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-smartblur-1">28.77 smartblur</a></h2>
+
+<p>Blur the input video without impacting the outlines.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set the luma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set the luma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_threshold, lt</samp>’</dt>
+<dd><p>Set the luma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set the chroma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set the chroma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_threshold, ct</samp>’</dt>
+<dd><p>Set the chroma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p></dd>
+</dl>
+
+<p>If a chroma option is not explicitly set, the corresponding luma value
+is set.
+</p>
+<a name="stereo3d"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-stereo3d">28.78 stereo3d</a></h2>
+
+<p>Convert between different stereoscopic image formats.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in</samp>’</dt>
+<dd><p>Set stereoscopic image format of input.
+</p>
+<p>Available values for input image formats are:
+</p><dl compact="compact">
+<dt> ‘<samp>sbsl</samp>’</dt>
+<dd><p>side by side parallel (left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbsr</samp>’</dt>
+<dd><p>side by side crosseye (right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2l</samp>’</dt>
+<dd><p>side by side parallel with half width resolution
+(left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2r</samp>’</dt>
+<dd><p>side by side crosseye with half width resolution
+(right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>abl</samp>’</dt>
+<dd><p>above-below (left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>abr</samp>’</dt>
+<dd><p>above-below (right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2l</samp>’</dt>
+<dd><p>above-below with half height resolution
+(left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2r</samp>’</dt>
+<dd><p>above-below with half height resolution
+(right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>al</samp>’</dt>
+<dd><p>alternating frames (left eye first, right eye second)
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dd><p>alternating frames (right eye first, left eye second)
+</p>
+<p>Default value is ‘<samp>sbsl</samp>’.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>out</samp>’</dt>
+<dd><p>Set stereoscopic image format of output.
+</p>
+<p>Available values for output image formats are all the input formats as well as:
+</p><dl compact="compact">
+<dt> ‘<samp>arbg</samp>’</dt>
+<dd><p>anaglyph red/blue gray
+(red filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>argg</samp>’</dt>
+<dd><p>anaglyph red/green gray
+(red filter on left eye, green filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcg</samp>’</dt>
+<dd><p>anaglyph red/cyan gray
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arch</samp>’</dt>
+<dd><p>anaglyph red/cyan half colored
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcc</samp>’</dt>
+<dd><p>anaglyph red/cyan color
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcd</samp>’</dt>
+<dd><p>anaglyph red/cyan color optimized with the least squares projection of dubois
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmg</samp>’</dt>
+<dd><p>anaglyph green/magenta gray
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmh</samp>’</dt>
+<dd><p>anaglyph green/magenta half colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmc</samp>’</dt>
+<dd><p>anaglyph green/magenta colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmd</samp>’</dt>
+<dd><p>anaglyph green/magenta color optimized with the least squares projection of dubois
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybg</samp>’</dt>
+<dd><p>anaglyph yellow/blue gray
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybh</samp>’</dt>
+<dd><p>anaglyph yellow/blue half colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybc</samp>’</dt>
+<dd><p>anaglyph yellow/blue colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybd</samp>’</dt>
+<dd><p>anaglyph yellow/blue color optimized with the least squares projection of dubois
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>irl</samp>’</dt>
+<dd><p>interleaved rows (left eye has top row, right eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>irr</samp>’</dt>
+<dd><p>interleaved rows (right eye has top row, left eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>ml</samp>’</dt>
+<dd><p>mono output (left eye only)
+</p>
+</dd>
+<dt> ‘<samp>mr</samp>’</dt>
+<dd><p>mono output (right eye only)
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>arcd</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-64"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-64">28.78.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input video from side by side parallel to anaglyph yellow/blue dubois:
+<table><tr><td> </td><td><pre class="example">stereo3d=sbsl:aybd
+</pre></td></tr></table>
+
+</li><li>
+Convert input video from above bellow (left eye above, right eye below) to side by side crosseye.
+<table><tr><td> </td><td><pre class="example">stereo3d=abl:sbsr
+</pre></td></tr></table>
+</li></ul>
+
+<a name="spp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-spp">28.79 spp</a></h2>
+
+<p>Apply a simple postprocessing filter that compresses and decompresses the image
+at several (or - in the case of ‘<samp>quality</samp>’ level <code>6</code> - all) shifts
+and average the results.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>quality</samp>’</dt>
+<dd><p>Set quality. This option defines the number of levels for averaging. It accepts
+an integer in the range 0-6. If set to <code>0</code>, the filter will have no
+effect. A value of <code>6</code> means the higher quality. For each increment of
+that value the speed drops by a factor of approximately 2. Default value is
+<code>3</code>.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Force a constant quantization parameter. If not set, the filter will use the QP
+from the video stream (if available).
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set thresholding mode. Available modes are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hard</samp>’</dt>
+<dd><p>Set hard thresholding (default).
+</p></dd>
+<dt> ‘<samp>soft</samp>’</dt>
+<dd><p>Set soft thresholding (better de-ringing effect, but likely blurrier).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_bframe_qp</samp>’</dt>
+<dd><p>Enable the use of the QP from the B-Frames if set to <code>1</code>. Using this
+option may cause flicker since the B-Frames have often larger QP. Default is
+<code>0</code> (not enabled).
+</p></dd>
+</dl>
+
+<p><a name="subtitles"></a>
+</p><a name="subtitles-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-subtitles-1">28.80 subtitles</a></h2>
+
+<p>Draw subtitles on top of input video using the libass library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libass</code>. This filter also requires a build with libavcodec and
+libavformat to convert the passed subtitles file to ASS (Advanced Substation
+Alpha) subtitles format.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the subtitle file to read. It must be specified.
+</p>
+</dd>
+<dt> ‘<samp>original_size</samp>’</dt>
+<dd><p>Specify the size of the original video, the video for which the ASS file
+was composed. For the syntax of this option, check the "Video size" section in
+the ffmpeg-utils manual. Due to a misdesign in ASS aspect ratio arithmetic,
+this is necessary to correctly scale the fonts if the aspect ratio has been
+changed.
+</p>
+</dd>
+<dt> ‘<samp>charenc</samp>’</dt>
+<dd><p>Set subtitles input character encoding. <code>subtitles</code> filter only. Only
+useful if not UTF-8.
+</p></dd>
+</dl>
+
+<p>If the first key is not specified, it is assumed that the first value
+specifies the ‘<samp>filename</samp>’.
+</p>
+<p>For example, to render the file ‘<tt>sub.srt</tt>’ on top of the input
+video, use the command:
+</p><table><tr><td> </td><td><pre class="example">subtitles=sub.srt
+</pre></td></tr></table>
+
+<p>which is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">subtitles=filename=sub.srt
+</pre></td></tr></table>
+
+<a name="super2xsai"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-super2xsai">28.81 super2xsai</a></h2>
+
+<p>Scale the input by 2x and smooth using the Super2xSaI (Scale and
+Interpolate) pixel art scaling algorithm.
+</p>
+<p>Useful for enlarging pixel art images without reducing sharpness.
+</p>
+<a name="swapuv"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-swapuv">28.82 swapuv</a></h2>
+<p>Swap U & V plane.
+</p>
+<a name="telecine"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-telecine">28.83 telecine</a></h2>
+
+<p>Apply telecine process to the video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>first_field</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>top, t</samp>’</dt>
+<dd><p>top field first
+</p></dd>
+<dt> ‘<samp>bottom, b</samp>’</dt>
+<dd><p>bottom field first
+The default value is <code>top</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>pattern</samp>’</dt>
+<dd><p>A string of numbers representing the pulldown pattern you wish to apply.
+The default value is <code>23</code>.
+</p></dd>
+</dl>
+
+<table><tr><td> </td><td><pre class="example">Some typical patterns:
+
+NTSC output (30i):
+27.5p: 32222
+24p: 23 (classic)
+24p: 2332 (preferred)
+20p: 33
+18p: 334
+16p: 3444
+
+PAL output (25i):
+27.5p: 12222
+24p: 222222222223 ("Euro pulldown")
+16.67p: 33
+16p: 33333334
+</pre></td></tr></table>
+
+<a name="thumbnail"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-thumbnail">28.84 thumbnail</a></h2>
+<p>Select the most representative frame in a given sequence of consecutive frames.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the frames batch size to analyze; in a set of <var>n</var> frames, the filter
+will pick one of them, and then handle the next batch of <var>n</var> frames until
+the end. Default is <code>100</code>.
+</p></dd>
+</dl>
+
+<p>Since the filter keeps track of the whole frames sequence, a bigger <var>n</var>
+value will result in a higher memory usage, so a high value is not recommended.
+</p>
+<a name="Examples-54"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-54">28.84.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract one picture each 50 frames:
+<table><tr><td> </td><td><pre class="example">thumbnail=50
+</pre></td></tr></table>
+
+</li><li>
+Complete example of a thumbnail creation with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tile"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-tile">28.85 tile</a></h2>
+
+<p>Tile several successive frames together.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>layout</samp>’</dt>
+<dd><p>Set the grid size (i.e. the number of lines and columns). For the syntax of
+this option, check the "Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames</samp>’</dt>
+<dd><p>Set the maximum number of frames to render in the given area. It must be less
+than or equal to <var>w</var>x<var>h</var>. The default value is <code>0</code>, meaning all
+the area will be used.
+</p>
+</dd>
+<dt> ‘<samp>margin</samp>’</dt>
+<dd><p>Set the outer border margin in pixels.
+</p>
+</dd>
+<dt> ‘<samp>padding</samp>’</dt>
+<dd><p>Set the inner border thickness (i.e. the number of pixels between frames). For
+more advanced padding options (such as having different values for the edges),
+refer to the pad video filter.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the unused areaFor the syntax of this option, check the
+"Color" section in the ffmpeg-utils manual. The default value of <var>color</var>
+is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-51"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-51">28.85.1 Examples</a></h3>
+
+<ul>
+<li>
+Produce 8x8 PNG tiles of all keyframes (‘<samp>-skip_frame nokey</samp>’) in a movie:
+<table><tr><td> </td><td><pre class="example">ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
+</pre></td></tr></table>
+<p>The ‘<samp>-vsync 0</samp>’ is necessary to prevent <code>ffmpeg</code> from
+duplicating each output frame to accommodate the originally detected frame
+rate.
+</p>
+</li><li>
+Display <code>5</code> pictures in an area of <code>3x2</code> frames,
+with <code>7</code> pixels between them, and <code>2</code> pixels of initial margin, using
+mixed flat and named options:
+<table><tr><td> </td><td><pre class="example">tile=3x2:nb_frames=5:padding=7:margin=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tinterlace"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-tinterlace">28.86 tinterlace</a></h2>
+
+<p>Perform various types of temporal field interlacing.
+</p>
+<p>Frames are counted starting from 1, so the first input frame is
+considered odd.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify the mode of the interlacing. This option can also be specified
+as a value alone. See below for a list of values for this option.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>merge, 0</samp>’</dt>
+<dd><p>Move odd frames into the upper field, even into the lower field,
+generating a double height frame at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_odd, 1</samp>’</dt>
+<dd><p>Only output even frames, odd frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_even, 2</samp>’</dt>
+<dd><p>Only output odd frames, even frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>pad, 3</samp>’</dt>
+<dd><p>Expand each frame to full height, but pad alternate lines with black,
+generating a frame with double height at the same input frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_top, 4</samp>’</dt>
+<dd><p>Interleave the upper field from odd frames with the lower field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_bottom, 5</samp>’</dt>
+<dd><p>Interleave the lower field from odd frames with the upper field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interlacex2, 6</samp>’</dt>
+<dd><p>Double frame rate with unchanged height. Frames are inserted each
+containing the second temporal field from the previous input frame and
+the first temporal field from the next input frame. This mode relies on
+the top_field_first flag. Useful for interlaced video displays with no
+field synchronisation.
+</p></dd>
+</dl>
+
+<p>Numeric values are deprecated but are accepted for backward
+compatibility reasons.
+</p>
+<p>Default mode is <code>merge</code>.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Specify flags influencing the filter process.
+</p>
+<p>Available value for <var>flags</var> is:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low_pass_filter, vlfp</samp>’</dt>
+<dd><p>Enable vertical low-pass filtering in the filter.
+Vertical low-pass filtering is required when creating an interlaced
+destination from a progressive source which contains high-frequency
+vertical detail. Filtering will reduce interlace ’twitter’ and Moire
+patterning.
+</p>
+<p>Vertical low-pass filtering can only be enabled for ‘<samp>mode</samp>’
+<var>interleave_top</var> and <var>interleave_bottom</var>.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<a name="transpose"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-transpose">28.87 transpose</a></h2>
+
+<p>Transpose rows with columns in the input video and optionally flip it.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dir</samp>’</dt>
+<dd><p>Specify the transposition direction.
+</p>
+<p>Can assume the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>0, 4, cclock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise and vertically flip (default), that is:
+</p><table><tr><td> </td><td><pre class="example">L.R L.l
+. . -> . .
+l.r R.r
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>1, 5, clock</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R l.L
+. . -> . .
+l.r r.R
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>2, 6, cclock</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R R.r
+. . -> . .
+l.r L.l
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>3, 7, clock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise and vertically flip, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R r.R
+. . -> . .
+l.r l.L
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>For values between 4-7, the transposition is only done if the input
+video geometry is portrait and not landscape. These values are
+deprecated, the <code>passthrough</code> option should be used instead.
+</p>
+<p>Numerical values are deprecated, and should be dropped in favor of
+symbolic constants.
+</p>
+</dd>
+<dt> ‘<samp>passthrough</samp>’</dt>
+<dd><p>Do not apply the transposition if the input geometry matches the one
+specified by the specified value. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Always apply transposition.
+</p></dd>
+<dt> ‘<samp>portrait</samp>’</dt>
+<dd><p>Preserve portrait geometry (when <var>height</var> >= <var>width</var>).
+</p></dd>
+<dt> ‘<samp>landscape</samp>’</dt>
+<dd><p>Preserve landscape geometry (when <var>width</var> >= <var>height</var>).
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p></dd>
+</dl>
+
+<p>For example to rotate by 90 degrees clockwise and preserve portrait
+layout:
+</p><table><tr><td> </td><td><pre class="example">transpose=dir=1:passthrough=portrait
+</pre></td></tr></table>
+
+<p>The command above can also be specified as:
+</p><table><tr><td> </td><td><pre class="example">transpose=1:portrait
+</pre></td></tr></table>
+
+<a name="trim"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-trim">28.88 trim</a></h2>
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the frame with the
+timestamp <var>start</var> will be the first frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first frame that will be dropped, i.e. the frame
+immediately preceding the one with the timestamp <var>end</var> will be the last
+frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in timebase
+units instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in timebase units
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _frame variants simply count the
+frames that pass through the filter. Also note that this filter does not modify
+the timestamps. If you wish that the output timestamps start at zero, insert a
+setpts filter after the trim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all the frames that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple trim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first second
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=duration=1
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="unsharp"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-unsharp">28.89 unsharp</a></h2>
+
+<p>Sharpen or blur the input video.
+</p>
+<p>It accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_msize_x, lx</samp>’</dt>
+<dd><p>Set the luma matrix horizontal size. It must be an odd integer between
+3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_msize_y, ly</samp>’</dt>
+<dd><p>Set the luma matrix vertical size. It must be an odd integer between 3
+and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_amount, la</samp>’</dt>
+<dd><p>Set the luma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_x, cx</samp>’</dt>
+<dd><p>Set the chroma matrix horizontal size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_y, cy</samp>’</dt>
+<dd><p>Set the chroma matrix vertical size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_amount, ca</samp>’</dt>
+<dd><p>Set the chroma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 0.0.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<p>All parameters are optional and default to the equivalent of the
+string ’5:5:1.0:5:5:0.0’.
+</p>
+<a name="Examples-27"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-27">28.89.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply strong luma sharpen effect:
+<table><tr><td> </td><td><pre class="example">unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
+</pre></td></tr></table>
+
+</li><li>
+Apply strong blur of both luma and chroma parameters:
+<table><tr><td> </td><td><pre class="example">unsharp=7:7:-2:7:7:-2
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabdetect"></a>
+</p><a name="vidstabdetect-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-vidstabdetect-1">28.90 vidstabdetect</a></h2>
+
+<p>Analyze video stabilization/deshaking. Perform pass 1 of 2, see
+<a href="#vidstabtransform">vidstabtransform</a> for pass 2.
+</p>
+<p>This filter generates a file with relative translation and rotation
+transform information about subsequent frames, which is then used by
+the <a href="#vidstabtransform">vidstabtransform</a> filter.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>result</samp>’</dt>
+<dd><p>Set the path to the file used to write the transforms information.
+Default value is ‘<tt>transforms.trf</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>shakiness</samp>’</dt>
+<dd><p>Set how shaky the video is and how quick the camera is. It accepts an
+integer in the range 1-10, a value of 1 means little shakiness, a
+value of 10 means strong shakiness. Default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>accuracy</samp>’</dt>
+<dd><p>Set the accuracy of the detection process. It must be a value in the
+range 1-15. A value of 1 means low accuracy, a value of 15 means high
+accuracy. Default value is 15.
+</p>
+</dd>
+<dt> ‘<samp>stepsize</samp>’</dt>
+<dd><p>Set stepsize of the search process. The region around minimum is
+scanned with 1 pixel resolution. Default value is 6.
+</p>
+</dd>
+<dt> ‘<samp>mincontrast</samp>’</dt>
+<dd><p>Set minimum contrast. Below this value a local measurement field is
+discarded. Must be a floating point value in the range 0-1. Default
+value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Set reference frame number for tripod mode.
+</p>
+<p>If enabled, the motion of the frames is compared to a reference frame
+in the filtered stream, identified by the specified number. The idea
+is to compensate all movements in a more-or-less static scene and keep
+the camera view absolutely still.
+</p>
+<p>If set to 0, it is disabled. The frames are counted starting from 1.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>Show fields and transforms in the resulting frames. It accepts an
+integer in the range 0-2. Default value is 0, which disables any
+visualization.
+</p></dd>
+</dl>
+
+<a name="Examples-32"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-32">28.90.1 Examples</a></h3>
+
+<ul>
+<li>
+Use default values:
+<table><tr><td> </td><td><pre class="example">vidstabdetect
+</pre></td></tr></table>
+
+</li><li>
+Analyze strongly shaky movie and put the results in file
+‘<tt>mytransforms.trf</tt>’:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Visualize the result of internal transformations in the resulting
+video:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=show=1
+</pre></td></tr></table>
+
+</li><li>
+Analyze a video with medium shakiness using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabtransform"></a>
+</p><a name="vidstabtransform-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-vidstabtransform-1">28.91 vidstabtransform</a></h2>
+
+<p>Video stabilization/deshaking: pass 2 of 2,
+see <a href="#vidstabdetect">vidstabdetect</a> for pass 1.
+</p>
+<p>Read a file with transform information for each frame and
+apply/compensate them. Together with the <a href="#vidstabdetect">vidstabdetect</a>
+filter this can be used to deshake videos. See also
+<a href="http://public.hronopik.de/vid.stab">http://public.hronopik.de/vid.stab</a>. It is important to also use
+the unsharp filter, see below.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<a name="Options-13"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Options-13">28.91.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>input</samp>’</dt>
+<dd><p>Set path to the file used to read the transforms. Default value is
+‘<tt>transforms.trf</tt>’).
+</p>
+</dd>
+<dt> ‘<samp>smoothing</samp>’</dt>
+<dd><p>Set the number of frames (value*2 + 1) used for lowpass filtering the
+camera movements. Default value is 10.
+</p>
+<p>For example a number of 10 means that 21 frames are used (10 in the
+past and 10 in the future) to smoothen the motion in the video. A
+larger values leads to a smoother video, but limits the acceleration
+of the camera (pan/tilt movements). 0 is a special case where a
+static camera is simulated.
+</p>
+</dd>
+<dt> ‘<samp>optalgo</samp>’</dt>
+<dd><p>Set the camera path optimization algorithm.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>gaussian kernel low-pass filter on camera motion (default)
+</p></dd>
+<dt> ‘<samp>avg</samp>’</dt>
+<dd><p>averaging on transformations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>maxshift</samp>’</dt>
+<dd><p>Set maximal number of pixels to translate frames. Default value is -1,
+meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>maxangle</samp>’</dt>
+<dd><p>Set maximal angle in radians (degree*PI/180) to rotate frames. Default
+value is -1, meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>crop</samp>’</dt>
+<dd><p>Specify how to deal with borders that may be visible due to movement
+compensation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>keep</samp>’</dt>
+<dd><p>keep image information from previous frame (default)
+</p></dd>
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>fill the border black
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>invert</samp>’</dt>
+<dd><p>Invert transforms if set to 1. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>relative</samp>’</dt>
+<dd><p>Consider transforms as relative to previsou frame if set to 1,
+absolute if set to 0. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set percentage to zoom. A positive value will result in a zoom-in
+effect, a negative value in a zoom-out effect. Default value is 0 (no
+zoom).
+</p>
+</dd>
+<dt> ‘<samp>optzoom</samp>’</dt>
+<dd><p>Set optimal zooming to avoid borders.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>disabled
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>optimal static zoom value is determined (only very strong movements
+will lead to visible borders) (default)
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dd><p>optimal adaptive zoom value is determined (no borders will be
+visible), see ‘<samp>zoomspeed</samp>’
+</p></dd>
+</dl>
+
+<p>Note that the value given at zoom is added to the one calculated here.
+</p>
+</dd>
+<dt> ‘<samp>zoomspeed</samp>’</dt>
+<dd><p>Set percent to zoom maximally each frame (enabled when
+‘<samp>optzoom</samp>’ is set to 2). Range is from 0 to 5, default value is
+0.25.
+</p>
+</dd>
+<dt> ‘<samp>interpol</samp>’</dt>
+<dd><p>Specify type of interpolation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>no</samp>’</dt>
+<dd><p>no interpolation
+</p></dd>
+<dt> ‘<samp>linear</samp>’</dt>
+<dd><p>linear only horizontal
+</p></dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>linear in both directions (default)
+</p></dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>cubic in both directions (slow)
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Enable virtual tripod mode if set to 1, which is equivalent to
+<code>relative=0:smoothing=0</code>. Default value is 0.
+</p>
+<p>Use also <code>tripod</code> option of <a href="#vidstabdetect">vidstabdetect</a>.
+</p>
+</dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Increase log verbosity if set to 1. Also the detected global motions
+are written to the temporary file ‘<tt>global_motions.trf</tt>’. Default
+value is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-29"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-29">28.91.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for a typical stabilization with default values:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
+</pre></td></tr></table>
+
+<p>Note the use of the unsharp filter which is always recommended.
+</p>
+</li><li>
+Zoom in a bit more and load transform data from a given file:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=zoom=5:input="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Smoothen the video even more:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=smoothing=30
+</pre></td></tr></table>
+</li></ul>
+
+<a name="vflip"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-vflip">28.92 vflip</a></h2>
+
+<p>Flip the input video vertically.
+</p>
+<p>For example, to vertically flip a video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "vflip" out.avi
+</pre></td></tr></table>
+
+<a name="vignette"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-vignette">28.93 vignette</a></h2>
+
+<p>Make or reverse a natural vignetting effect.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set lens angle expression as a number of radians.
+</p>
+<p>The value is clipped in the <code>[0,PI/2]</code> range.
+</p>
+<p>Default value: <code>"PI/5"</code>
+</p>
+</dd>
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dd><p>Set center coordinates expressions. Respectively <code>"w/2"</code> and <code>"h/2"</code>
+by default.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set forward/backward mode.
+</p>
+<p>Available modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>forward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the darker the image becomes.
+</p>
+</dd>
+<dt> ‘<samp>backward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the brighter the image becomes.
+This can be used to reverse a vignette effect, though there is no automatic
+detection to extract the lens ‘<samp>angle</samp>’ and other settings (yet). It can
+also be used to create a burning effect.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>forward</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set evaluation mode for the expressions (‘<samp>angle</samp>’, ‘<samp>x0</samp>’, ‘<samp>y0</samp>’).
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>Evaluate expressions only once during the filter initialization.
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Evaluate expressions for each incoming frame. This is way slower than the
+‘<samp>init</samp>’ mode since it requires all the scalers to be re-computed, but it
+allows advanced dynamic expressions.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>init</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>dither</samp>’</dt>
+<dd><p>Set dithering to reduce the circular banding effects. Default is <code>1</code>
+(enabled).
+</p>
+</dd>
+<dt> ‘<samp>aspect</samp>’</dt>
+<dd><p>Set vignette aspect. This setting allows one to adjust the shape of the vignette.
+Setting this value to the SAR of the input will make a rectangular vignetting
+following the dimensions of the video.
+</p>
+<p>Default is <code>1/1</code>.
+</p></dd>
+</dl>
+
+<a name="Expressions"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Expressions">28.93.1 Expressions</a></h3>
+
+<p>The ‘<samp>alpha</samp>’, ‘<samp>x0</samp>’ and ‘<samp>y0</samp>’ expressions can contain the
+following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>input width and height
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in
+<var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+
+<a name="Examples-15"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-15">28.93.2 Examples</a></h3>
+
+<ul>
+<li>
+Apply simple strong vignetting effect:
+<table><tr><td> </td><td><pre class="example">vignette=PI/4
+</pre></td></tr></table>
+
+</li><li>
+Make a flickering vignetting:
+<table><tr><td> </td><td><pre class="example">vignette='PI/4+random(1)*PI/50':eval=frame
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="w3fdif"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-w3fdif">28.94 w3fdif</a></h2>
+
+<p>Deinterlace the input video ("w3fdif" stands for "Weston 3 Field
+Deinterlacing Filter").
+</p>
+<p>Based on the process described by Martin Weston for BBC R&D, and
+implemented based on the de-interlace algorithm written by Jim
+Easterbrook for BBC R&D, the Weston 3 field deinterlacing filter
+uses filter coefficients calculated by BBC R&D.
+</p>
+<p>There are two sets of filter coefficients, so called "simple":
+and "complex". Which set of filter coefficients is used can
+be set by passing an optional parameter:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter</samp>’</dt>
+<dd><p>Set the interlacing filter coefficients. Accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>Simple filter coefficient set.
+</p></dd>
+<dt> ‘<samp>complex</samp>’</dt>
+<dd><p>More-complex filter coefficient set.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>complex</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Deinterlace all frames,
+</p></dd>
+<dt> ‘<samp>interlaced</samp>’</dt>
+<dd><p>Only deinterlace frames marked as interlaced.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>all</samp>’.
+</p></dd>
+</dl>
+
+<p><a name="yadif"></a>
+</p><a name="yadif-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-yadif-1">28.95 yadif</a></h2>
+
+<p>Deinterlace the input video ("yadif" means "yet another deinterlacing
+filter").
+</p>
+<p>This filter accepts the following options:
+</p>
+
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>The interlacing mode to adopt, accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, send_frame</samp>’</dt>
+<dd><p>output 1 frame for each frame
+</p></dd>
+<dt> ‘<samp>1, send_field</samp>’</dt>
+<dd><p>output 1 frame for each field
+</p></dd>
+<dt> ‘<samp>2, send_frame_nospatial</samp>’</dt>
+<dd><p>like <code>send_frame</code> but skip spatial interlacing check
+</p></dd>
+<dt> ‘<samp>3, send_field_nospatial</samp>’</dt>
+<dd><p>like <code>send_field</code> but skip spatial interlacing check
+</p></dd>
+</dl>
+
+<p>Default value is <code>send_frame</code>.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>The picture field parity assumed for the input interlaced video, accepts one of
+the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+<dt> ‘<samp>-1, auto</samp>’</dt>
+<dd><p>enable automatic detection
+</p></dd>
+</dl>
+
+<p>Default value is <code>auto</code>.
+If interlacing is unknown or decoder does not export this information,
+top field first will be assumed.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following
+values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, all</samp>’</dt>
+<dd><p>deinterlace all frames
+</p></dd>
+<dt> ‘<samp>1, interlaced</samp>’</dt>
+<dd><p>only deinterlace frames marked as interlaced
+</p></dd>
+</dl>
+
+<p>Default value is <code>all</code>.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sources"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Video-Sources">29. Video Sources</a></h1>
+
+<p>Below is a description of the currently available video sources.
+</p>
+<a name="buffer"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-buffer">29.1 buffer</a></h2>
+
+<p>Buffer video frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/vsrc_buffer.h</tt>’.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Specify the size (width and height) of the buffered video frames. For the
+syntax of this option, check the "Video size" section in the ffmpeg-utils
+manual.
+</p>
+</dd>
+<dt> ‘<samp>width</samp>’</dt>
+<dd><p>Input video width.
+</p>
+</dd>
+<dt> ‘<samp>height</samp>’</dt>
+<dd><p>Input video height.
+</p>
+</dd>
+<dt> ‘<samp>pix_fmt</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Specify the timebase assumed by the timestamps of the buffered frames.
+</p>
+</dd>
+<dt> ‘<samp>frame_rate</samp>’</dt>
+<dd><p>Specify the frame rate expected for the video stream.
+</p>
+</dd>
+<dt> ‘<samp>pixel_aspect, sar</samp>’</dt>
+<dd><p>Specify the sample aspect ratio assumed by the video frames.
+</p>
+</dd>
+<dt> ‘<samp>sws_param</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
+</pre></td></tr></table>
+
+<p>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 AVPixelFormat definition in ‘<tt>libavutil/pixfmt.h</tt>’),
+this example corresponds to:
+</p><table><tr><td> </td><td><pre class="example">buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
+</pre></td></tr></table>
+
+<p>Alternatively, the options can be specified as a flat string, but this
+syntax is deprecated:
+</p>
+<p><var>width</var>:<var>height</var>:<var>pix_fmt</var>:<var>time_base.num</var>:<var>time_base.den</var>:<var>pixel_aspect.num</var>:<var>pixel_aspect.den</var>[:<var>sws_param</var>]
+</p>
+<a name="cellauto"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-cellauto">29.2 cellauto</a></h2>
+
+<p>Create a pattern generated by an elementary cellular automaton.
+</p>
+<p>The initial state of the cellular automaton can be defined through the
+‘<samp>filename</samp>’, and ‘<samp>pattern</samp>’ options. If such options are
+not specified an initial state is created randomly.
+</p>
+<p>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 ‘<samp>scroll</samp>’ option.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pattern, p</samp>’</dt>
+<dd><p>Read the initial cellular automaton state, i.e. the starting row, from
+the specified string.
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This option is ignored when a file or a pattern is specified.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the cellular automaton rule, it is a number ranging from 0 to 255.
+Default value is 110.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ or ‘<samp>pattern</samp>’ is specified, the size is set
+by default to the width of the specified initial state row, and the
+height is set to <var>width</var> * PHI.
+</p>
+<p>If ‘<samp>size</samp>’ is set, it must contain the width of the specified
+pattern string, and the specified pattern will be centered in the
+larger row.
+</p>
+<p>If a filename or a pattern string is not specified, the size value
+defaults to "320x518" (used for a randomly generated initial state).
+</p>
+</dd>
+<dt> ‘<samp>scroll</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>start_full, full</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right row edges together.
+This is the default behavior, for disabling set the value to 0.
+</p></dd>
+</dl>
+
+<a name="Examples-77"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-77">29.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Read the initial state from ‘<tt>pattern</tt>’, and specify an output of
+size 200x400.
+<table><tr><td> </td><td><pre class="example">cellauto=f=pattern:s=200x400
+</pre></td></tr></table>
+
+</li><li>
+Generate a random initial row with a width of 200 cells, with a fill
+ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">cellauto=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Create a pattern generated by rule 18 starting by a single alive cell
+centered on an initial row with width 100:
+<table><tr><td> </td><td><pre class="example">cellauto=p=@:s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li><li>
+Specify a more elaborated initial pattern:
+<table><tr><td> </td><td><pre class="example">cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="mandelbrot"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mandelbrot">29.3 mandelbrot</a></h2>
+
+<p>Generate a Mandelbrot set fractal, and progressively zoom towards the
+point specified with <var>start_x</var> and <var>start_y</var>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Set the terminal pts value. Default value is 400.
+</p>
+</dd>
+<dt> ‘<samp>end_scale</samp>’</dt>
+<dd><p>Set the terminal scale value.
+Must be a floating point value. Default value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>inner</samp>’</dt>
+<dd><p>Set the inner coloring mode, that is the algorithm used to draw the
+Mandelbrot fractal internal region.
+</p>
+<p>It shall assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>Set black mode.
+</p></dd>
+<dt> ‘<samp>convergence</samp>’</dt>
+<dd><p>Show time until convergence.
+</p></dd>
+<dt> ‘<samp>mincol</samp>’</dt>
+<dd><p>Set color based on point closest to the origin of the iterations.
+</p></dd>
+<dt> ‘<samp>period</samp>’</dt>
+<dd><p>Set period mode.
+</p></dd>
+</dl>
+
+<p>Default value is <var>mincol</var>.
+</p>
+</dd>
+<dt> ‘<samp>bailout</samp>’</dt>
+<dd><p>Set the bailout value. Default value is 10.0.
+</p>
+</dd>
+<dt> ‘<samp>maxiter</samp>’</dt>
+<dd><p>Set the maximum of iterations performed by the rendering
+algorithm. Default value is 7189.
+</p>
+</dd>
+<dt> ‘<samp>outer</samp>’</dt>
+<dd><p>Set outer coloring mode.
+It shall assume one of following values:
+</p><dl compact="compact">
+<dt> ‘<samp>iteration_count</samp>’</dt>
+<dd><p>Set iteration cound mode.
+</p></dd>
+<dt> ‘<samp>normalized_iteration_count</samp>’</dt>
+<dd><p>set normalized iteration count mode.
+</p></dd>
+</dl>
+<p>Default value is <var>normalized_iteration_count</var>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set frame rate, expressed as number of frames per second. Default
+value is "25".
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set frame size. For the syntax of this option, check the "Video
+size" section in the ffmpeg-utils manual. Default value is "640x480".
+</p>
+</dd>
+<dt> ‘<samp>start_scale</samp>’</dt>
+<dd><p>Set the initial scale value. Default value is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>start_x</samp>’</dt>
+<dd><p>Set the initial x position. Must be a floating point value between
+-100 and 100. Default value is -0.743643887037158704752191506114774.
+</p>
+</dd>
+<dt> ‘<samp>start_y</samp>’</dt>
+<dd><p>Set the initial y position. Must be a floating point value between
+-100 and 100. Default value is -0.131825904205311970493132056385139.
+</p></dd>
+</dl>
+
+<a name="mptestsrc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-mptestsrc">29.4 mptestsrc</a></h2>
+
+<p>Generate various test patterns, as generated by the MPlayer test filter.
+</p>
+<p>The size of the generated video is fixed, and is 256x256.
+This source is useful in particular for testing encoding features.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH:MM:SS[.m...]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>test, t</samp>’</dt>
+<dd>
+<p>Set the number or the name of the test to perform. Supported tests are:
+</p><dl compact="compact">
+<dt> ‘<samp>dc_luma</samp>’</dt>
+<dt> ‘<samp>dc_chroma</samp>’</dt>
+<dt> ‘<samp>freq_luma</samp>’</dt>
+<dt> ‘<samp>freq_chroma</samp>’</dt>
+<dt> ‘<samp>amp_luma</samp>’</dt>
+<dt> ‘<samp>amp_chroma</samp>’</dt>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dt> ‘<samp>mv</samp>’</dt>
+<dt> ‘<samp>ring1</samp>’</dt>
+<dt> ‘<samp>ring2</samp>’</dt>
+<dt> ‘<samp>all</samp>’</dt>
+</dl>
+
+<p>Default value is "all", which will cycle through the list of all tests.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=t=dc_luma
+</pre></td></tr></table>
+
+<p>will generate a "dc_luma" test pattern.
+</p>
+<a name="frei0r_005fsrc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-frei0r_005fsrc">29.5 frei0r_src</a></h2>
+
+<p>Provide a frei0r source.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>The size of the video to generate. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Framerate of the generated video, may be a string of the form
+<var>num</var>/<var>den</var> or a frame rate abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r source to load. For more information regarding frei0r and
+how to set the parameters read the section <a href="#frei0r">frei0r</a> in the description of
+the video filters.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r source.
+</p>
+</dd>
+</dl>
+
+<p>For example, to generate a frei0r partik0l source with size 200x200
+and frame rate 10 which is overlayed on the overlay filter main input:
+</p><table><tr><td> </td><td><pre class="example">frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
+</pre></td></tr></table>
+
+<a name="life"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-life">29.6 life</a></h2>
+
+<p>Generate a life pattern.
+</p>
+<p>This source is based on a generalization of John Conway’s life game.
+</p>
+<p>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.
+</p>
+<p>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 ‘<samp>rule</samp>’ option allows one to specify
+the rule to adopt.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+<p>If this option is not specified, the initial grid is generated
+randomly.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the life rule.
+</p>
+<p>A rule can be specified with a code of the kind "S<var>NS</var>/B<var>NB</var>",
+where <var>NS</var> and <var>NB</var> are sequences of numbers in the range 0-8,
+<var>NS</var> specifies the number of alive neighbor cells which make a
+live cell stay alive, and <var>NB</var> 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.
+</p>
+<p>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 = <code>(12<<9)+9</code> specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ is specified, the size is set by default to the
+same size of the input file. If ‘<samp>size</samp>’ 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.
+</p>
+<p>If a filename is not specified, the size value defaults to "320x240"
+(used for a randomly generated initial grid).
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right grid edges together, and the
+top and bottom edges also. Defaults to 1.
+</p>
+</dd>
+<dt> ‘<samp>mold</samp>’</dt>
+<dd><p>Set cell mold speed. If set, a dead cell will go from ‘<samp>death_color</samp>’ to
+‘<samp>mold_color</samp>’ with a step of ‘<samp>mold</samp>’. ‘<samp>mold</samp>’ can have a
+value from 0 to 255.
+</p>
+</dd>
+<dt> ‘<samp>life_color</samp>’</dt>
+<dd><p>Set the color of living (or new born) cells.
+</p>
+</dd>
+<dt> ‘<samp>death_color</samp>’</dt>
+<dd><p>Set the color of dead cells. If ‘<samp>mold</samp>’ is set, this is the first color
+used to represent a dead cell.
+</p>
+</dd>
+<dt> ‘<samp>mold_color</samp>’</dt>
+<dd><p>Set mold color, for definitely dead and moldy cells.
+</p>
+<p>For the syntax of these 3 color options, check the "Color" section in the
+ffmpeg-utils manual.
+</p></dd>
+</dl>
+
+<a name="Examples-69"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-69">29.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Read a grid from ‘<tt>pattern</tt>’, and center it on a grid of size
+300x300 pixels:
+<table><tr><td> </td><td><pre class="example">life=f=pattern:s=300x300
+</pre></td></tr></table>
+
+</li><li>
+Generate a random grid of size 200x200, with a fill ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">life=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Specify a custom rule for evolving a randomly generated grid:
+<table><tr><td> </td><td><pre class="example">life=rule=S14/B34
+</pre></td></tr></table>
+
+</li><li>
+Full example with slow death effect (mold) using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="color"></a>
+<a name="haldclutsrc"></a>
+<a name="nullsrc"></a>
+<a name="rgbtestsrc"></a>
+<a name="smptebars"></a>
+<a name="smptehdbars"></a>
+<a name="testsrc"></a>
+</p><a name="color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">29.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a></h2>
+
+<p>The <code>color</code> source provides an uniformly colored input.
+</p>
+<p>The <code>haldclutsrc</code> source provides an identity Hald CLUT. See also
+<a href="#haldclut">haldclut</a> filter.
+</p>
+<p>The <code>nullsrc</code> 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.
+</p>
+<p>The <code>rgbtestsrc</code> 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.
+</p>
+<p>The <code>smptebars</code> source generates a color bars pattern, based on
+the SMPTE Engineering Guideline EG 1-1990.
+</p>
+<p>The <code>smptehdbars</code> source generates a color bars pattern, based on
+the SMPTE RP 219-2002.
+</p>
+<p>The <code>testsrc</code> source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+</p>
+<p>The sources accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the source, only available in the <code>color</code>
+source. For the syntax of this option, check the "Color" section in the
+ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>level</samp>’</dt>
+<dd><p>Specify the level of the Hald CLUT, only available in the <code>haldclutsrc</code>
+source. A level of <code>N</code> generates a picture of <code>N*N*N</code> by <code>N*N*N</code>
+pixels to be used as identity matrix for 3D lookup tables. Each component is
+coded on a <code>1/(N*N)</code> scale.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the size of the sourced video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual. The default value is
+"320x240".
+</p>
+<p>This option is not available with the <code>haldclutsrc</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>Set the sample aspect ratio of the sourced video.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>decimals, n</samp>’</dt>
+<dd><p>Set the number of decimals to show in the timestamp, only available in the
+<code>testsrc</code> source.
+</p>
+<p>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.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=duration=5.3:size=qcif:rate=10
+</pre></td></tr></table>
+
+<p>will generate a video with a duration of 5.3 seconds, with size
+176x144 and a frame rate of 10 frames per second.
+</p>
+<p>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.
+</p><table><tr><td> </td><td><pre class="example">color=c=red@0.2:s=qcif:r=10
+</pre></td></tr></table>
+
+<p>If the input content is to be ignored, <code>nullsrc</code> can be used. The
+following command generates noise in the luminance plane by employing
+the <code>geq</code> filter:
+</p><table><tr><td> </td><td><pre class="example">nullsrc=s=256x256, geq=random(1)*255:128:128
+</pre></td></tr></table>
+
+<a name="Commands-5"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands-5">29.7.1 Commands</a></h3>
+
+<p>The <code>color</code> source supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c, color</samp>’</dt>
+<dd><p>Set the color of the created image. Accepts the same syntax of the
+corresponding ‘<samp>color</samp>’ option.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sinks"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Video-Sinks">30. Video Sinks</a></h1>
+
+<p>Below is a description of the currently available video sinks.
+</p>
+<a name="buffersink"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-buffersink">30.1 buffersink</a></h2>
+
+<p>Buffer video frames, and make them available to the end of the filter
+graph.
+</p>
+<p>This sink is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVBufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="nullsink"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-nullsink">30.2 nullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Multimedia-Filters"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Multimedia-Filters">31. Multimedia Filters</a></h1>
+
+<p>Below is a description of the currently available multimedia filters.
+</p>
+<a name="avectorscope"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-avectorscope">31.1 avectorscope</a></h2>
+
+<p>Convert input audio to a video output, representing the audio vector
+scope.
+</p>
+<p>The filter is used to measure the difference between channels of stereo
+audio stream. A monoaural signal, consisting of identical left and right
+signal, results in straight vertical line. Any stereo separation is visible
+as a deviation from this line, creating a Lissajous figure.
+If the straight (or deviation from it) but horizontal line appears this
+indicates that the left and right channels are out of phase.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode, m</samp>’</dt>
+<dd><p>Set the vectorscope mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>lissajous</samp>’</dt>
+<dd><p>Lissajous rotated by 45 degrees.
+</p>
+</dd>
+<dt> ‘<samp>lissajous_xy</samp>’</dt>
+<dd><p>Same as above but not rotated.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>lissajous</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size for the output. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual. Default value is <code>400x400</code>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the output frame rate. Default value is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dt> ‘<samp>gc</samp>’</dt>
+<dt> ‘<samp>bc</samp>’</dt>
+<dd><p>Specify the red, green and blue contrast. Default values are <code>40</code>, <code>160</code> and <code>80</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>rf</samp>’</dt>
+<dt> ‘<samp>gf</samp>’</dt>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>Specify the red, green and blue fade. Default values are <code>15</code>, <code>10</code> and <code>5</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set the zoom factor. Default value is <code>1</code>. Allowed range is <code>[1, 10]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-2">31.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Complete example using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="concat-2"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-concat-2">31.2 concat</a></h2>
+
+<p>Concatenate audio and video streams, joining them together one after the
+other.
+</p>
+<p>The filter works on segments of synchronized video and audio streams. All
+segments must have the same number of streams of each type, and that will
+also be the number of streams at output.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of segments. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Set the number of output video streams, that is also the number of video
+streams in each segment. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Set the number of output audio streams, that is also the number of video
+streams in each segment. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>unsafe</samp>’</dt>
+<dd><p>Activate unsafe mode: do not fail if segments have a different format.
+</p>
+</dd>
+</dl>
+
+<p>The filter has <var>v</var>+<var>a</var> outputs: first <var>v</var> video outputs, then
+<var>a</var> audio outputs.
+</p>
+<p>There are <var>n</var>x(<var>v</var>+<var>a</var>) inputs: first the inputs for the first
+segment, in the same order as the outputs, then the inputs for the second
+segment, etc.
+</p>
+<p>Related streams do not always have exactly the same duration, for various
+reasons including codec frame size or sloppy authoring. For that reason,
+related synchronized streams (e.g. a video and its audio track) should be
+concatenated at once. The concat filter will use the duration of the longest
+stream in each segment (except the last one), and if necessary pad shorter
+audio streams with silence.
+</p>
+<p>For this filter to work correctly, all segments must start at timestamp 0.
+</p>
+<p>All corresponding streams must have the same parameters in all segments; the
+filtering system will automatically select a common pixel format for video
+streams, and a common sample format, sample rate and channel layout for
+audio streams, but other settings, such as resolution, must be converted
+explicitly by the user.
+</p>
+<p>Different frame rates are acceptable but will result in variable frame rate
+at output; be sure to configure the output file to handle it.
+</p>
+<a name="Examples-28"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-28">31.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Concatenate an opening, an episode and an ending, all in bilingual version
+(video in stream 0, audio in streams 1 and 2):
+<table><tr><td> </td><td><pre class="example">ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
+ '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
+ concat=n=3:v=1:a=2 [v] [a1] [a2]' \
+ -map '[v]' -map '[a1]' -map '[a2]' output.mkv
+</pre></td></tr></table>
+
+</li><li>
+Concatenate two parts, handling audio and video separately, using the
+(a)movie sources, and adjusting the resolution:
+<table><tr><td> </td><td><pre class="example">movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
+movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
+[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
+</pre></td></tr></table>
+<p>Note that a desync will happen at the stitch if the audio and video streams
+do not have exactly the same duration in the first file.
+</p>
+</li></ul>
+
+<a name="ebur128"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-ebur128">31.3 ebur128</a></h2>
+
+<p>EBU R128 scanner filter. This filter takes an audio stream as input and outputs
+it unchanged. By default, it logs a message at a frequency of 10Hz with the
+Momentary loudness (identified by <code>M</code>), Short-term loudness (<code>S</code>),
+Integrated loudness (<code>I</code>) and Loudness Range (<code>LRA</code>).
+</p>
+<p>The filter also has a video output (see the <var>video</var> option) with a real
+time graph to observe the loudness evolution. The graphic contains the logged
+message mentioned above, so it is not printed anymore when this option is set,
+unless the verbose logging is set. The main graphing area contains the
+short-term loudness (3 seconds of analysis), and the gauge on the right is for
+the momentary loudness (400 milliseconds).
+</p>
+<p>More information about the Loudness Recommendation EBU R128 on
+<a href="http://tech.ebu.ch/loudness">http://tech.ebu.ch/loudness</a>.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dd><p>Activate the video output. The audio stream is passed unchanged whether this
+option is set or no. The video stream will be the first output stream if
+activated. Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>Set the video size. This option is for video only. For the syntax of this
+option, check the "Video size" section in the ffmpeg-utils manual. Default
+and minimum resolution is <code>640x480</code>.
+</p>
+</dd>
+<dt> ‘<samp>meter</samp>’</dt>
+<dd><p>Set the EBU scale meter. Default is <code>9</code>. Common values are <code>9</code> and
+<code>18</code>, respectively for EBU scale meter +9 and EBU scale meter +18. Any
+other integer value between this range is allowed.
+</p>
+</dd>
+<dt> ‘<samp>metadata</samp>’</dt>
+<dd><p>Set metadata injection. If set to <code>1</code>, the audio input will be segmented
+into 100ms output frames, each of them containing various loudness information
+in metadata. All the metadata keys are prefixed with <code>lavfi.r128.</code>.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>framelog</samp>’</dt>
+<dd><p>Force the frame logging level.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>information logging level
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>verbose logging level
+</p></dd>
+</dl>
+
+<p>By default, the logging level is set to <var>info</var>. If the ‘<samp>video</samp>’ or
+the ‘<samp>metadata</samp>’ options are set, it switches to <var>verbose</var>.
+</p>
+</dd>
+<dt> ‘<samp>peak</samp>’</dt>
+<dd><p>Set peak mode(s).
+</p>
+<p>Available modes can be cumulated (the option is a <code>flag</code> type). Possible
+values are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Disable any peak mode (default).
+</p></dd>
+<dt> ‘<samp>sample</samp>’</dt>
+<dd><p>Enable sample-peak mode.
+</p>
+<p>Simple peak mode looking for the higher sample value. It logs a message
+for sample-peak (identified by <code>SPK</code>).
+</p></dd>
+<dt> ‘<samp>true</samp>’</dt>
+<dd><p>Enable true-peak mode.
+</p>
+<p>If enabled, the peak lookup is done on an over-sampled version of the input
+stream for better peak accuracy. It logs a message for true-peak.
+(identified by <code>TPK</code>) and true-peak per frame (identified by <code>FTPK</code>).
+This mode requires a build with <code>libswresample</code>.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Examples-34"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-34">31.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Real-time graph using <code>ffplay</code>, with a EBU scale meter +18:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
+</pre></td></tr></table>
+
+</li><li>
+Run an analysis with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="interleave_002c-ainterleave"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-interleave_002c-ainterleave">31.4 interleave, ainterleave</a></h2>
+
+<p>Temporally interleave frames from several inputs.
+</p>
+<p><code>interleave</code> works with video inputs, <code>ainterleave</code> with audio.
+</p>
+<p>These filters read frames from several inputs and send the oldest
+queued frame to the output.
+</p>
+<p>Input streams must have a well defined, monotonically increasing frame
+timestamp values.
+</p>
+<p>In order to submit one frame to output, these filters need to enqueue
+at least one frame for each input, so they cannot work in case one
+input is not yet terminated and will not receive incoming frames.
+</p>
+<p>For example consider the case when one input is a <code>select</code> filter
+which always drop input frames. The <code>interleave</code> filter will keep
+reading from that input, but it will never be able to send new frames
+to output until the input will send an end-of-stream signal.
+</p>
+<p>Also, depending on inputs synchronization, the filters will drop
+frames in case one input receives more frames than the other ones, and
+the queue is already filled.
+</p>
+<p>These filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_inputs, n</samp>’</dt>
+<dd><p>Set the number of different inputs, it is 2 by default.
+</p></dd>
+</dl>
+
+<a name="Examples-79"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-79">31.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Interleave frames belonging to different streams using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
+</pre></td></tr></table>
+
+</li><li>
+Add flickering blur effect:
+<table><tr><td> </td><td><pre class="example">select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perms_002c-aperms"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-perms_002c-aperms">31.5 perms, aperms</a></h2>
+
+<p>Set read/write permissions for the output frames.
+</p>
+<p>These filters are mainly aimed at developers to test direct path in the
+following filter in the filtergraph.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Select the permissions mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing. This is the default.
+</p></dd>
+<dt> ‘<samp>ro</samp>’</dt>
+<dd><p>Set all the output frames read-only.
+</p></dd>
+<dt> ‘<samp>rw</samp>’</dt>
+<dd><p>Set all the output frames directly writable.
+</p></dd>
+<dt> ‘<samp>toggle</samp>’</dt>
+<dd><p>Make the frame read-only if writable, and writable if read-only.
+</p></dd>
+<dt> ‘<samp>random</samp>’</dt>
+<dd><p>Set each output frame read-only or writable randomly.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seed</samp>’</dt>
+<dd><p>Set the seed for the <var>random</var> mode, must be an integer included between
+<code>0</code> and <code>UINT32_MAX</code>. If not specified, or if explicitly set to
+<code>-1</code>, the filter will try to use a good random seed on a best effort
+basis.
+</p></dd>
+</dl>
+
+<p>Note: in case of auto-inserted filter between the permission filter and the
+following one, the permission might not be received as expected in that
+following filter. Inserting a <a href="#format">format</a> or <a href="#aformat">aformat</a> filter before the
+perms/aperms filter can avoid this problem.
+</p>
+<a name="select_002c-aselect"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-select_002c-aselect">31.6 select, aselect</a></h2>
+
+<p>Select frames to pass in output.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set expression, which is evaluated for each input frame.
+</p>
+<p>If the expression is evaluated to zero, the frame is discarded.
+</p>
+<p>If the evaluation result is negative or NaN, the frame is sent to the
+first output; otherwise it is sent to the output with index
+<code>ceil(val)-1</code>, assuming that the input index starts from 0.
+</p>
+<p>For example a value of <code>1.2</code> corresponds to the output with index
+<code>ceil(1.2)-1 = 2-1 = 1</code>, that is the second output.
+</p>
+</dd>
+<dt> ‘<samp>outputs, n</samp>’</dt>
+<dd><p>Set the number of outputs. The output to which to send the selected
+frame is based on the result of the evaluation. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The expression can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the sequential number of the filtered frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>selected_n</samp>’</dt>
+<dd><p>the sequential number of the selected frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_n</samp>’</dt>
+<dd><p>the sequential number of the last selected frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in <var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_pts</samp>’</dt>
+<dd><p>the PTS of the previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_pts</samp>’</dt>
+<dd><p>the PTS of the last previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_t</samp>’</dt>
+<dd><p>the PTS of the last previously selected video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>the PTS of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_t</samp>’</dt>
+<dd><p>the time of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>pict_type <em>(video only)</em></samp>’</dt>
+<dd><p>the type of the filtered frame, can assume one of the following
+values:
+</p><dl compact="compact">
+<dt> ‘<samp>I</samp>’</dt>
+<dt> ‘<samp>P</samp>’</dt>
+<dt> ‘<samp>B</samp>’</dt>
+<dt> ‘<samp>S</samp>’</dt>
+<dt> ‘<samp>SI</samp>’</dt>
+<dt> ‘<samp>SP</samp>’</dt>
+<dt> ‘<samp>BI</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>interlace_type <em>(video only)</em></samp>’</dt>
+<dd><p>the frame interlace type, can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>PROGRESSIVE</samp>’</dt>
+<dd><p>the frame is progressive (not interlaced)
+</p></dd>
+<dt> ‘<samp>TOPFIRST</samp>’</dt>
+<dd><p>the frame is top-field-first
+</p></dd>
+<dt> ‘<samp>BOTTOMFIRST</samp>’</dt>
+<dd><p>the frame is bottom-field-first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>consumed_sample_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of selected samples before the current frame
+</p>
+</dd>
+<dt> ‘<samp>samples_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of samples in the current frame
+</p>
+</dd>
+<dt> ‘<samp>sample_rate <em>(audio only)</em></samp>’</dt>
+<dd><p>the input sample rate
+</p>
+</dd>
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>1 if the filtered frame is a key-frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the filtered frame, -1 if the information
+is not available (e.g. for synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>scene <em>(video only)</em></samp>’</dt>
+<dd><p>value between 0 and 1 to indicate a new scene; a low value reflects a low
+probability for the current frame to introduce a new scene, while a higher
+value means the current frame is more likely to be one (see the example below)
+</p>
+</dd>
+</dl>
+
+<p>The default value of the select expression is "1".
+</p>
+<a name="Examples-35"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-35">31.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Select all frames in input:
+<table><tr><td> </td><td><pre class="example">select
+</pre></td></tr></table>
+
+<p>The example above is the same as:
+</p><table><tr><td> </td><td><pre class="example">select=1
+</pre></td></tr></table>
+
+</li><li>
+Skip all frames:
+<table><tr><td> </td><td><pre class="example">select=0
+</pre></td></tr></table>
+
+</li><li>
+Select only I-frames:
+<table><tr><td> </td><td><pre class="example">select='eq(pict_type\,I)'
+</pre></td></tr></table>
+
+</li><li>
+Select one frame every 100:
+<table><tr><td> </td><td><pre class="example">select='not(mod(n\,100))'
+</pre></td></tr></table>
+
+</li><li>
+Select only frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)
+</pre></td></tr></table>
+
+</li><li>
+Select only I frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)*eq(pict_type\,I)
+</pre></td></tr></table>
+
+</li><li>
+Select frames with a minimum distance of 10 seconds:
+<table><tr><td> </td><td><pre class="example">select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
+</pre></td></tr></table>
+
+</li><li>
+Use aselect to select only audio frames with samples number > 100:
+<table><tr><td> </td><td><pre class="example">aselect='gt(samples_n\,100)'
+</pre></td></tr></table>
+
+</li><li>
+Create a mosaic of the first scenes:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
+</pre></td></tr></table>
+
+<p>Comparing <var>scene</var> against a value between 0.3 and 0.5 is generally a sane
+choice.
+</p>
+</li><li>
+Send even and odd frames to separate outputs, and compose them:
+<table><tr><td> </td><td><pre class="example">select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sendcmd_002c-asendcmd"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-sendcmd_002c-asendcmd">31.7 sendcmd, asendcmd</a></h2>
+
+<p>Send commands to filters in the filtergraph.
+</p>
+<p>These filters read commands to be sent to other filters in the
+filtergraph.
+</p>
+<p><code>sendcmd</code> must be inserted between two video filters,
+<code>asendcmd</code> must be inserted between two audio filters, but apart
+from that they act the same way.
+</p>
+<p>The specification of commands can be provided in the filter arguments
+with the <var>commands</var> option, or in a file specified by the
+<var>filename</var> option.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>commands, c</samp>’</dt>
+<dd><p>Set the commands to be read and sent to the other filters.
+</p></dd>
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the commands to be read and sent to the other
+filters.
+</p></dd>
+</dl>
+
+<a name="Commands-syntax"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Commands-syntax">31.7.1 Commands syntax</a></h3>
+
+<p>A commands description consists of a sequence of interval
+specifications, comprising a list of commands to be executed when a
+particular event related to that interval occurs. The occurring event
+is typically the current frame time entering or leaving a given time
+interval.
+</p>
+<p>An interval is specified by the following syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>START</var>[-<var>END</var>] <var>COMMANDS</var>;
+</pre></td></tr></table>
+
+<p>The time interval is specified by the <var>START</var> and <var>END</var> times.
+<var>END</var> is optional and defaults to the maximum time.
+</p>
+<p>The current frame time is considered within the specified interval if
+it is included in the interval [<var>START</var>, <var>END</var>), that is when
+the time is greater or equal to <var>START</var> and is lesser than
+<var>END</var>.
+</p>
+<p><var>COMMANDS</var> consists of a sequence of one or more command
+specifications, separated by ",", relating to that interval. The
+syntax of a command specification is given by:
+</p><table><tr><td> </td><td><pre class="example">[<var>FLAGS</var>] <var>TARGET</var> <var>COMMAND</var> <var>ARG</var>
+</pre></td></tr></table>
+
+<p><var>FLAGS</var> is optional and specifies the type of events relating to
+the time interval which enable sending the specified command, and must
+be a non-null sequence of identifier flags separated by "+" or "|" and
+enclosed between "[" and "]".
+</p>
+<p>The following flags are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>enter</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp enters the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was not in the given interval, and the
+current is.
+</p>
+</dd>
+<dt> ‘<samp>leave</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp leaves the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was in the given interval, and the
+current is not.
+</p></dd>
+</dl>
+
+<p>If <var>FLAGS</var> is not specified, a default value of <code>[enter]</code> is
+assumed.
+</p>
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional list of argument for
+the given <var>COMMAND</var>.
+</p>
+<p>Between one interval specification and another, whitespaces, or
+sequences of characters starting with <code>#</code> until the end of line,
+are ignored and can be used to annotate comments.
+</p>
+<p>A simplified BNF description of the commands specification syntax
+follows:
+</p><table><tr><td> </td><td><pre class="example"><var>COMMAND_FLAG</var> ::= "enter" | "leave"
+<var>COMMAND_FLAGS</var> ::= <var>COMMAND_FLAG</var> [(+|"|")<var>COMMAND_FLAG</var>]
+<var>COMMAND</var> ::= ["[" <var>COMMAND_FLAGS</var> "]"] <var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+<var>COMMANDS</var> ::= <var>COMMAND</var> [,<var>COMMANDS</var>]
+<var>INTERVAL</var> ::= <var>START</var>[-<var>END</var>] <var>COMMANDS</var>
+<var>INTERVALS</var> ::= <var>INTERVAL</var>[;<var>INTERVALS</var>]
+</pre></td></tr></table>
+
+<a name="Examples-60"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-60">31.7.2 Examples</a></h3>
+
+<ul>
+<li>
+Specify audio tempo change at second 4:
+<table><tr><td> </td><td><pre class="example">asendcmd=c='4.0 atempo tempo 1.5',atempo
+</pre></td></tr></table>
+
+</li><li>
+Specify a list of drawtext and hue commands in a file.
+<table><tr><td> </td><td><pre class="example"># show text in the interval 5-10
+5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
+
+# desaturate the image in the interval 15-20
+15.0-20.0 [enter] hue s 0,
+ [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
+ [leave] hue s 1,
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
+
+# apply an exponential saturation fade-out effect, starting from time 25
+25 [enter] hue s exp(25-t)
+</pre></td></tr></table>
+
+<p>A filtergraph allowing to read and process the above command list
+stored in a file ‘<tt>test.cmd</tt>’, can be specified with:
+</p><table><tr><td> </td><td><pre class="example">sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="setpts"></a>
+</p><a name="setpts_002c-asetpts"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-setpts_002c-asetpts">31.8 setpts, asetpts</a></h2>
+
+<p>Change the PTS (presentation timestamp) of the input frames.
+</p>
+<p><code>setpts</code> works on video frames, <code>asetpts</code> on audio frames.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr</samp>’</dt>
+<dd><p>The expression which is evaluated for each frame to construct its timestamp.
+</p>
+</dd>
+</dl>
+
+<p>The expression is evaluated through the eval API and can contain the following
+constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>FRAME_RATE</samp>’</dt>
+<dd><p>frame rate, only defined for constant frame-rate video
+</p>
+</dd>
+<dt> ‘<samp>PTS</samp>’</dt>
+<dd><p>the presentation timestamp in input
+</p>
+</dd>
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>the count of the input frame for video or the number of consumed samples,
+not including the current frame for audio, starting from 0.
+</p>
+</dd>
+<dt> ‘<samp>NB_CONSUMED_SAMPLES</samp>’</dt>
+<dd><p>the number of consumed samples, not including the current frame (only
+audio)
+</p>
+</dd>
+<dt> ‘<samp>NB_SAMPLES, S</samp>’</dt>
+<dd><p>the number of samples in the current frame (only audio)
+</p>
+</dd>
+<dt> ‘<samp>SAMPLE_RATE, SR</samp>’</dt>
+<dd><p>audio sample rate
+</p>
+</dd>
+<dt> ‘<samp>STARTPTS</samp>’</dt>
+<dd><p>the PTS of the first frame
+</p>
+</dd>
+<dt> ‘<samp>STARTT</samp>’</dt>
+<dd><p>the time in seconds of the first frame
+</p>
+</dd>
+<dt> ‘<samp>INTERLACED</samp>’</dt>
+<dd><p>tell if the current frame is interlaced
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>the time in seconds of the current frame
+</p>
+</dd>
+<dt> ‘<samp>POS</samp>’</dt>
+<dd><p>original position in the file of the frame, or undefined if undefined
+for the current frame
+</p>
+</dd>
+<dt> ‘<samp>PREV_INPTS</samp>’</dt>
+<dd><p>previous input PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_INT</samp>’</dt>
+<dd><p>previous input time in seconds
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTPTS</samp>’</dt>
+<dd><p>previous output PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTT</samp>’</dt>
+<dd><p>previous output time in seconds
+</p>
+</dd>
+<dt> ‘<samp>RTCTIME</samp>’</dt>
+<dd><p>wallclock (RTC) time in microseconds. This is deprecated, use time(0)
+instead.
+</p>
+</dd>
+<dt> ‘<samp>RTCSTART</samp>’</dt>
+<dd><p>wallclock (RTC) time at the start of the movie in microseconds
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+</dl>
+
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-1">31.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Start counting PTS from zero
+<table><tr><td> </td><td><pre class="example">setpts=PTS-STARTPTS
+</pre></td></tr></table>
+
+</li><li>
+Apply fast motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=0.5*PTS
+</pre></td></tr></table>
+
+</li><li>
+Apply slow motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=2.0*PTS
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate of 25 frames per second:
+<table><tr><td> </td><td><pre class="example">setpts=N/(25*TB)
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate 25 fps with some jitter:
+<table><tr><td> </td><td><pre class="example">setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
+</pre></td></tr></table>
+
+</li><li>
+Apply an offset of 10 seconds to the input PTS:
+<table><tr><td> </td><td><pre class="example">setpts=PTS+10/TB
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps from a "live source" and rebase onto the current timebase:
+<table><tr><td> </td><td><pre class="example">setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps by counting samples:
+<table><tr><td> </td><td><pre class="example">asetpts=N/SR/TB
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="settb_002c-asettb"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-settb_002c-asettb">31.9 settb, asettb</a></h2>
+
+<p>Set the timebase to use for the output frames timestamps.
+It is mainly useful for testing timebase configuration.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, tb</samp>’</dt>
+<dd><p>The expression which is evaluated into the output timebase.
+</p>
+</dd>
+</dl>
+
+<p>The value for ‘<samp>tb</samp>’ is an arithmetic expression representing a
+rational. The expression can contain the constants "AVTB" (the default
+timebase), "intb" (the input timebase) and "sr" (the sample rate,
+audio only). Default value is "intb".
+</p>
+<a name="Examples-43"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-43">31.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the timebase to 1/25:
+<table><tr><td> </td><td><pre class="example">settb=expr=1/25
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1/10:
+<table><tr><td> </td><td><pre class="example">settb=expr=0.1
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1001/1000:
+<table><tr><td> </td><td><pre class="example">settb=1+0.001
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 2*intb:
+<table><tr><td> </td><td><pre class="example">settb=2*intb
+</pre></td></tr></table>
+
+</li><li>
+Set the default timebase value:
+<table><tr><td> </td><td><pre class="example">settb=AVTB
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showspectrum"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-showspectrum">31.10 showspectrum</a></h2>
+
+<p>Convert input audio to a video output, representing the audio frequency
+spectrum.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value is
+<code>640x512</code>.
+</p>
+</dd>
+<dt> ‘<samp>slide</samp>’</dt>
+<dd><p>Specify if the spectrum should slide along the window. Default value is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify display mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>combined</samp>’</dt>
+<dd><p>all channels are displayed in the same row
+</p></dd>
+<dt> ‘<samp>separate</samp>’</dt>
+<dd><p>all channels are displayed in separate rows
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>combined</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify display color mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>each channel is displayed in a separate color
+</p></dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>each channel is is displayed using the same color scheme
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>channel</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>scale</samp>’</dt>
+<dd><p>Specify scale used for calculating intensity color values.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>lin</samp>’</dt>
+<dd><p>linear
+</p></dd>
+<dt> ‘<samp>sqrt</samp>’</dt>
+<dd><p>square root, default
+</p></dd>
+<dt> ‘<samp>cbrt</samp>’</dt>
+<dd><p>cubic root
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>logarithmic
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>sqrt</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>saturation</samp>’</dt>
+<dd><p>Set saturation modifier for displayed colors. Negative values provide
+alternative color scheme. <code>0</code> is no saturation at all.
+Saturation must be in [-10.0, 10.0] range.
+Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>win_func</samp>’</dt>
+<dd><p>Set window function.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No samples pre-processing (do not expect this to be faster)
+</p></dd>
+<dt> ‘<samp>hann</samp>’</dt>
+<dd><p>Hann window
+</p></dd>
+<dt> ‘<samp>hamming</samp>’</dt>
+<dd><p>Hamming window
+</p></dd>
+<dt> ‘<samp>blackman</samp>’</dt>
+<dd><p>Blackman window
+</p></dd>
+</dl>
+
+<p>Default value is <code>hann</code>.
+</p></dd>
+</dl>
+
+<p>The usage is very similar to the showwaves filter; see the examples in that
+section.
+</p>
+<a name="Examples-46"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-46">31.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Large window with logarithmic color scaling:
+<table><tr><td> </td><td><pre class="example">showspectrum=s=1280x480:scale=log
+</pre></td></tr></table>
+
+</li><li>
+Complete example for a colored and sliding spectrum per channel using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showwaves"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-showwaves">31.11 showwaves</a></h2>
+
+<p>Convert input audio to a video output, representing the samples waves.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value
+is "600x240".
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set display mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>point</samp>’</dt>
+<dd><p>Draw a point for each sample.
+</p>
+</dd>
+<dt> ‘<samp>line</samp>’</dt>
+<dd><p>Draw a vertical line for each sample.
+</p></dd>
+</dl>
+
+<p>Default value is <code>point</code>.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of samples which are printed on the same column. A
+larger value will decrease the frame rate. Must be a positive
+integer. This option can be set only if the value for <var>rate</var>
+is not explicitly specified.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the (approximate) output frame rate. This is done by setting the
+option <var>n</var>. Default value is "25".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-9"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-9">31.11.1 Examples</a></h3>
+
+<ul>
+<li>
+Output the input file audio and the corresponding video representation
+at the same time:
+<table><tr><td> </td><td><pre class="example">amovie=a.mp3,asplit[out0],showwaves[out1]
+</pre></td></tr></table>
+
+</li><li>
+Create a synthetic signal and show it with showwaves, forcing a
+frame rate of 30 frames per second:
+<table><tr><td> </td><td><pre class="example">aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
+</pre></td></tr></table>
+</li></ul>
+
+<a name="split_002c-asplit"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-split_002c-asplit">31.12 split, asplit</a></h2>
+
+<p>Split input into several identical outputs.
+</p>
+<p><code>asplit</code> works with audio input, <code>split</code> with video.
+</p>
+<p>The filter accepts a single parameter which specifies the number of outputs. If
+unspecified, it defaults to 2.
+</p>
+<a name="Examples-11"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-11">31.12.1 Examples</a></h3>
+
+<ul>
+<li>
+Create two separate outputs from the same input:
+<table><tr><td> </td><td><pre class="example">[in] split [out0][out1]
+</pre></td></tr></table>
+
+</li><li>
+To create 3 or more outputs, you need to specify the number of
+outputs, like in:
+<table><tr><td> </td><td><pre class="example">[in] asplit=3 [out0][out1][out2]
+</pre></td></tr></table>
+
+</li><li>
+Create two separate outputs from the same input, one cropped and
+one padded:
+<table><tr><td> </td><td><pre class="example">[in] split [splitout1][splitout2];
+[splitout1] crop=100:100:0:0 [cropout];
+[splitout2] pad=200:200:100:100 [padout];
+</pre></td></tr></table>
+
+</li><li>
+Create 5 copies of the input audio with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
+</pre></td></tr></table>
+</li></ul>
+
+<a name="zmq_002c-azmq"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-zmq_002c-azmq">31.13 zmq, azmq</a></h2>
+
+<p>Receive commands sent through a libzmq client, and forward them to
+filters in the filtergraph.
+</p>
+<p><code>zmq</code> and <code>azmq</code> work as a pass-through filters. <code>zmq</code>
+must be inserted between two video filters, <code>azmq</code> between two
+audio filters.
+</p>
+<p>To enable these filters you need to install the libzmq library and
+headers and configure FFmpeg with <code>--enable-libzmq</code>.
+</p>
+<p>For more information about libzmq see:
+<a href="http://www.zeromq.org/">http://www.zeromq.org/</a>
+</p>
+<p>The <code>zmq</code> and <code>azmq</code> filters work as a libzmq server, which
+receives messages sent through a network interface defined by the
+‘<samp>bind_address</samp>’ option.
+</p>
+<p>The received message must be in the form:
+</p><table><tr><td> </td><td><pre class="example"><var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+</pre></td></tr></table>
+
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional argument list for the
+given <var>COMMAND</var>.
+</p>
+<p>Upon reception, the message is processed and the corresponding command
+is injected into the filtergraph. Depending on the result, the filter
+will send a reply to the client, adopting the format:
+</p><table><tr><td> </td><td><pre class="example"><var>ERROR_CODE</var> <var>ERROR_REASON</var>
+<var>MESSAGE</var>
+</pre></td></tr></table>
+
+<p><var>MESSAGE</var> is optional.
+</p>
+<a name="Examples-3"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-3">31.13.1 Examples</a></h3>
+
+<p>Look at ‘<tt>tools/zmqsend</tt>’ for an example of a zmq client which can
+be used to send commands processed by these filters.
+</p>
+<p>Consider the following filtergraph generated by <code>ffplay</code>
+</p><table><tr><td> </td><td><pre class="example">ffplay -dumpgraph 1 -f lavfi "
+color=s=100x100:c=red [l];
+color=s=100x100:c=blue [r];
+nullsrc=s=200x100, zmq [bg];
+[bg][l] overlay [bg+l];
+[bg+l][r] overlay=x=100 "
+</pre></td></tr></table>
+
+<p>To change the color of the left side of the video, the following
+command can be used:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_0 c yellow | tools/zmqsend
+</pre></td></tr></table>
+
+<p>To change the right side:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_1 c pink | tools/zmqsend
+</pre></td></tr></table>
+
+
+<a name="Multimedia-Sources"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Multimedia-Sources">32. Multimedia Sources</a></h1>
+
+<p>Below is a description of the currently available multimedia sources.
+</p>
+<a name="amovie"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-amovie">32.1 amovie</a></h2>
+
+<p>This is the same as <a href="#movie">movie</a> source, except it selects an audio
+stream by default.
+</p>
+<p><a name="movie"></a>
+</p><a name="movie-1"></a>
+<h2 class="section"><a href="ffplay-all.html#toc-movie-1">32.2 movie</a></h2>
+
+<p>Read audio and/or video stream(s) from a movie container.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>The name of the resource to read (not necessarily a file but also a device or a
+stream accessed through some protocol).
+</p>
+</dd>
+<dt> ‘<samp>format_name, f</samp>’</dt>
+<dd><p>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 <var>movie_name</var> or by probing.
+</p>
+</dd>
+<dt> ‘<samp>seek_point, sp</samp>’</dt>
+<dd><p>Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+<code>av_strtod</code> so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+</p>
+</dd>
+<dt> ‘<samp>streams, s</samp>’</dt>
+<dd><p>Specifies the streams to read. Several streams can be specified,
+separated by "+". The source will then have as many outputs, in the
+same order. The syntax is explained in the “Stream specifiers”
+section in the ffmpeg manual. Two special names, "dv" and "da" specify
+respectively the default (best suited) video and audio stream. Default
+is "dv", or "da" if the filter is called as "amovie".
+</p>
+</dd>
+<dt> ‘<samp>stream_index, si</samp>’</dt>
+<dd><p>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". Deprecated. If the filter is called "amovie", it will select
+audio instead of video.
+</p>
+</dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Specifies how many times to read the stream in sequence.
+If the value is less than 1, the stream will be read again and again.
+Default value is "1".
+</p>
+<p>Note that when the movie is looped the source timestamps are not
+changed, so it will generate non monotonically increasing timestamps.
+</p></dd>
+</dl>
+
+<p>This filter allows one to overlay a second video on top of main input of
+a filtergraph as shown in this graph:
+</p><table><tr><td> </td><td><pre class="example">input -----------> deltapts0 --> overlay --> output
+ ^
+ |
+movie --> scale--> deltapts1 -------+
+</pre></td></tr></table>
+
+<a name="Examples-12"></a>
+<h3 class="subsection"><a href="ffplay-all.html#toc-Examples-12">32.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Skip 3.2 seconds from the start of the avi file in.avi, and overlay it
+on top of the input labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read from a video4linux2 device, and overlay it on top of the input
+labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read the first video stream and the audio stream with id 0x81 from
+dvd.vob; the video is connected to the pad named "video" and the audio is
+connected to the pad named "audio":
+<table><tr><td> </td><td><pre class="example">movie=dvd.vob:s=v:0+#0x81 [video] [audio]
+</pre></td></tr></table>
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-See-Also">33. See Also</a></h1>
+
+<p><a href="ffplay.html">ffplay</a>,
+<a href="ffmpeg.html">ffmpeg</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
+<a href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffplay-all.html#toc-Authors">34. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : ffplay </title>
+
+<meta name="description" content="ffplay Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : ffplay ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">ffplay Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Synopsis" href="#Synopsis">1. Synopsis</a></li>
+ <li><a name="toc-Description" href="#Description">2. Description</a></li>
+ <li><a name="toc-Options" href="#Options">3. Options</a>
+ <ul class="toc">
+ <li><a name="toc-Stream-specifiers-1" href="#Stream-specifiers-1">3.1 Stream specifiers</a></li>
+ <li><a name="toc-Generic-options" href="#Generic-options">3.2 Generic options</a></li>
+ <li><a name="toc-AVOptions" href="#AVOptions">3.3 AVOptions</a></li>
+ <li><a name="toc-Main-options" href="#Main-options">3.4 Main options</a></li>
+ <li><a name="toc-Advanced-options" href="#Advanced-options">3.5 Advanced options</a></li>
+ <li><a name="toc-While-playing" href="#While-playing">3.6 While playing</a></li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">4. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">5. Authors</a></li>
+</ul>
+</div>
+
+<a name="Synopsis"></a>
+<h1 class="chapter"><a href="ffplay.html#toc-Synopsis">1. Synopsis</a></h1>
+
+<p>ffplay [<var>options</var>] [‘<tt>input_file</tt>’]
+</p>
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffplay.html#toc-Description">2. Description</a></h1>
+
+<p>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.
+</p>
+<a name="Options"></a>
+<h1 class="chapter"><a href="ffplay.html#toc-Options">3. Options</a></h1>
+
+<p>All the numerical options, if not specified otherwise, accept a string
+representing a number as input, which may be followed by one of the SI
+unit prefixes, for example: ’K’, ’M’, or ’G’.
+</p>
+<p>If ’i’ is appended to the SI unit prefix, the complete prefix will be
+interpreted as a unit prefix for binary multiplies, which are based on
+powers of 1024 instead of powers of 1000. Appending ’B’ to the SI unit
+prefix multiplies the value by 8. This allows using, for example:
+’KB’, ’MiB’, ’G’ and ’B’ as number suffixes.
+</p>
+<p>Options which do not take arguments are boolean options, and set the
+corresponding value to true. They can be set to false by prefixing
+the option name with "no". For example using "-nofoo"
+will set the boolean option with name "foo" to false.
+</p>
+<p><a name="Stream-specifiers"></a>
+</p><a name="Stream-specifiers-1"></a>
+<h2 class="section"><a href="ffplay.html#toc-Stream-specifiers-1">3.1 Stream specifiers</a></h2>
+<p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
+are used to precisely specify which stream(s) a given option belongs to.
+</p>
+<p>A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. <code>-codec:a:1 ac3</code> contains the
+<code>a:1</code> stream specifier, which matches the second audio stream. Therefore, it
+would select the ac3 codec for the second audio stream.
+</p>
+<p>A stream specifier can match several streams, so that the option is applied to all
+of them. E.g. the stream specifier in <code>-b:a 128k</code> matches all audio
+streams.
+</p>
+<p>An empty stream specifier matches all streams. For example, <code>-codec copy</code>
+or <code>-codec: copy</code> would copy all the streams without reencoding.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index. E.g. <code>-threads:1 4</code> would set the
+thread count for the second stream to 4.
+</p></dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle,
+’d’ for data, and ’t’ for attachments. If <var>stream_index</var> is given, then it matches
+stream number <var>stream_index</var> of this type. Otherwise, it matches all
+streams of this type.
+</p></dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number <var>stream_index</var>
+in the program with the id <var>program_id</var>. Otherwise, it matches all streams in the
+program.
+</p></dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<a name="Generic-options"></a>
+<h2 class="section"><a href="ffplay.html#toc-Generic-options">3.2 Generic options</a></h2>
+
+<p>These options are shared amongst the ff* tools.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-L</samp>’</dt>
+<dd><p>Show license.
+</p>
+</dd>
+<dt> ‘<samp>-h, -?, -help, --help [<var>arg</var>]</samp>’</dt>
+<dd><p>Show help. An optional parameter may be specified to print help about a specific
+item. If no argument is specified, only basic (non advanced) tool
+options are shown.
+</p>
+<p>Possible values of <var>arg</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>long</samp>’</dt>
+<dd><p>Print advanced tool options in addition to the basic tool options.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Print complete list of options, including shared and private options
+for encoders, decoders, demuxers, muxers, filters, etc.
+</p>
+</dd>
+<dt> ‘<samp>decoder=<var>decoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the decoder named <var>decoder_name</var>. Use the
+‘<samp>-decoders</samp>’ option to get a list of all decoders.
+</p>
+</dd>
+<dt> ‘<samp>encoder=<var>encoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the encoder named <var>encoder_name</var>. Use the
+‘<samp>-encoders</samp>’ option to get a list of all encoders.
+</p>
+</dd>
+<dt> ‘<samp>demuxer=<var>demuxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the demuxer named <var>demuxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all demuxers and muxers.
+</p>
+</dd>
+<dt> ‘<samp>muxer=<var>muxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the muxer named <var>muxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all muxers and demuxers.
+</p>
+</dd>
+<dt> ‘<samp>filter=<var>filter_name</var></samp>’</dt>
+<dd><p>Print detailed information about the filter name <var>filter_name</var>. Use the
+‘<samp>-filters</samp>’ option to get a list of all filters.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-version</samp>’</dt>
+<dd><p>Show version.
+</p>
+</dd>
+<dt> ‘<samp>-formats</samp>’</dt>
+<dd><p>Show available formats.
+</p>
+</dd>
+<dt> ‘<samp>-codecs</samp>’</dt>
+<dd><p>Show all codecs known to libavcodec.
+</p>
+<p>Note that the term ’codec’ is used throughout this documentation as a shortcut
+for what is more correctly called a media bitstream format.
+</p>
+</dd>
+<dt> ‘<samp>-decoders</samp>’</dt>
+<dd><p>Show available decoders.
+</p>
+</dd>
+<dt> ‘<samp>-encoders</samp>’</dt>
+<dd><p>Show all available encoders.
+</p>
+</dd>
+<dt> ‘<samp>-bsfs</samp>’</dt>
+<dd><p>Show available bitstream filters.
+</p>
+</dd>
+<dt> ‘<samp>-protocols</samp>’</dt>
+<dd><p>Show available protocols.
+</p>
+</dd>
+<dt> ‘<samp>-filters</samp>’</dt>
+<dd><p>Show available libavfilter filters.
+</p>
+</dd>
+<dt> ‘<samp>-pix_fmts</samp>’</dt>
+<dd><p>Show available pixel formats.
+</p>
+</dd>
+<dt> ‘<samp>-sample_fmts</samp>’</dt>
+<dd><p>Show available sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-layouts</samp>’</dt>
+<dd><p>Show channel names and standard channel layouts.
+</p>
+</dd>
+<dt> ‘<samp>-colors</samp>’</dt>
+<dd><p>Show recognized color names.
+</p>
+</dd>
+<dt> ‘<samp>-loglevel [repeat+]<var>loglevel</var> | -v [repeat+]<var>loglevel</var></samp>’</dt>
+<dd><p>Set the logging level used by the library.
+Adding "repeat+" indicates that repeated log output should not be compressed
+to the first line and the "Last message repeated n times" line will be
+omitted. "repeat" can also be used alone.
+If "repeat" is used alone, and with no prior loglevel set, the default
+loglevel will be used. If multiple loglevel parameters are given, using
+’repeat’ will not change the loglevel.
+<var>loglevel</var> is a number or a string containing one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>quiet</samp>’</dt>
+<dd><p>Show nothing at all; be silent.
+</p></dd>
+<dt> ‘<samp>panic</samp>’</dt>
+<dd><p>Only show fatal errors which could lead the process to crash, such as
+and assert failure. This is not currently used for anything.
+</p></dd>
+<dt> ‘<samp>fatal</samp>’</dt>
+<dd><p>Only show fatal errors. These are errors after which the process absolutely
+cannot continue after.
+</p></dd>
+<dt> ‘<samp>error</samp>’</dt>
+<dd><p>Show all errors, including ones which can be recovered from.
+</p></dd>
+<dt> ‘<samp>warning</samp>’</dt>
+<dd><p>Show all warnings and errors. Any message related to possibly
+incorrect or unexpected events will be shown.
+</p></dd>
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>Show informative messages during processing. This is in addition to
+warnings and errors. This is the default value.
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>Same as <code>info</code>, except more verbose.
+</p></dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Show everything, including debugging information.
+</p></dd>
+</dl>
+
+<p>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
+<code>AV_LOG_FORCE_NOCOLOR</code> or <code>NO_COLOR</code>, or can be forced setting
+the environment variable <code>AV_LOG_FORCE_COLOR</code>.
+The use of the environment variable <code>NO_COLOR</code> is deprecated and
+will be dropped in a following FFmpeg version.
+</p>
+</dd>
+<dt> ‘<samp>-report</samp>’</dt>
+<dd><p>Dump full command line and console output to a file named
+<code><var>program</var>-<var>YYYYMMDD</var>-<var>HHMMSS</var>.log</code> in the current
+directory.
+This file can be useful for bug reports.
+It also implies <code>-loglevel verbose</code>.
+</p>
+<p>Setting the environment variable <code>FFREPORT</code> to any value has the
+same effect. If the value is a ’:’-separated key=value sequence, these
+options will affect the report; options values must be escaped if they
+contain special characters or the options delimiter ’:’ (see the
+“Quoting and escaping” section in the ffmpeg-utils manual). The
+following option is recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>set the file name to use for the report; <code>%p</code> is expanded to the name
+of the program, <code>%t</code> is expanded to a timestamp, <code>%%</code> is expanded
+to a plain <code>%</code>
+</p></dd>
+</dl>
+
+<p>Errors in parsing the environment variable are not fatal, and will not
+appear in the report.
+</p>
+</dd>
+<dt> ‘<samp>-hide_banner</samp>’</dt>
+<dd><p>Suppress printing banner.
+</p>
+<p>All FFmpeg tools will normally show a copyright notice, build options
+and library versions. This option can be used to suppress printing
+this information.
+</p>
+</dd>
+<dt> ‘<samp>-cpuflags flags (<em>global</em>)</samp>’</dt>
+<dd><p>Allows setting and clearing cpu flags. This option is intended
+for testing. Do not use it unless you know what you’re doing.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -cpuflags -sse+mmx ...
+ffmpeg -cpuflags mmx ...
+ffmpeg -cpuflags 0 ...
+</pre></td></tr></table>
+<p>Possible flags for this option are:
+</p><dl compact="compact">
+<dt> ‘<samp>x86</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>mmxext</samp>’</dt>
+<dt> ‘<samp>sse</samp>’</dt>
+<dt> ‘<samp>sse2</samp>’</dt>
+<dt> ‘<samp>sse2slow</samp>’</dt>
+<dt> ‘<samp>sse3</samp>’</dt>
+<dt> ‘<samp>sse3slow</samp>’</dt>
+<dt> ‘<samp>ssse3</samp>’</dt>
+<dt> ‘<samp>atom</samp>’</dt>
+<dt> ‘<samp>sse4.1</samp>’</dt>
+<dt> ‘<samp>sse4.2</samp>’</dt>
+<dt> ‘<samp>avx</samp>’</dt>
+<dt> ‘<samp>xop</samp>’</dt>
+<dt> ‘<samp>fma4</samp>’</dt>
+<dt> ‘<samp>3dnow</samp>’</dt>
+<dt> ‘<samp>3dnowext</samp>’</dt>
+<dt> ‘<samp>cmov</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>ARM</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>armv5te</samp>’</dt>
+<dt> ‘<samp>armv6</samp>’</dt>
+<dt> ‘<samp>armv6t2</samp>’</dt>
+<dt> ‘<samp>vfp</samp>’</dt>
+<dt> ‘<samp>vfpv3</samp>’</dt>
+<dt> ‘<samp>neon</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>PowerPC</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>altivec</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>Specific Processors</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>pentium2</samp>’</dt>
+<dt> ‘<samp>pentium3</samp>’</dt>
+<dt> ‘<samp>pentium4</samp>’</dt>
+<dt> ‘<samp>k6</samp>’</dt>
+<dt> ‘<samp>k62</samp>’</dt>
+<dt> ‘<samp>athlon</samp>’</dt>
+<dt> ‘<samp>athlonxp</samp>’</dt>
+<dt> ‘<samp>k8</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-opencl_bench</samp>’</dt>
+<dd><p>Benchmark all available OpenCL devices and show the results. This option
+is only available when FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+</dd>
+<dt> ‘<samp>-opencl_options options (<em>global</em>)</samp>’</dt>
+<dd><p>Set OpenCL environment options. This option is only available when
+FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+<p><var>options</var> must be a list of <var>key</var>=<var>value</var> option pairs
+separated by ’:’. See the “OpenCL Options” section in the
+ffmpeg-utils manual for the list of supported options.
+</p></dd>
+</dl>
+
+<a name="AVOptions"></a>
+<h2 class="section"><a href="ffplay.html#toc-AVOptions">3.3 AVOptions</a></h2>
+
+<p>These options are provided directly by the libavformat, libavdevice and
+libavcodec libraries. To see the list of available AVOptions, use the
+‘<samp>-help</samp>’ option. They are separated into two categories:
+</p><dl compact="compact">
+<dt> ‘<samp>generic</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>private</samp>’</dt>
+<dd><p>These options are specific to the given container, device or codec. Private
+options are listed under their corresponding containers/devices/codecs.
+</p></dd>
+</dl>
+
+<p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
+an MP3 file, use the ‘<samp>id3v2_version</samp>’ private option of the MP3
+muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.flac -id3v2_version 3 out.mp3
+</pre></td></tr></table>
+
+<p>All codec AVOptions are per-stream, and thus a stream specifier
+should be attached to them.
+</p>
+<p>Note: the ‘<samp>-nooption</samp>’ syntax cannot be used for boolean
+AVOptions, use ‘<samp>-option 0</samp>’/‘<samp>-option 1</samp>’.
+</p>
+<p>Note: the 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.
+</p>
+<a name="Main-options"></a>
+<h2 class="section"><a href="ffplay.html#toc-Main-options">3.4 Main options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-x <var>width</var></samp>’</dt>
+<dd><p>Force displayed width.
+</p></dd>
+<dt> ‘<samp>-y <var>height</var></samp>’</dt>
+<dd><p>Force displayed height.
+</p></dd>
+<dt> ‘<samp>-s <var>size</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-an</samp>’</dt>
+<dd><p>Disable audio.
+</p></dd>
+<dt> ‘<samp>-vn</samp>’</dt>
+<dd><p>Disable video.
+</p></dd>
+<dt> ‘<samp>-ss <var>pos</var></samp>’</dt>
+<dd><p>Seek to a given position in seconds.
+</p></dd>
+<dt> ‘<samp>-t <var>duration</var></samp>’</dt>
+<dd><p>play <duration> seconds of audio/video
+</p></dd>
+<dt> ‘<samp>-bytes</samp>’</dt>
+<dd><p>Seek by bytes.
+</p></dd>
+<dt> ‘<samp>-nodisp</samp>’</dt>
+<dd><p>Disable graphical display.
+</p></dd>
+<dt> ‘<samp>-f <var>fmt</var></samp>’</dt>
+<dd><p>Force format.
+</p></dd>
+<dt> ‘<samp>-window_title <var>title</var></samp>’</dt>
+<dd><p>Set window title (default is the input filename).
+</p></dd>
+<dt> ‘<samp>-loop <var>number</var></samp>’</dt>
+<dd><p>Loops movie playback <number> times. 0 means forever.
+</p></dd>
+<dt> ‘<samp>-showmode <var>mode</var></samp>’</dt>
+<dd><p>Set the show mode to use.
+Available values for <var>mode</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>0, video</samp>’</dt>
+<dd><p>show video
+</p></dd>
+<dt> ‘<samp>1, waves</samp>’</dt>
+<dd><p>show audio waves
+</p></dd>
+<dt> ‘<samp>2, rdft</samp>’</dt>
+<dd><p>show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform)
+</p></dd>
+</dl>
+
+<p>Default value is "video", if video is not present or cannot be played
+"rdft" is automatically selected.
+</p>
+<p>You can interactively cycle through the available show modes by
+pressing the key <w>.
+</p>
+</dd>
+<dt> ‘<samp>-vf <var>filtergraph</var></samp>’</dt>
+<dd><p>Create the filtergraph specified by <var>filtergraph</var> and use it to
+filter the video stream.
+</p>
+<p><var>filtergraph</var> is a description of the filtergraph to apply to
+the stream, and must have a single video input and a single video
+output. In the filtergraph, the input is associated to the label
+<code>in</code>, and the output to the label <code>out</code>. See the
+ffmpeg-filters manual for more information about the filtergraph
+syntax.
+</p>
+</dd>
+<dt> ‘<samp>-af <var>filtergraph</var></samp>’</dt>
+<dd><p><var>filtergraph</var> is a description of the filtergraph to apply to
+the input audio.
+Use the option "-filters" to show all the available filters (including
+sources and sinks).
+</p>
+</dd>
+<dt> ‘<samp>-i <var>input_file</var></samp>’</dt>
+<dd><p>Read <var>input_file</var>.
+</p></dd>
+</dl>
+
+<a name="Advanced-options"></a>
+<h2 class="section"><a href="ffplay.html#toc-Advanced-options">3.5 Advanced options</a></h2>
+<dl compact="compact">
+<dt> ‘<samp>-pix_fmt <var>format</var></samp>’</dt>
+<dd><p>Set pixel format.
+This option has been deprecated in favor of private options, try -pixel_format.
+</p>
+</dd>
+<dt> ‘<samp>-stats</samp>’</dt>
+<dd><p>Print several playback statistics, in particular show the stream
+duration, the codec parameters, the current position in the stream and
+the audio/video synchronisation drift. It is on by default, to
+explicitly disable it you need to specify <code>-nostats</code>.
+</p>
+</dd>
+<dt> ‘<samp>-bug</samp>’</dt>
+<dd><p>Work around bugs.
+</p></dd>
+<dt> ‘<samp>-fast</samp>’</dt>
+<dd><p>Non-spec-compliant optimizations.
+</p></dd>
+<dt> ‘<samp>-genpts</samp>’</dt>
+<dd><p>Generate pts.
+</p></dd>
+<dt> ‘<samp>-rtp_tcp</samp>’</dt>
+<dd><p>Force RTP/TCP protocol usage instead of RTP/UDP. It is only meaningful
+if you are streaming with the RTSP protocol.
+</p></dd>
+<dt> ‘<samp>-sync <var>type</var></samp>’</dt>
+<dd><p>Set the master clock to audio (<code>type=audio</code>), video
+(<code>type=video</code>) or external (<code>type=ext</code>). 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.
+</p></dd>
+<dt> ‘<samp>-threads <var>count</var></samp>’</dt>
+<dd><p>Set the thread count.
+</p></dd>
+<dt> ‘<samp>-ast <var>audio_stream_number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-vst <var>video_stream_number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-sst <var>subtitle_stream_number</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>-autoexit</samp>’</dt>
+<dd><p>Exit when video is done playing.
+</p></dd>
+<dt> ‘<samp>-exitonkeydown</samp>’</dt>
+<dd><p>Exit if any key is pressed.
+</p></dd>
+<dt> ‘<samp>-exitonmousedown</samp>’</dt>
+<dd><p>Exit if any mouse button is pressed.
+</p>
+</dd>
+<dt> ‘<samp>-codec:<var>media_specifier</var> <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific decoder implementation for the stream identified by
+<var>media_specifier</var>, which can assume the values <code>a</code> (audio),
+<code>v</code> (video), and <code>s</code> subtitle.
+</p>
+</dd>
+<dt> ‘<samp>-acodec <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific audio decoder.
+</p>
+</dd>
+<dt> ‘<samp>-vcodec <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific video decoder.
+</p>
+</dd>
+<dt> ‘<samp>-scodec <var>codec_name</var></samp>’</dt>
+<dd><p>Force a specific subtitle decoder.
+</p></dd>
+</dl>
+
+<a name="While-playing"></a>
+<h2 class="section"><a href="ffplay.html#toc-While-playing">3.6 While playing</a></h2>
+
+<dl compact="compact">
+<dt> <q, ESC></dt>
+<dd><p>Quit.
+</p>
+</dd>
+<dt> <f></dt>
+<dd><p>Toggle full screen.
+</p>
+</dd>
+<dt> <p, SPC></dt>
+<dd><p>Pause.
+</p>
+</dd>
+<dt> <a></dt>
+<dd><p>Cycle audio channel in the curret program.
+</p>
+</dd>
+<dt> <v></dt>
+<dd><p>Cycle video channel.
+</p>
+</dd>
+<dt> <t></dt>
+<dd><p>Cycle subtitle channel in the current program.
+</p>
+</dd>
+<dt> <c></dt>
+<dd><p>Cycle program.
+</p>
+</dd>
+<dt> <w></dt>
+<dd><p>Show audio waves.
+</p>
+</dd>
+<dt> <s></dt>
+<dd><p>Step to the next frame.
+</p>
+<p>Pause if the stream is not already paused, step to the next video
+frame, and pause.
+</p>
+</dd>
+<dt> <left/right></dt>
+<dd><p>Seek backward/forward 10 seconds.
+</p>
+</dd>
+<dt> <down/up></dt>
+<dd><p>Seek backward/forward 1 minute.
+</p>
+</dd>
+<dt> <page down/page up></dt>
+<dd><p>Seek to the previous/next chapter.
+or if there are no chapters
+Seek backward/forward 10 minutes.
+</p>
+</dd>
+<dt> <mouse click></dt>
+<dd><p>Seek to percentage in file corresponding to fraction of width.
+</p>
+</dd>
+</dl>
+
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffplay.html#toc-See-Also">4. See Also</a></h1>
+
+<p><a href="ffplay-all.html">ffmpeg-all</a>,
+<a href="ffmpeg.html">ffmpeg</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
+<a href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffplay.html#toc-Authors">5. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : ffprobe </title>
+
+<meta name="description" content="ffprobe Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : ffprobe ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">ffprobe Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Synopsis" href="#Synopsis">1. Synopsis</a></li>
+ <li><a name="toc-Description" href="#Description">2. Description</a></li>
+ <li><a name="toc-Options-3" href="#Options-3">3. Options</a>
+ <ul class="toc">
+ <li><a name="toc-Stream-specifiers-1" href="#Stream-specifiers-1">3.1 Stream specifiers</a></li>
+ <li><a name="toc-Generic-options" href="#Generic-options">3.2 Generic options</a></li>
+ <li><a name="toc-AVOptions" href="#AVOptions">3.3 AVOptions</a></li>
+ <li><a name="toc-Main-options" href="#Main-options">3.4 Main options</a></li>
+ </ul></li>
+ <li><a name="toc-Writers" href="#Writers">4. Writers</a>
+ <ul class="toc">
+ <li><a name="toc-default" href="#default">4.1 default</a></li>
+ <li><a name="toc-compact_002c-csv" href="#compact_002c-csv">4.2 compact, csv</a></li>
+ <li><a name="toc-flat" href="#flat">4.3 flat</a></li>
+ <li><a name="toc-ini" href="#ini">4.4 ini</a></li>
+ <li><a name="toc-json" href="#json">4.5 json</a></li>
+ <li><a name="toc-xml" href="#xml">4.6 xml</a></li>
+ </ul></li>
+ <li><a name="toc-Timecode" href="#Timecode">5. Timecode</a></li>
+ <li><a name="toc-Syntax-1" href="#Syntax-1">6. Syntax</a>
+ <ul class="toc">
+ <li><a name="toc-Quoting-and-escaping" href="#Quoting-and-escaping">6.1 Quoting and escaping</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-30" href="#Examples-30">6.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Date" href="#Date">6.2 Date</a></li>
+ <li><a name="toc-Time-duration" href="#Time-duration">6.3 Time duration</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-12" href="#Examples-12">6.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-Video-size" href="#Video-size">6.4 Video size</a></li>
+ <li><a name="toc-Video-rate" href="#Video-rate">6.5 Video rate</a></li>
+ <li><a name="toc-Ratio" href="#Ratio">6.6 Ratio</a></li>
+ <li><a name="toc-Color" href="#Color">6.7 Color</a></li>
+ <li><a name="toc-Channel-Layout" href="#Channel-Layout">6.8 Channel Layout</a></li>
+ </ul></li>
+ <li><a name="toc-Expression-Evaluation" href="#Expression-Evaluation">7. Expression Evaluation</a></li>
+ <li><a name="toc-OpenCL-Options" href="#OpenCL-Options">8. OpenCL Options</a></li>
+ <li><a name="toc-Codec-Options" href="#Codec-Options">9. Codec Options</a></li>
+ <li><a name="toc-Decoders" href="#Decoders">10. Decoders</a></li>
+ <li><a name="toc-Video-Decoders" href="#Video-Decoders">11. Video Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-rawvideo" href="#rawvideo">11.1 rawvideo</a>
+ <ul class="toc">
+ <li><a name="toc-Options-1" href="#Options-1">11.1.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Decoders" href="#Audio-Decoders">12. Audio Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-ac3" href="#ac3">12.1 ac3</a>
+ <ul class="toc">
+ <li><a name="toc-AC_002d3-Decoder-Options" href="#AC_002d3-Decoder-Options">12.1.1 AC-3 Decoder Options</a></li>
+ </ul></li>
+ <li><a name="toc-ffwavesynth" href="#ffwavesynth">12.2 ffwavesynth</a></li>
+ <li><a name="toc-libcelt" href="#libcelt">12.3 libcelt</a></li>
+ <li><a name="toc-libgsm" href="#libgsm">12.4 libgsm</a></li>
+ <li><a name="toc-libilbc" href="#libilbc">12.5 libilbc</a>
+ <ul class="toc">
+ <li><a name="toc-Options-11" href="#Options-11">12.5.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libopencore_002damrnb" href="#libopencore_002damrnb">12.6 libopencore-amrnb</a></li>
+ <li><a name="toc-libopencore_002damrwb" href="#libopencore_002damrwb">12.7 libopencore-amrwb</a></li>
+ <li><a name="toc-libopus" href="#libopus">12.8 libopus</a></li>
+ </ul></li>
+ <li><a name="toc-Subtitles-Decoders" href="#Subtitles-Decoders">13. Subtitles Decoders</a>
+ <ul class="toc">
+ <li><a name="toc-dvdsub" href="#dvdsub">13.1 dvdsub</a>
+ <ul class="toc">
+ <li><a name="toc-Options-7" href="#Options-7">13.1.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-libzvbi_002dteletext" href="#libzvbi_002dteletext">13.2 libzvbi-teletext</a>
+ <ul class="toc">
+ <li><a name="toc-Options-12" href="#Options-12">13.2.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Bitstream-Filters" href="#Bitstream-Filters">14. Bitstream Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aac_005fadtstoasc" href="#aac_005fadtstoasc">14.1 aac_adtstoasc</a></li>
+ <li><a name="toc-chomp" href="#chomp">14.2 chomp</a></li>
+ <li><a name="toc-dump_005fextra" href="#dump_005fextra">14.3 dump_extra</a></li>
+ <li><a name="toc-h264_005fmp4toannexb" href="#h264_005fmp4toannexb">14.4 h264_mp4toannexb</a></li>
+ <li><a name="toc-imx_005fdump_005fheader" href="#imx_005fdump_005fheader">14.5 imx_dump_header</a></li>
+ <li><a name="toc-mjpeg2jpeg" href="#mjpeg2jpeg">14.6 mjpeg2jpeg</a></li>
+ <li><a name="toc-mjpega_005fdump_005fheader" href="#mjpega_005fdump_005fheader">14.7 mjpega_dump_header</a></li>
+ <li><a name="toc-movsub" href="#movsub">14.8 movsub</a></li>
+ <li><a name="toc-mp3_005fheader_005fdecompress" href="#mp3_005fheader_005fdecompress">14.9 mp3_header_decompress</a></li>
+ <li><a name="toc-noise" href="#noise">14.10 noise</a></li>
+ <li><a name="toc-remove_005fextra" href="#remove_005fextra">14.11 remove_extra</a></li>
+ </ul></li>
+ <li><a name="toc-Format-Options" href="#Format-Options">15. Format Options</a>
+ <ul class="toc">
+ <li><a name="toc-Format-stream-specifiers-1" href="#Format-stream-specifiers-1">15.1 Format stream specifiers</a></li>
+ </ul></li>
+ <li><a name="toc-Demuxers" href="#Demuxers">16. Demuxers</a>
+ <ul class="toc">
+ <li><a name="toc-applehttp" href="#applehttp">16.1 applehttp</a></li>
+ <li><a name="toc-asf" href="#asf">16.2 asf</a></li>
+ <li><a name="toc-concat-2" href="#concat-2">16.3 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax-2" href="#Syntax-2">16.3.1 Syntax</a></li>
+ <li><a name="toc-Options-8" href="#Options-8">16.3.2 Options</a></li>
+ </ul></li>
+ <li><a name="toc-flv" href="#flv">16.4 flv</a></li>
+ <li><a name="toc-libgme" href="#libgme">16.5 libgme</a></li>
+ <li><a name="toc-libquvi" href="#libquvi">16.6 libquvi</a></li>
+ <li><a name="toc-image2" href="#image2">16.7 image2</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-76" href="#Examples-76">16.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpegts" href="#mpegts">16.8 mpegts</a></li>
+ <li><a name="toc-rawvideo-1" href="#rawvideo-1">16.9 rawvideo</a></li>
+ <li><a name="toc-sbg" href="#sbg">16.10 sbg</a></li>
+ <li><a name="toc-tedcaptions" href="#tedcaptions">16.11 tedcaptions</a></li>
+ </ul></li>
+ <li><a name="toc-Metadata" href="#Metadata">17. Metadata</a></li>
+ <li><a name="toc-Protocols" href="#Protocols">18. Protocols</a>
+ <ul class="toc">
+ <li><a name="toc-bluray" href="#bluray">18.1 bluray</a></li>
+ <li><a name="toc-cache" href="#cache">18.2 cache</a></li>
+ <li><a name="toc-concat-1" href="#concat-1">18.3 concat</a></li>
+ <li><a name="toc-crypto" href="#crypto">18.4 crypto</a></li>
+ <li><a name="toc-data" href="#data">18.5 data</a></li>
+ <li><a name="toc-file" href="#file">18.6 file</a></li>
+ <li><a name="toc-ftp" href="#ftp">18.7 ftp</a></li>
+ <li><a name="toc-gopher" href="#gopher">18.8 gopher</a></li>
+ <li><a name="toc-hls" href="#hls">18.9 hls</a></li>
+ <li><a name="toc-http" href="#http">18.10 http</a>
+ <ul class="toc">
+ <li><a name="toc-HTTP-Cookies" href="#HTTP-Cookies">18.10.1 HTTP Cookies</a></li>
+ </ul></li>
+ <li><a name="toc-mmst" href="#mmst">18.11 mmst</a></li>
+ <li><a name="toc-mmsh" href="#mmsh">18.12 mmsh</a></li>
+ <li><a name="toc-md5" href="#md5">18.13 md5</a></li>
+ <li><a name="toc-pipe" href="#pipe">18.14 pipe</a></li>
+ <li><a name="toc-rtmp" href="#rtmp">18.15 rtmp</a></li>
+ <li><a name="toc-rtmpe" href="#rtmpe">18.16 rtmpe</a></li>
+ <li><a name="toc-rtmps" href="#rtmps">18.17 rtmps</a></li>
+ <li><a name="toc-rtmpt" href="#rtmpt">18.18 rtmpt</a></li>
+ <li><a name="toc-rtmpte" href="#rtmpte">18.19 rtmpte</a></li>
+ <li><a name="toc-rtmpts" href="#rtmpts">18.20 rtmpts</a></li>
+ <li><a name="toc-libssh" href="#libssh">18.21 libssh</a></li>
+ <li><a name="toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte" href="#librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">18.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></li>
+ <li><a name="toc-rtp" href="#rtp">18.23 rtp</a></li>
+ <li><a name="toc-rtsp" href="#rtsp">18.24 rtsp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-45" href="#Examples-45">18.24.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sap" href="#sap">18.25 sap</a>
+ <ul class="toc">
+ <li><a name="toc-Muxer" href="#Muxer">18.25.1 Muxer</a></li>
+ <li><a name="toc-Demuxer" href="#Demuxer">18.25.2 Demuxer</a></li>
+ </ul></li>
+ <li><a name="toc-sctp" href="#sctp">18.26 sctp</a></li>
+ <li><a name="toc-srtp" href="#srtp">18.27 srtp</a></li>
+ <li><a name="toc-tcp" href="#tcp">18.28 tcp</a></li>
+ <li><a name="toc-tls" href="#tls">18.29 tls</a></li>
+ <li><a name="toc-udp" href="#udp">18.30 udp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-13" href="#Examples-13">18.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-unix" href="#unix">18.31 unix</a></li>
+ </ul></li>
+ <li><a name="toc-Device-Options" href="#Device-Options">19. Device Options</a></li>
+ <li><a name="toc-Input-Devices" href="#Input-Devices">20. Input Devices</a>
+ <ul class="toc">
+ <li><a name="toc-alsa" href="#alsa">20.1 alsa</a></li>
+ <li><a name="toc-bktr" href="#bktr">20.2 bktr</a></li>
+ <li><a name="toc-dshow" href="#dshow">20.3 dshow</a>
+ <ul class="toc">
+ <li><a name="toc-Options-9" href="#Options-9">20.3.1 Options</a></li>
+ <li><a name="toc-Examples-42" href="#Examples-42">20.3.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dv1394" href="#dv1394">20.4 dv1394</a></li>
+ <li><a name="toc-fbdev" href="#fbdev">20.5 fbdev</a></li>
+ <li><a name="toc-iec61883" href="#iec61883">20.6 iec61883</a>
+ <ul class="toc">
+ <li><a name="toc-Options-13" href="#Options-13">20.6.1 Options</a></li>
+ <li><a name="toc-Examples-71" href="#Examples-71">20.6.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-jack" href="#jack">20.7 jack</a></li>
+ <li><a name="toc-lavfi" href="#lavfi">20.8 lavfi</a>
+ <ul class="toc">
+ <li><a name="toc-Options-5" href="#Options-5">20.8.1 Options</a></li>
+ <li><a name="toc-Examples-54" href="#Examples-54">20.8.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-libdc1394" href="#libdc1394">20.9 libdc1394</a></li>
+ <li><a name="toc-openal" href="#openal">20.10 openal</a>
+ <ul class="toc">
+ <li><a name="toc-Options-2" href="#Options-2">20.10.1 Options</a></li>
+ <li><a name="toc-Examples-19" href="#Examples-19">20.10.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-oss" href="#oss">20.11 oss</a></li>
+ <li><a name="toc-pulse" href="#pulse">20.12 pulse</a>
+ <ul class="toc">
+ <li><a name="toc-Options-4" href="#Options-4">20.12.1 Options</a></li>
+ <li><a name="toc-Examples-73" href="#Examples-73">20.12.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sndio" href="#sndio">20.13 sndio</a></li>
+ <li><a name="toc-video4linux2_002c-v4l2" href="#video4linux2_002c-v4l2">20.14 video4linux2, v4l2</a>
+ <ul class="toc">
+ <li><a name="toc-Options-14" href="#Options-14">20.14.1 Options</a></li>
+ </ul></li>
+ <li><a name="toc-vfwcap" href="#vfwcap">20.15 vfwcap</a></li>
+ <li><a name="toc-x11grab" href="#x11grab">20.16 x11grab</a>
+ <ul class="toc">
+ <li><a name="toc-Options" href="#Options">20.16.1 Options</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Resampler-Options" href="#Resampler-Options">21. Resampler Options</a></li>
+ <li><a name="toc-Scaler-Options" href="#Scaler-Options">22. Scaler Options</a></li>
+ <li><a name="toc-Filtering-Introduction" href="#Filtering-Introduction">23. Filtering Introduction</a></li>
+ <li><a name="toc-graph2dot" href="#graph2dot">24. graph2dot</a></li>
+ <li><a name="toc-Filtergraph-description" href="#Filtergraph-description">25. Filtergraph description</a>
+ <ul class="toc">
+ <li><a name="toc-Filtergraph-syntax-1" href="#Filtergraph-syntax-1">25.1 Filtergraph syntax</a></li>
+ <li><a name="toc-Notes-on-filtergraph-escaping" href="#Notes-on-filtergraph-escaping">25.2 Notes on filtergraph escaping</a></li>
+ </ul></li>
+ <li><a name="toc-Timeline-editing" href="#Timeline-editing">26. Timeline editing</a></li>
+ <li><a name="toc-Audio-Filters" href="#Audio-Filters">27. Audio Filters</a>
+ <ul class="toc">
+ <li><a name="toc-aconvert" href="#aconvert">27.1 aconvert</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-49" href="#Examples-49">27.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-adelay" href="#adelay">27.2 adelay</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-62" href="#Examples-62">27.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aecho" href="#aecho">27.3 aecho</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-39" href="#Examples-39">27.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aeval" href="#aeval">27.4 aeval</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-75" href="#Examples-75">27.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-afade" href="#afade">27.5 afade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-47" href="#Examples-47">27.5.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aformat-1" href="#aformat-1">27.6 aformat</a></li>
+ <li><a name="toc-allpass" href="#allpass">27.7 allpass</a></li>
+ <li><a name="toc-amerge" href="#amerge">27.8 amerge</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-35" href="#Examples-35">27.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-amix" href="#amix">27.9 amix</a></li>
+ <li><a name="toc-anull" href="#anull">27.10 anull</a></li>
+ <li><a name="toc-apad" href="#apad">27.11 apad</a></li>
+ <li><a name="toc-aphaser" href="#aphaser">27.12 aphaser</a></li>
+ <li><a name="toc-aresample-1" href="#aresample-1">27.13 aresample</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-28" href="#Examples-28">27.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asetnsamples" href="#asetnsamples">27.14 asetnsamples</a></li>
+ <li><a name="toc-asetrate" href="#asetrate">27.15 asetrate</a></li>
+ <li><a name="toc-ashowinfo" href="#ashowinfo">27.16 ashowinfo</a></li>
+ <li><a name="toc-astats" href="#astats">27.17 astats</a></li>
+ <li><a name="toc-astreamsync" href="#astreamsync">27.18 astreamsync</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-57" href="#Examples-57">27.18.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-asyncts" href="#asyncts">27.19 asyncts</a></li>
+ <li><a name="toc-atempo" href="#atempo">27.20 atempo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-84" href="#Examples-84">27.20.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-atrim" href="#atrim">27.21 atrim</a></li>
+ <li><a name="toc-bandpass" href="#bandpass">27.22 bandpass</a></li>
+ <li><a name="toc-bandreject" href="#bandreject">27.23 bandreject</a></li>
+ <li><a name="toc-bass" href="#bass">27.24 bass</a></li>
+ <li><a name="toc-biquad" href="#biquad">27.25 biquad</a></li>
+ <li><a name="toc-channelmap" href="#channelmap">27.26 channelmap</a></li>
+ <li><a name="toc-channelsplit" href="#channelsplit">27.27 channelsplit</a></li>
+ <li><a name="toc-compand" href="#compand">27.28 compand</a>
+ <ul class="toc">
+ <li><a name="toc-Examples" href="#Examples">27.28.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-earwax" href="#earwax">27.29 earwax</a></li>
+ <li><a name="toc-equalizer" href="#equalizer">27.30 equalizer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-34" href="#Examples-34">27.30.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-highpass" href="#highpass">27.31 highpass</a></li>
+ <li><a name="toc-join" href="#join">27.32 join</a></li>
+ <li><a name="toc-ladspa" href="#ladspa">27.33 ladspa</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-8" href="#Examples-8">27.33.1 Examples</a></li>
+ <li><a name="toc-Commands-3" href="#Commands-3">27.33.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-lowpass" href="#lowpass">27.34 lowpass</a></li>
+ <li><a name="toc-pan" href="#pan">27.35 pan</a>
+ <ul class="toc">
+ <li><a name="toc-Mixing-examples" href="#Mixing-examples">27.35.1 Mixing examples</a></li>
+ <li><a name="toc-Remapping-examples" href="#Remapping-examples">27.35.2 Remapping examples</a></li>
+ </ul></li>
+ <li><a name="toc-replaygain" href="#replaygain">27.36 replaygain</a></li>
+ <li><a name="toc-resample" href="#resample">27.37 resample</a></li>
+ <li><a name="toc-silencedetect" href="#silencedetect">27.38 silencedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-18" href="#Examples-18">27.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-treble" href="#treble">27.39 treble</a></li>
+ <li><a name="toc-volume" href="#volume">27.40 volume</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-4" href="#Commands-4">27.40.1 Commands</a></li>
+ <li><a name="toc-Examples-36" href="#Examples-36">27.40.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-volumedetect" href="#volumedetect">27.41 volumedetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-7" href="#Examples-7">27.41.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sources" href="#Audio-Sources">28. Audio Sources</a>
+ <ul class="toc">
+ <li><a name="toc-abuffer" href="#abuffer">28.1 abuffer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-23" href="#Examples-23">28.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-aevalsrc" href="#aevalsrc">28.2 aevalsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-20" href="#Examples-20">28.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-anullsrc" href="#anullsrc">28.3 anullsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-67" href="#Examples-67">28.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-flite" href="#flite">28.4 flite</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-27" href="#Examples-27">28.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sine" href="#sine">28.5 sine</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-80" href="#Examples-80">28.5.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Audio-Sinks" href="#Audio-Sinks">29. Audio Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-abuffersink" href="#abuffersink">29.1 abuffersink</a></li>
+ <li><a name="toc-anullsink" href="#anullsink">29.2 anullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Filters" href="#Video-Filters">30. Video Filters</a>
+ <ul class="toc">
+ <li><a name="toc-alphaextract" href="#alphaextract">30.1 alphaextract</a></li>
+ <li><a name="toc-alphamerge" href="#alphamerge">30.2 alphamerge</a></li>
+ <li><a name="toc-ass" href="#ass">30.3 ass</a></li>
+ <li><a name="toc-bbox" href="#bbox">30.4 bbox</a></li>
+ <li><a name="toc-blackdetect" href="#blackdetect">30.5 blackdetect</a></li>
+ <li><a name="toc-blackframe" href="#blackframe">30.6 blackframe</a></li>
+ <li><a name="toc-blend" href="#blend">30.7 blend</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-52" href="#Examples-52">30.7.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-boxblur" href="#boxblur">30.8 boxblur</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-41" href="#Examples-41">30.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorbalance" href="#colorbalance">30.9 colorbalance</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-81" href="#Examples-81">30.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colorchannelmixer" href="#colorchannelmixer">30.10 colorchannelmixer</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-5" href="#Examples-5">30.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-colormatrix" href="#colormatrix">30.11 colormatrix</a></li>
+ <li><a name="toc-copy" href="#copy">30.12 copy</a></li>
+ <li><a name="toc-crop" href="#crop">30.13 crop</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-60" href="#Examples-60">30.13.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-cropdetect" href="#cropdetect">30.14 cropdetect</a></li>
+ <li><a name="toc-curves-1" href="#curves-1">30.15 curves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-51" href="#Examples-51">30.15.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-dctdnoiz" href="#dctdnoiz">30.16 dctdnoiz</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-10" href="#Examples-10">30.16.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-decimate-1" href="#decimate-1">30.17 decimate</a></li>
+ <li><a name="toc-dejudder" href="#dejudder">30.18 dejudder</a></li>
+ <li><a name="toc-delogo" href="#delogo">30.19 delogo</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-21" href="#Examples-21">30.19.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-deshake" href="#deshake">30.20 deshake</a></li>
+ <li><a name="toc-drawbox" href="#drawbox">30.21 drawbox</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-2" href="#Examples-2">30.21.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawgrid" href="#drawgrid">30.22 drawgrid</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-72" href="#Examples-72">30.22.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-drawtext-1" href="#drawtext-1">30.23 drawtext</a>
+ <ul class="toc">
+ <li><a name="toc-Syntax" href="#Syntax">30.23.1 Syntax</a></li>
+ <li><a name="toc-Text-expansion" href="#Text-expansion">30.23.2 Text expansion</a></li>
+ <li><a name="toc-Examples-40" href="#Examples-40">30.23.3 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-edgedetect" href="#edgedetect">30.24 edgedetect</a></li>
+ <li><a name="toc-extractplanes" href="#extractplanes">30.25 extractplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-16" href="#Examples-16">30.25.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-elbg" href="#elbg">30.26 elbg</a></li>
+ <li><a name="toc-fade" href="#fade">30.27 fade</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-43" href="#Examples-43">30.27.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-field" href="#field">30.28 field</a></li>
+ <li><a name="toc-fieldmatch" href="#fieldmatch">30.29 fieldmatch</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn_002fu_002fb-meaning-1" href="#p_002fc_002fn_002fu_002fb-meaning-1">30.29.1 p/c/n/u/b meaning</a>
+ <ul class="toc">
+ <li><a name="toc-p_002fc_002fn" href="#p_002fc_002fn">30.29.1.1 p/c/n</a></li>
+ <li><a name="toc-u_002fb" href="#u_002fb">30.29.1.2 u/b</a></li>
+ </ul></li>
+ <li><a name="toc-Examples-66" href="#Examples-66">30.29.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fieldorder" href="#fieldorder">30.30 fieldorder</a></li>
+ <li><a name="toc-fifo" href="#fifo">30.31 fifo</a></li>
+ <li><a name="toc-format-1" href="#format-1">30.32 format</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-59" href="#Examples-59">30.32.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-fps-1" href="#fps-1">30.33 fps</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-74" href="#Examples-74">30.33.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-framepack" href="#framepack">30.34 framepack</a></li>
+ <li><a name="toc-framestep" href="#framestep">30.35 framestep</a></li>
+ <li><a name="toc-frei0r-1" href="#frei0r-1">30.36 frei0r</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-68" href="#Examples-68">30.36.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-geq" href="#geq">30.37 geq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-17" href="#Examples-17">30.37.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-gradfun" href="#gradfun">30.38 gradfun</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-33" href="#Examples-33">30.38.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-haldclut-1" href="#haldclut-1">30.39 haldclut</a>
+ <ul class="toc">
+ <li><a name="toc-Workflow-examples" href="#Workflow-examples">30.39.1 Workflow examples</a>
+ <ul class="toc">
+ <li><a name="toc-Hald-CLUT-video-stream" href="#Hald-CLUT-video-stream">30.39.1.1 Hald CLUT video stream</a></li>
+ <li><a name="toc-Hald-CLUT-with-preview" href="#Hald-CLUT-with-preview">30.39.1.2 Hald CLUT with preview</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-hflip" href="#hflip">30.40 hflip</a></li>
+ <li><a name="toc-histeq" href="#histeq">30.41 histeq</a></li>
+ <li><a name="toc-histogram" href="#histogram">30.42 histogram</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-4" href="#Examples-4">30.42.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-hqdn3d-1" href="#hqdn3d-1">30.43 hqdn3d</a></li>
+ <li><a name="toc-hue" href="#hue">30.44 hue</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-22" href="#Examples-22">30.44.1 Examples</a></li>
+ <li><a name="toc-Commands-2" href="#Commands-2">30.44.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-idet" href="#idet">30.45 idet</a></li>
+ <li><a name="toc-il" href="#il">30.46 il</a></li>
+ <li><a name="toc-interlace" href="#interlace">30.47 interlace</a></li>
+ <li><a name="toc-kerndeint" href="#kerndeint">30.48 kerndeint</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-29" href="#Examples-29">30.48.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-lut3d-1" href="#lut3d-1">30.49 lut3d</a></li>
+ <li><a name="toc-lut_002c-lutrgb_002c-lutyuv" href="#lut_002c-lutrgb_002c-lutyuv">30.50 lut, lutrgb, lutyuv</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-53" href="#Examples-53">30.50.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mergeplanes" href="#mergeplanes">30.51 mergeplanes</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-31" href="#Examples-31">30.51.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mcdeint" href="#mcdeint">30.52 mcdeint</a></li>
+ <li><a name="toc-mp" href="#mp">30.53 mp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-38" href="#Examples-38">30.53.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mpdecimate" href="#mpdecimate">30.54 mpdecimate</a></li>
+ <li><a name="toc-negate" href="#negate">30.55 negate</a></li>
+ <li><a name="toc-noformat" href="#noformat">30.56 noformat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-15" href="#Examples-15">30.56.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-noise-1" href="#noise-1">30.57 noise</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-69" href="#Examples-69">30.57.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-null" href="#null">30.58 null</a></li>
+ <li><a name="toc-ocv" href="#ocv">30.59 ocv</a>
+ <ul class="toc">
+ <li><a name="toc-dilate-1" href="#dilate-1">30.59.1 dilate</a></li>
+ <li><a name="toc-erode" href="#erode">30.59.2 erode</a></li>
+ <li><a name="toc-smooth" href="#smooth">30.59.3 smooth</a></li>
+ </ul></li>
+ <li><a name="toc-overlay-1" href="#overlay-1">30.60 overlay</a>
+ <ul class="toc">
+ <li><a name="toc-Commands" href="#Commands">30.60.1 Commands</a></li>
+ <li><a name="toc-Examples-63" href="#Examples-63">30.60.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-owdenoise" href="#owdenoise">30.61 owdenoise</a></li>
+ <li><a name="toc-pad" href="#pad">30.62 pad</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-25" href="#Examples-25">30.62.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perspective" href="#perspective">30.63 perspective</a></li>
+ <li><a name="toc-phase" href="#phase">30.64 phase</a></li>
+ <li><a name="toc-pixdesctest" href="#pixdesctest">30.65 pixdesctest</a></li>
+ <li><a name="toc-pp" href="#pp">30.66 pp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-50" href="#Examples-50">30.66.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-psnr" href="#psnr">30.67 psnr</a></li>
+ <li><a name="toc-pullup-1" href="#pullup-1">30.68 pullup</a></li>
+ <li><a name="toc-removelogo" href="#removelogo">30.69 removelogo</a></li>
+ <li><a name="toc-rotate" href="#rotate">30.70 rotate</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-77" href="#Examples-77">30.70.1 Examples</a></li>
+ <li><a name="toc-Commands-5" href="#Commands-5">30.70.2 Commands</a></li>
+ </ul></li>
+ <li><a name="toc-sab" href="#sab">30.71 sab</a></li>
+ <li><a name="toc-scale-1" href="#scale-1">30.72 scale</a>
+ <ul class="toc">
+ <li><a name="toc-Options-6" href="#Options-6">30.72.1 Options</a></li>
+ <li><a name="toc-Examples-83" href="#Examples-83">30.72.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-separatefields" href="#separatefields">30.73 separatefields</a></li>
+ <li><a name="toc-setdar_002c-setsar" href="#setdar_002c-setsar">30.74 setdar, setsar</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-44" href="#Examples-44">30.74.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setfield-1" href="#setfield-1">30.75 setfield</a></li>
+ <li><a name="toc-showinfo" href="#showinfo">30.76 showinfo</a></li>
+ <li><a name="toc-smartblur-1" href="#smartblur-1">30.77 smartblur</a></li>
+ <li><a name="toc-stereo3d" href="#stereo3d">30.78 stereo3d</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-1" href="#Examples-1">30.78.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-spp" href="#spp">30.79 spp</a></li>
+ <li><a name="toc-subtitles-1" href="#subtitles-1">30.80 subtitles</a></li>
+ <li><a name="toc-super2xsai" href="#super2xsai">30.81 super2xsai</a></li>
+ <li><a name="toc-swapuv" href="#swapuv">30.82 swapuv</a></li>
+ <li><a name="toc-telecine" href="#telecine">30.83 telecine</a></li>
+ <li><a name="toc-thumbnail" href="#thumbnail">30.84 thumbnail</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-3" href="#Examples-3">30.84.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tile" href="#tile">30.85 tile</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-55" href="#Examples-55">30.85.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-tinterlace" href="#tinterlace">30.86 tinterlace</a></li>
+ <li><a name="toc-transpose" href="#transpose">30.87 transpose</a></li>
+ <li><a name="toc-trim" href="#trim">30.88 trim</a></li>
+ <li><a name="toc-unsharp" href="#unsharp">30.89 unsharp</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-56" href="#Examples-56">30.89.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabdetect-1" href="#vidstabdetect-1">30.90 vidstabdetect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-46" href="#Examples-46">30.90.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vidstabtransform-1" href="#vidstabtransform-1">30.91 vidstabtransform</a>
+ <ul class="toc">
+ <li><a name="toc-Options-10" href="#Options-10">30.91.1 Options</a></li>
+ <li><a name="toc-Examples-24" href="#Examples-24">30.91.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-vflip" href="#vflip">30.92 vflip</a></li>
+ <li><a name="toc-vignette" href="#vignette">30.93 vignette</a>
+ <ul class="toc">
+ <li><a name="toc-Expressions" href="#Expressions">30.93.1 Expressions</a></li>
+ <li><a name="toc-Examples-65" href="#Examples-65">30.93.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-w3fdif" href="#w3fdif">30.94 w3fdif</a></li>
+ <li><a name="toc-yadif-1" href="#yadif-1">30.95 yadif</a></li>
+ </ul></li>
+ <li><a name="toc-Video-Sources" href="#Video-Sources">31. Video Sources</a>
+ <ul class="toc">
+ <li><a name="toc-buffer" href="#buffer">31.1 buffer</a></li>
+ <li><a name="toc-cellauto" href="#cellauto">31.2 cellauto</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-11" href="#Examples-11">31.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-mandelbrot" href="#mandelbrot">31.3 mandelbrot</a></li>
+ <li><a name="toc-mptestsrc" href="#mptestsrc">31.4 mptestsrc</a></li>
+ <li><a name="toc-frei0r_005fsrc" href="#frei0r_005fsrc">31.5 frei0r_src</a></li>
+ <li><a name="toc-life" href="#life">31.6 life</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-79" href="#Examples-79">31.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc" href="#color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">31.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-1" href="#Commands-1">31.7.1 Commands</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Video-Sinks" href="#Video-Sinks">32. Video Sinks</a>
+ <ul class="toc">
+ <li><a name="toc-buffersink" href="#buffersink">32.1 buffersink</a></li>
+ <li><a name="toc-nullsink" href="#nullsink">32.2 nullsink</a></li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Filters" href="#Multimedia-Filters">33. Multimedia Filters</a>
+ <ul class="toc">
+ <li><a name="toc-avectorscope" href="#avectorscope">33.1 avectorscope</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-48" href="#Examples-48">33.1.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-concat-3" href="#concat-3">33.2 concat</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-82" href="#Examples-82">33.2.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-ebur128" href="#ebur128">33.3 ebur128</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-70" href="#Examples-70">33.3.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-interleave_002c-ainterleave" href="#interleave_002c-ainterleave">33.4 interleave, ainterleave</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-9" href="#Examples-9">33.4.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-perms_002c-aperms" href="#perms_002c-aperms">33.5 perms, aperms</a></li>
+ <li><a name="toc-select_002c-aselect" href="#select_002c-aselect">33.6 select, aselect</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-32" href="#Examples-32">33.6.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-sendcmd_002c-asendcmd" href="#sendcmd_002c-asendcmd">33.7 sendcmd, asendcmd</a>
+ <ul class="toc">
+ <li><a name="toc-Commands-syntax" href="#Commands-syntax">33.7.1 Commands syntax</a></li>
+ <li><a name="toc-Examples-37" href="#Examples-37">33.7.2 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-setpts_002c-asetpts" href="#setpts_002c-asetpts">33.8 setpts, asetpts</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-78" href="#Examples-78">33.8.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-settb_002c-asettb" href="#settb_002c-asettb">33.9 settb, asettb</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-26" href="#Examples-26">33.9.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showspectrum" href="#showspectrum">33.10 showspectrum</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-14" href="#Examples-14">33.10.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-showwaves" href="#showwaves">33.11 showwaves</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-61" href="#Examples-61">33.11.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-split_002c-asplit" href="#split_002c-asplit">33.12 split, asplit</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-64" href="#Examples-64">33.12.1 Examples</a></li>
+ </ul></li>
+ <li><a name="toc-zmq_002c-azmq" href="#zmq_002c-azmq">33.13 zmq, azmq</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-58" href="#Examples-58">33.13.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-Multimedia-Sources" href="#Multimedia-Sources">34. Multimedia Sources</a>
+ <ul class="toc">
+ <li><a name="toc-amovie" href="#amovie">34.1 amovie</a></li>
+ <li><a name="toc-movie-1" href="#movie-1">34.2 movie</a>
+ <ul class="toc">
+ <li><a name="toc-Examples-6" href="#Examples-6">34.2.1 Examples</a></li>
+ </ul>
+</li>
+ </ul></li>
+ <li><a name="toc-See-Also" href="#See-Also">35. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">36. Authors</a></li>
+</ul>
+</div>
+
+<a name="Synopsis"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Synopsis">1. Synopsis</a></h1>
+
+<p>ffprobe [<var>options</var>] [‘<tt>input_file</tt>’]
+</p>
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Description">2. Description</a></h1>
+
+<p>ffprobe gathers information from multimedia streams and prints it in
+human- and machine-readable fashion.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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 ‘<samp>print_format</samp>’ option.
+</p>
+<p>Sections may contain other nested sections, and are identified by a
+name (which may be shared by other sections), and an unique
+name. See the output of ‘<samp>sections</samp>’.
+</p>
+<p>Metadata tags stored in the container or in the streams are recognized
+and printed in the corresponding "FORMAT", "STREAM" or "PROGRAM_STREAM"
+section.
+</p>
+
+<a name="Options-3"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Options-3">3. Options</a></h1>
+
+<p>All the numerical options, if not specified otherwise, accept a string
+representing a number as input, which may be followed by one of the SI
+unit prefixes, for example: ’K’, ’M’, or ’G’.
+</p>
+<p>If ’i’ is appended to the SI unit prefix, the complete prefix will be
+interpreted as a unit prefix for binary multiplies, which are based on
+powers of 1024 instead of powers of 1000. Appending ’B’ to the SI unit
+prefix multiplies the value by 8. This allows using, for example:
+’KB’, ’MiB’, ’G’ and ’B’ as number suffixes.
+</p>
+<p>Options which do not take arguments are boolean options, and set the
+corresponding value to true. They can be set to false by prefixing
+the option name with "no". For example using "-nofoo"
+will set the boolean option with name "foo" to false.
+</p>
+<p><a name="Stream-specifiers"></a>
+</p><a name="Stream-specifiers-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Stream-specifiers-1">3.1 Stream specifiers</a></h2>
+<p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
+are used to precisely specify which stream(s) a given option belongs to.
+</p>
+<p>A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. <code>-codec:a:1 ac3</code> contains the
+<code>a:1</code> stream specifier, which matches the second audio stream. Therefore, it
+would select the ac3 codec for the second audio stream.
+</p>
+<p>A stream specifier can match several streams, so that the option is applied to all
+of them. E.g. the stream specifier in <code>-b:a 128k</code> matches all audio
+streams.
+</p>
+<p>An empty stream specifier matches all streams. For example, <code>-codec copy</code>
+or <code>-codec: copy</code> would copy all the streams without reencoding.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index. E.g. <code>-threads:1 4</code> would set the
+thread count for the second stream to 4.
+</p></dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle,
+’d’ for data, and ’t’ for attachments. If <var>stream_index</var> is given, then it matches
+stream number <var>stream_index</var> of this type. Otherwise, it matches all
+streams of this type.
+</p></dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number <var>stream_index</var>
+in the program with the id <var>program_id</var>. Otherwise, it matches all streams in the
+program.
+</p></dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<a name="Generic-options"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Generic-options">3.2 Generic options</a></h2>
+
+<p>These options are shared amongst the ff* tools.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-L</samp>’</dt>
+<dd><p>Show license.
+</p>
+</dd>
+<dt> ‘<samp>-h, -?, -help, --help [<var>arg</var>]</samp>’</dt>
+<dd><p>Show help. An optional parameter may be specified to print help about a specific
+item. If no argument is specified, only basic (non advanced) tool
+options are shown.
+</p>
+<p>Possible values of <var>arg</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>long</samp>’</dt>
+<dd><p>Print advanced tool options in addition to the basic tool options.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Print complete list of options, including shared and private options
+for encoders, decoders, demuxers, muxers, filters, etc.
+</p>
+</dd>
+<dt> ‘<samp>decoder=<var>decoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the decoder named <var>decoder_name</var>. Use the
+‘<samp>-decoders</samp>’ option to get a list of all decoders.
+</p>
+</dd>
+<dt> ‘<samp>encoder=<var>encoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the encoder named <var>encoder_name</var>. Use the
+‘<samp>-encoders</samp>’ option to get a list of all encoders.
+</p>
+</dd>
+<dt> ‘<samp>demuxer=<var>demuxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the demuxer named <var>demuxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all demuxers and muxers.
+</p>
+</dd>
+<dt> ‘<samp>muxer=<var>muxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the muxer named <var>muxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all muxers and demuxers.
+</p>
+</dd>
+<dt> ‘<samp>filter=<var>filter_name</var></samp>’</dt>
+<dd><p>Print detailed information about the filter name <var>filter_name</var>. Use the
+‘<samp>-filters</samp>’ option to get a list of all filters.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-version</samp>’</dt>
+<dd><p>Show version.
+</p>
+</dd>
+<dt> ‘<samp>-formats</samp>’</dt>
+<dd><p>Show available formats.
+</p>
+</dd>
+<dt> ‘<samp>-codecs</samp>’</dt>
+<dd><p>Show all codecs known to libavcodec.
+</p>
+<p>Note that the term ’codec’ is used throughout this documentation as a shortcut
+for what is more correctly called a media bitstream format.
+</p>
+</dd>
+<dt> ‘<samp>-decoders</samp>’</dt>
+<dd><p>Show available decoders.
+</p>
+</dd>
+<dt> ‘<samp>-encoders</samp>’</dt>
+<dd><p>Show all available encoders.
+</p>
+</dd>
+<dt> ‘<samp>-bsfs</samp>’</dt>
+<dd><p>Show available bitstream filters.
+</p>
+</dd>
+<dt> ‘<samp>-protocols</samp>’</dt>
+<dd><p>Show available protocols.
+</p>
+</dd>
+<dt> ‘<samp>-filters</samp>’</dt>
+<dd><p>Show available libavfilter filters.
+</p>
+</dd>
+<dt> ‘<samp>-pix_fmts</samp>’</dt>
+<dd><p>Show available pixel formats.
+</p>
+</dd>
+<dt> ‘<samp>-sample_fmts</samp>’</dt>
+<dd><p>Show available sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-layouts</samp>’</dt>
+<dd><p>Show channel names and standard channel layouts.
+</p>
+</dd>
+<dt> ‘<samp>-colors</samp>’</dt>
+<dd><p>Show recognized color names.
+</p>
+</dd>
+<dt> ‘<samp>-loglevel [repeat+]<var>loglevel</var> | -v [repeat+]<var>loglevel</var></samp>’</dt>
+<dd><p>Set the logging level used by the library.
+Adding "repeat+" indicates that repeated log output should not be compressed
+to the first line and the "Last message repeated n times" line will be
+omitted. "repeat" can also be used alone.
+If "repeat" is used alone, and with no prior loglevel set, the default
+loglevel will be used. If multiple loglevel parameters are given, using
+’repeat’ will not change the loglevel.
+<var>loglevel</var> is a number or a string containing one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>quiet</samp>’</dt>
+<dd><p>Show nothing at all; be silent.
+</p></dd>
+<dt> ‘<samp>panic</samp>’</dt>
+<dd><p>Only show fatal errors which could lead the process to crash, such as
+and assert failure. This is not currently used for anything.
+</p></dd>
+<dt> ‘<samp>fatal</samp>’</dt>
+<dd><p>Only show fatal errors. These are errors after which the process absolutely
+cannot continue after.
+</p></dd>
+<dt> ‘<samp>error</samp>’</dt>
+<dd><p>Show all errors, including ones which can be recovered from.
+</p></dd>
+<dt> ‘<samp>warning</samp>’</dt>
+<dd><p>Show all warnings and errors. Any message related to possibly
+incorrect or unexpected events will be shown.
+</p></dd>
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>Show informative messages during processing. This is in addition to
+warnings and errors. This is the default value.
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>Same as <code>info</code>, except more verbose.
+</p></dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Show everything, including debugging information.
+</p></dd>
+</dl>
+
+<p>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
+<code>AV_LOG_FORCE_NOCOLOR</code> or <code>NO_COLOR</code>, or can be forced setting
+the environment variable <code>AV_LOG_FORCE_COLOR</code>.
+The use of the environment variable <code>NO_COLOR</code> is deprecated and
+will be dropped in a following FFmpeg version.
+</p>
+</dd>
+<dt> ‘<samp>-report</samp>’</dt>
+<dd><p>Dump full command line and console output to a file named
+<code><var>program</var>-<var>YYYYMMDD</var>-<var>HHMMSS</var>.log</code> in the current
+directory.
+This file can be useful for bug reports.
+It also implies <code>-loglevel verbose</code>.
+</p>
+<p>Setting the environment variable <code>FFREPORT</code> to any value has the
+same effect. If the value is a ’:’-separated key=value sequence, these
+options will affect the report; options values must be escaped if they
+contain special characters or the options delimiter ’:’ (see the
+“Quoting and escaping” section in the ffmpeg-utils manual). The
+following option is recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>set the file name to use for the report; <code>%p</code> is expanded to the name
+of the program, <code>%t</code> is expanded to a timestamp, <code>%%</code> is expanded
+to a plain <code>%</code>
+</p></dd>
+</dl>
+
+<p>Errors in parsing the environment variable are not fatal, and will not
+appear in the report.
+</p>
+</dd>
+<dt> ‘<samp>-hide_banner</samp>’</dt>
+<dd><p>Suppress printing banner.
+</p>
+<p>All FFmpeg tools will normally show a copyright notice, build options
+and library versions. This option can be used to suppress printing
+this information.
+</p>
+</dd>
+<dt> ‘<samp>-cpuflags flags (<em>global</em>)</samp>’</dt>
+<dd><p>Allows setting and clearing cpu flags. This option is intended
+for testing. Do not use it unless you know what you’re doing.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -cpuflags -sse+mmx ...
+ffmpeg -cpuflags mmx ...
+ffmpeg -cpuflags 0 ...
+</pre></td></tr></table>
+<p>Possible flags for this option are:
+</p><dl compact="compact">
+<dt> ‘<samp>x86</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>mmxext</samp>’</dt>
+<dt> ‘<samp>sse</samp>’</dt>
+<dt> ‘<samp>sse2</samp>’</dt>
+<dt> ‘<samp>sse2slow</samp>’</dt>
+<dt> ‘<samp>sse3</samp>’</dt>
+<dt> ‘<samp>sse3slow</samp>’</dt>
+<dt> ‘<samp>ssse3</samp>’</dt>
+<dt> ‘<samp>atom</samp>’</dt>
+<dt> ‘<samp>sse4.1</samp>’</dt>
+<dt> ‘<samp>sse4.2</samp>’</dt>
+<dt> ‘<samp>avx</samp>’</dt>
+<dt> ‘<samp>xop</samp>’</dt>
+<dt> ‘<samp>fma4</samp>’</dt>
+<dt> ‘<samp>3dnow</samp>’</dt>
+<dt> ‘<samp>3dnowext</samp>’</dt>
+<dt> ‘<samp>cmov</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>ARM</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>armv5te</samp>’</dt>
+<dt> ‘<samp>armv6</samp>’</dt>
+<dt> ‘<samp>armv6t2</samp>’</dt>
+<dt> ‘<samp>vfp</samp>’</dt>
+<dt> ‘<samp>vfpv3</samp>’</dt>
+<dt> ‘<samp>neon</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>PowerPC</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>altivec</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>Specific Processors</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>pentium2</samp>’</dt>
+<dt> ‘<samp>pentium3</samp>’</dt>
+<dt> ‘<samp>pentium4</samp>’</dt>
+<dt> ‘<samp>k6</samp>’</dt>
+<dt> ‘<samp>k62</samp>’</dt>
+<dt> ‘<samp>athlon</samp>’</dt>
+<dt> ‘<samp>athlonxp</samp>’</dt>
+<dt> ‘<samp>k8</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-opencl_bench</samp>’</dt>
+<dd><p>Benchmark all available OpenCL devices and show the results. This option
+is only available when FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+</dd>
+<dt> ‘<samp>-opencl_options options (<em>global</em>)</samp>’</dt>
+<dd><p>Set OpenCL environment options. This option is only available when
+FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+<p><var>options</var> must be a list of <var>key</var>=<var>value</var> option pairs
+separated by ’:’. See the “OpenCL Options” section in the
+ffmpeg-utils manual for the list of supported options.
+</p></dd>
+</dl>
+
+<a name="AVOptions"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-AVOptions">3.3 AVOptions</a></h2>
+
+<p>These options are provided directly by the libavformat, libavdevice and
+libavcodec libraries. To see the list of available AVOptions, use the
+‘<samp>-help</samp>’ option. They are separated into two categories:
+</p><dl compact="compact">
+<dt> ‘<samp>generic</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>private</samp>’</dt>
+<dd><p>These options are specific to the given container, device or codec. Private
+options are listed under their corresponding containers/devices/codecs.
+</p></dd>
+</dl>
+
+<p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
+an MP3 file, use the ‘<samp>id3v2_version</samp>’ private option of the MP3
+muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.flac -id3v2_version 3 out.mp3
+</pre></td></tr></table>
+
+<p>All codec AVOptions are per-stream, and thus a stream specifier
+should be attached to them.
+</p>
+<p>Note: the ‘<samp>-nooption</samp>’ syntax cannot be used for boolean
+AVOptions, use ‘<samp>-option 0</samp>’/‘<samp>-option 1</samp>’.
+</p>
+<p>Note: the 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.
+</p>
+<a name="Main-options"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Main-options">3.4 Main options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-f <var>format</var></samp>’</dt>
+<dd><p>Force format to use.
+</p>
+</dd>
+<dt> ‘<samp>-unit</samp>’</dt>
+<dd><p>Show the unit of the displayed values.
+</p>
+</dd>
+<dt> ‘<samp>-prefix</samp>’</dt>
+<dd><p>Use SI prefixes for the displayed values.
+Unless the "-byte_binary_prefix" option is used all the prefixes
+are decimal.
+</p>
+</dd>
+<dt> ‘<samp>-byte_binary_prefix</samp>’</dt>
+<dd><p>Force the use of binary prefixes for byte values.
+</p>
+</dd>
+<dt> ‘<samp>-sexagesimal</samp>’</dt>
+<dd><p>Use sexagesimal format HH:MM:SS.MICROSECONDS for time values.
+</p>
+</dd>
+<dt> ‘<samp>-pretty</samp>’</dt>
+<dd><p>Prettify the format of the displayed values, it corresponds to the
+options "-unit -prefix -byte_binary_prefix -sexagesimal".
+</p>
+</dd>
+<dt> ‘<samp>-of, -print_format <var>writer_name</var>[=<var>writer_options</var>]</samp>’</dt>
+<dd><p>Set the output printing format.
+</p>
+<p><var>writer_name</var> specifies the name of the writer, and
+<var>writer_options</var> specifies the options to be passed to the writer.
+</p>
+<p>For example for printing the output in JSON format, specify:
+</p><table><tr><td> </td><td><pre class="example">-print_format json
+</pre></td></tr></table>
+
+<p>For more details on the available output printing formats, see the
+Writers section below.
+</p>
+</dd>
+<dt> ‘<samp>-sections</samp>’</dt>
+<dd><p>Print sections structure and section information, and exit. The output
+is not meant to be parsed by a machine.
+</p>
+</dd>
+<dt> ‘<samp>-select_streams <var>stream_specifier</var></samp>’</dt>
+<dd><p>Select only the streams specified by <var>stream_specifier</var>. This
+option affects only the options related to streams
+(e.g. <code>show_streams</code>, <code>show_packets</code>, etc.).
+</p>
+<p>For example to show only audio streams, you can use the command:
+</p><table><tr><td> </td><td><pre class="example">ffprobe -show_streams -select_streams a INPUT
+</pre></td></tr></table>
+
+<p>To show only video packets belonging to the video stream with index 1:
+</p><table><tr><td> </td><td><pre class="example">ffprobe -show_packets -select_streams v:1 INPUT
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-show_data</samp>’</dt>
+<dd><p>Show payload data, as a hexadecimal and ASCII dump. Coupled with
+‘<samp>-show_packets</samp>’, it will dump the packets’ data. Coupled with
+‘<samp>-show_streams</samp>’, it will dump the codec extradata.
+</p>
+<p>The dump is printed as the "data" field. It may contain newlines.
+</p>
+</dd>
+<dt> ‘<samp>-show_error</samp>’</dt>
+<dd><p>Show information about the error found when trying to probe the input.
+</p>
+<p>The error information is printed within a section with name "ERROR".
+</p>
+</dd>
+<dt> ‘<samp>-show_format</samp>’</dt>
+<dd><p>Show information about the container format of the input multimedia
+stream.
+</p>
+<p>All the container format information is printed within a section with
+name "FORMAT".
+</p>
+</dd>
+<dt> ‘<samp>-show_format_entry <var>name</var></samp>’</dt>
+<dd><p>Like ‘<samp>-show_format</samp>’, but only prints the specified entry of the
+container format information, rather than all. This option may be given more
+than once, then all specified entries will be shown.
+</p>
+<p>This option is deprecated, use <code>show_entries</code> instead.
+</p>
+</dd>
+<dt> ‘<samp>-show_entries <var>section_entries</var></samp>’</dt>
+<dd><p>Set list of entries to show.
+</p>
+<p>Entries are specified according to the following
+syntax. <var>section_entries</var> contains a list of section entries
+separated by <code>:</code>. Each section entry is composed by a section
+name (or unique name), optionally followed by a list of entries local
+to that section, separated by <code>,</code>.
+</p>
+<p>If section name is specified but is followed by no <code>=</code>, all
+entries are printed to output, together with all the contained
+sections. Otherwise only the entries specified in the local section
+entries list are printed. In particular, if <code>=</code> is specified but
+the list of local entries is empty, then no entries will be shown for
+that section.
+</p>
+<p>Note that the order of specification of the local section entries is
+not honored in the output, and the usual display order will be
+retained.
+</p>
+<p>The formal syntax is given by:
+</p><table><tr><td> </td><td><pre class="example"><var>LOCAL_SECTION_ENTRIES</var> ::= <var>SECTION_ENTRY_NAME</var>[,<var>LOCAL_SECTION_ENTRIES</var>]
+<var>SECTION_ENTRY</var> ::= <var>SECTION_NAME</var>[=[<var>LOCAL_SECTION_ENTRIES</var>]]
+<var>SECTION_ENTRIES</var> ::= <var>SECTION_ENTRY</var>[:<var>SECTION_ENTRIES</var>]
+</pre></td></tr></table>
+
+<p>For example, to show only the index and type of each stream, and the PTS
+time, duration time, and stream index of the packets, you can specify
+the argument:
+</p><table><tr><td> </td><td><pre class="example">packet=pts_time,duration_time,stream_index : stream=index,codec_type
+</pre></td></tr></table>
+
+<p>To show all the entries in the section "format", but only the codec
+type in the section "stream", specify the argument:
+</p><table><tr><td> </td><td><pre class="example">format : stream=codec_type
+</pre></td></tr></table>
+
+<p>To show all the tags in the stream and format sections:
+</p><table><tr><td> </td><td><pre class="example">format_tags : format_tags
+</pre></td></tr></table>
+
+<p>To show only the <code>title</code> tag (if available) in the stream
+sections:
+</p><table><tr><td> </td><td><pre class="example">stream_tags=title
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-show_packets</samp>’</dt>
+<dd><p>Show information about each packet contained in the input multimedia
+stream.
+</p>
+<p>The information for each single packet is printed within a dedicated
+section with name "PACKET".
+</p>
+</dd>
+<dt> ‘<samp>-show_frames</samp>’</dt>
+<dd><p>Show information about each frame and subtitle contained in the input
+multimedia stream.
+</p>
+<p>The information for each single frame is printed within a dedicated
+section with name "FRAME" or "SUBTITLE".
+</p>
+</dd>
+<dt> ‘<samp>-show_streams</samp>’</dt>
+<dd><p>Show information about each media stream contained in the input
+multimedia stream.
+</p>
+<p>Each media stream information is printed within a dedicated section
+with name "STREAM".
+</p>
+</dd>
+<dt> ‘<samp>-show_programs</samp>’</dt>
+<dd><p>Show information about programs and their streams contained in the input
+multimedia stream.
+</p>
+<p>Each media stream information is printed within a dedicated section
+with name "PROGRAM_STREAM".
+</p>
+</dd>
+<dt> ‘<samp>-show_chapters</samp>’</dt>
+<dd><p>Show information about chapters stored in the format.
+</p>
+<p>Each chapter is printed within a dedicated section with name "CHAPTER".
+</p>
+</dd>
+<dt> ‘<samp>-count_frames</samp>’</dt>
+<dd><p>Count the number of frames per stream and report it in the
+corresponding stream section.
+</p>
+</dd>
+<dt> ‘<samp>-count_packets</samp>’</dt>
+<dd><p>Count the number of packets per stream and report it in the
+corresponding stream section.
+</p>
+</dd>
+<dt> ‘<samp>-read_intervals <var>read_intervals</var></samp>’</dt>
+<dd>
+<p>Read only the specified intervals. <var>read_intervals</var> must be a
+sequence of interval specifications separated by ",".
+<code>ffprobe</code> will seek to the interval starting point, and will
+continue reading from that.
+</p>
+<p>Each interval is specified by two optional parts, separated by "%".
+</p>
+<p>The first part specifies the interval start position. It is
+interpreted as an abolute position, or as a relative offset from the
+current position if it is preceded by the "+" character. If this first
+part is not specified, no seeking will be performed when reading this
+interval.
+</p>
+<p>The second part specifies the interval end position. It is interpreted
+as an absolute position, or as a relative offset from the current
+position if it is preceded by the "+" character. If the offset
+specification starts with "#", it is interpreted as the number of
+packets to read (not including the flushing packets) from the interval
+start. If no second part is specified, the program will read until the
+end of the input.
+</p>
+<p>Note that seeking is not accurate, thus the actual interval start
+point may be different from the specified position. Also, when an
+interval duration is specified, the absolute end time will be computed
+by adding the duration to the interval start point found by seeking
+the file, rather than to the specified start value.
+</p>
+<p>The formal syntax is given by:
+</p><table><tr><td> </td><td><pre class="example"><var>INTERVAL</var> ::= [<var>START</var>|+<var>START_OFFSET</var>][%[<var>END</var>|+<var>END_OFFSET</var>]]
+<var>INTERVALS</var> ::= <var>INTERVAL</var>[,<var>INTERVALS</var>]
+</pre></td></tr></table>
+
+<p>A few examples follow.
+</p><ul>
+<li>
+Seek to time 10, read packets until 20 seconds after the found seek
+point, then seek to position <code>01:30</code> (1 minute and thirty
+seconds) and read packets until position <code>01:45</code>.
+<table><tr><td> </td><td><pre class="example">10%+20,01:30%01:45
+</pre></td></tr></table>
+
+</li><li>
+Read only 42 packets after seeking to position <code>01:23</code>:
+<table><tr><td> </td><td><pre class="example">01:23%+#42
+</pre></td></tr></table>
+
+</li><li>
+Read only the first 20 seconds from the start:
+<table><tr><td> </td><td><pre class="example">%+20
+</pre></td></tr></table>
+
+</li><li>
+Read from the start until position <code>02:30</code>:
+<table><tr><td> </td><td><pre class="example">%02:30
+</pre></td></tr></table>
+</li></ul>
+
+</dd>
+<dt> ‘<samp>-show_private_data, -private</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>-show_program_version</samp>’</dt>
+<dd><p>Show information related to program version.
+</p>
+<p>Version information is printed within a section with name
+"PROGRAM_VERSION".
+</p>
+</dd>
+<dt> ‘<samp>-show_library_versions</samp>’</dt>
+<dd><p>Show information related to library versions.
+</p>
+<p>Version information for each library is printed within a section with
+name "LIBRARY_VERSION".
+</p>
+</dd>
+<dt> ‘<samp>-show_versions</samp>’</dt>
+<dd><p>Show information related to program and library versions. This is the
+equivalent of setting both ‘<samp>-show_program_version</samp>’ and
+‘<samp>-show_library_versions</samp>’ options.
+</p>
+</dd>
+<dt> ‘<samp>-bitexact</samp>’</dt>
+<dd><p>Force bitexact output, useful to produce output which is not dependent
+on the specific build.
+</p>
+</dd>
+<dt> ‘<samp>-i <var>input_file</var></samp>’</dt>
+<dd><p>Read <var>input_file</var>.
+</p>
+</dd>
+</dl>
+
+<a name="Writers"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Writers">4. Writers</a></h1>
+
+<p>A writer defines the output format adopted by <code>ffprobe</code>, and will be
+used for printing all the parts of the output.
+</p>
+<p>A writer may accept one or more arguments, which specify the options
+to adopt. The options are specified as a list of <var>key</var>=<var>value</var>
+pairs, separated by ":".
+</p>
+<p>All writers support the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>string_validation, sv</samp>’</dt>
+<dd><p>Set string validation mode.
+</p>
+<p>The following values are accepted.
+</p><dl compact="compact">
+<dt> ‘<samp>fail</samp>’</dt>
+<dd><p>The writer will fail immediately in case an invalid string (UTF-8)
+sequence or code point is found in the input. This is especially
+useful to validate input metadata.
+</p>
+</dd>
+<dt> ‘<samp>ignore</samp>’</dt>
+<dd><p>Any validation error will be ignored. This will result in possibly
+broken output, especially with the json or xml writer.
+</p>
+</dd>
+<dt> ‘<samp>replace</samp>’</dt>
+<dd><p>The writer will substitute invalid UTF-8 sequences or code points with
+the string specified with the ‘<samp>string_validation_replacement</samp>’.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>replace</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>string_validation_replacement, svr</samp>’</dt>
+<dd><p>Set replacement string to use in case ‘<samp>string_validation</samp>’ is
+set to ‘<samp>replace</samp>’.
+</p>
+<p>In case the option is not specified, the writer will assume the empty
+string, that is it will remove the invalid sequences from the input
+strings.
+</p></dd>
+</dl>
+
+<p>A description of the currently available writers follows.
+</p>
+<a name="default"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-default">4.1 default</a></h2>
+<p>Default format.
+</p>
+<p>Print each section in the form:
+</p><table><tr><td> </td><td><pre class="example">[SECTION]
+key1=val1
+...
+keyN=valN
+[/SECTION]
+</pre></td></tr></table>
+
+<p>Metadata tags are printed as a line in the corresponding FORMAT, STREAM or
+PROGRAM_STREAM section, and are prefixed by the string "TAG:".
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nokey, nk</samp>’</dt>
+<dd><p>If set to 1 specify not to print the key of each field. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>noprint_wrappers, nw</samp>’</dt>
+<dd><p>If set to 1 specify not to print the section header and footer.
+Default value is 0.
+</p></dd>
+</dl>
+
+<a name="compact_002c-csv"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-compact_002c-csv">4.2 compact, csv</a></h2>
+<p>Compact and CSV format.
+</p>
+<p>The <code>csv</code> writer is equivalent to <code>compact</code>, but supports
+different defaults.
+</p>
+<p>Each section is printed on a single line.
+If no option is specifid, the output has the form:
+</p><table><tr><td> </td><td><pre class="example">section|key1=val1| ... |keyN=valN
+</pre></td></tr></table>
+
+<p>Metadata tags are printed in the corresponding "format" or "stream"
+section. A metadata tag key, if printed, is prefixed by the string
+"tag:".
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>item_sep, s</samp>’</dt>
+<dd><p>Specify the character to use for separating fields in the output line.
+It must be a single printable character, it is "|" by default ("," for
+the <code>csv</code> writer).
+</p>
+</dd>
+<dt> ‘<samp>nokey, nk</samp>’</dt>
+<dd><p>If set to 1 specify not to print the key of each field. Its default
+value is 0 (1 for the <code>csv</code> writer).
+</p>
+</dd>
+<dt> ‘<samp>escape, e</samp>’</dt>
+<dd><p>Set the escape mode to use, default to "c" ("csv" for the <code>csv</code>
+writer).
+</p>
+<p>It can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>c</samp>’</dt>
+<dd><p>Perform C-like escaping. Strings containing a newline (’\n’), carriage
+return (’\r’), a tab (’\t’), a form feed (’\f’), the escaping
+character (’\’) or the item separator character <var>SEP</var> 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 <var>SEP</var> is
+converted to "\<var>SEP</var>".
+</p>
+</dd>
+<dt> ‘<samp>csv</samp>’</dt>
+<dd><p>Perform CSV-like escaping, as described in RFC4180. Strings
+containing a newline (’\n’), a carriage return (’\r’), a double quote
+(’"’), or <var>SEP</var> are enclosed in double-quotes.
+</p>
+</dd>
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Perform no escaping.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>print_section, p</samp>’</dt>
+<dd><p>Print the section name at the begin of each line if the value is
+<code>1</code>, disable it with value set to <code>0</code>. Default value is
+<code>1</code>.
+</p>
+</dd>
+</dl>
+
+<a name="flat"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-flat">4.3 flat</a></h2>
+<p>Flat format.
+</p>
+<p>A free-form output where each line contains an explicit key=value, such as
+"streams.stream.3.tags.foo=bar". The output is shell escaped, so it can be
+directly embedded in sh scripts as long as the separator character is an
+alphanumeric character or an underscore (see <var>sep_char</var> option).
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sep_char, s</samp>’</dt>
+<dd><p>Separator character used to separate the chapter, the section name, IDs and
+potential tags in the printed field key.
+</p>
+<p>Default value is ’.’.
+</p>
+</dd>
+<dt> ‘<samp>hierarchical, h</samp>’</dt>
+<dd><p>Specify if the section name specification should be hierarchical. If
+set to 1, and if there is more than one section in the current
+chapter, the section name will be prefixed by the name of the
+chapter. A value of 0 will disable this behavior.
+</p>
+<p>Default value is 1.
+</p></dd>
+</dl>
+
+<a name="ini"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ini">4.4 ini</a></h2>
+<p>INI format output.
+</p>
+<p>Print output in an INI based format.
+</p>
+<p>The following conventions are adopted:
+</p>
+<ul>
+<li>
+all key and values are UTF-8
+</li><li>
+’.’ is the subgroup separator
+</li><li>
+newline, ’\t’, ’\f’, ’\b’ and the following characters are escaped
+</li><li>
+’\’ is the escape character
+</li><li>
+’#’ is the comment indicator
+</li><li>
+’=’ is the key/value separator
+</li><li>
+’:’ is not used but usually parsed as key/value separator
+</li></ul>
+
+<p>This writer accepts options as a list of <var>key</var>=<var>value</var> pairs,
+separated by ":".
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hierarchical, h</samp>’</dt>
+<dd><p>Specify if the section name specification should be hierarchical. If
+set to 1, and if there is more than one section in the current
+chapter, the section name will be prefixed by the name of the
+chapter. A value of 0 will disable this behavior.
+</p>
+<p>Default value is 1.
+</p></dd>
+</dl>
+
+<a name="json"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-json">4.5 json</a></h2>
+<p>JSON based format.
+</p>
+<p>Each section is printed using JSON notation.
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>compact, c</samp>’</dt>
+<dd><p>If set to 1 enable compact output, that is each section will be
+printed on a single line. Default value is 0.
+</p></dd>
+</dl>
+
+<p>For more information about JSON, see <a href="http://www.json.org/">http://www.json.org/</a>.
+</p>
+<a name="xml"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-xml">4.6 xml</a></h2>
+<p>XML based format.
+</p>
+<p>The XML output is described in the XML schema description file
+‘<tt>ffprobe.xsd</tt>’ installed in the FFmpeg datadir.
+</p>
+<p>An updated version of the schema can be retrieved at the url
+<a href="http://www.ffmpeg.org/schema/ffprobe.xsd">http://www.ffmpeg.org/schema/ffprobe.xsd</a>, which redirects to the
+latest schema committed into the FFmpeg development source code tree.
+</p>
+<p>Note that the output issued will be compliant to the
+‘<tt>ffprobe.xsd</tt>’ schema only when no special global output options
+(‘<samp>unit</samp>’, ‘<samp>prefix</samp>’, ‘<samp>byte_binary_prefix</samp>’,
+‘<samp>sexagesimal</samp>’ etc.) are specified.
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fully_qualified, q</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>xsd_compliant, x</samp>’</dt>
+<dd><p>If set to 1 perform more checks for ensuring that the output is XSD
+compliant. Default value is 0.
+This option automatically sets ‘<samp>fully_qualified</samp>’ to 1.
+</p></dd>
+</dl>
+
+<p>For more information about the XML format, see
+<a href="http://www.w3.org/XML/">http://www.w3.org/XML/</a>.
+</p>
+<a name="Timecode"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Timecode">5. Timecode</a></h1>
+
+<p><code>ffprobe</code> supports Timecode extraction:
+</p>
+<ul>
+<li>
+MPEG1/2 timecode is extracted from the GOP, and is available in the video
+stream details (‘<samp>-show_streams</samp>’, see <var>timecode</var>).
+
+</li><li>
+MOV timecode is extracted from tmcd track, so is available in the tmcd
+stream metadata (‘<samp>-show_streams</samp>’, see <var>TAG:timecode</var>).
+
+</li><li>
+DV, GXF and AVI timecodes are available in format metadata
+(‘<samp>-show_format</samp>’, see <var>TAG:timecode</var>).
+
+</li></ul>
+
+<a name="Syntax-1"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Syntax-1">6. Syntax</a></h1>
+
+<p>This section documents the syntax and formats employed by the FFmpeg
+libraries and tools.
+</p>
+<p><a name="quoting_005fand_005fescaping"></a>
+</p><a name="Quoting-and-escaping"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Quoting-and-escaping">6.1 Quoting and escaping</a></h2>
+
+<p>FFmpeg adopts the following quoting and escaping mechanism, unless
+explicitly specified. The following rules are applied:
+</p>
+<ul>
+<li>
+<code>'</code> and <code>\</code> are special characters (respectively used for
+quoting and escaping). In addition to them, there might be other
+special characters depending on the specific syntax where the escaping
+and quoting are employed.
+
+</li><li>
+A special character is escaped by prefixing it with a ’\’.
+
+</li><li>
+All characters enclosed between ” are included literally in the
+parsed string. The quote character <code>'</code> itself cannot be quoted,
+so you may need to close the quote and escape it.
+
+</li><li>
+Leading and trailing whitespaces, unless escaped or quoted, are
+removed from the parsed string.
+</li></ul>
+
+<p>Note that you may need to add a second level of escaping when using
+the command line or a script, which depends on the syntax of the
+adopted shell language.
+</p>
+<p>The function <code>av_get_token</code> defined in
+‘<tt>libavutil/avstring.h</tt>’ can be used to parse a token quoted or
+escaped according to the rules defined above.
+</p>
+<p>The tool ‘<tt>tools/ffescape</tt>’ in the FFmpeg source tree can be used
+to automatically quote or escape a string in a script.
+</p>
+<a name="Examples-30"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-30">6.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Escape the string <code>Crime d'Amour</code> containing the <code>'</code> special
+character:
+<table><tr><td> </td><td><pre class="example">Crime d\'Amour
+</pre></td></tr></table>
+
+</li><li>
+The string above contains a quote, so the <code>'</code> needs to be escaped
+when quoting it:
+<table><tr><td> </td><td><pre class="example">'Crime d'\''Amour'
+</pre></td></tr></table>
+
+</li><li>
+Include leading or trailing whitespaces using quoting:
+<table><tr><td> </td><td><pre class="example">' this string starts and ends with whitespaces '
+</pre></td></tr></table>
+
+</li><li>
+Escaping and quoting can be mixed together:
+<table><tr><td> </td><td><pre class="example">' The string '\'string\'' is a string '
+</pre></td></tr></table>
+
+</li><li>
+To include a literal <code>\</code> you can use either escaping or quoting:
+<table><tr><td> </td><td><pre class="example">'c:\foo' can be written as c:\\foo
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="date-syntax"></a>
+</p><a name="Date"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Date">6.2 Date</a></h2>
+
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
+now
+</pre></td></tr></table>
+
+<p>If the value is "now" it takes the current time.
+</p>
+<p>Time is local time unless 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.
+</p>
+<p><a name="time-duration-syntax"></a>
+</p><a name="Time-duration"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Time-duration">6.3 Time duration</a></h2>
+
+<p>There are two accepted syntaxes for expressing time duration.
+</p>
+<table><tr><td> </td><td><pre class="example">[-][<var>HH</var>:]<var>MM</var>:<var>SS</var>[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>HH</var> expresses the number of hours, <var>MM</var> the number of minutes
+for a maximum of 2 digits, and <var>SS</var> the number of seconds for a
+maximum of 2 digits. The <var>m</var> at the end expresses decimal value for
+<var>SS</var>.
+</p>
+<p><em>or</em>
+</p>
+<table><tr><td> </td><td><pre class="example">[-]<var>S</var>+[.<var>m</var>...]
+</pre></td></tr></table>
+
+<p><var>S</var> expresses the number of seconds, with the optional decimal part
+<var>m</var>.
+</p>
+<p>In both expressions, the optional ‘<samp>-</samp>’ indicates negative duration.
+</p>
+<a name="Examples-12"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-12">6.3.1 Examples</a></h3>
+
+<p>The following examples are all valid time duration:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>55</samp>’</dt>
+<dd><p>55 seconds
+</p>
+</dd>
+<dt> ‘<samp>12:03:45</samp>’</dt>
+<dd><p>12 hours, 03 minutes and 45 seconds
+</p>
+</dd>
+<dt> ‘<samp>23.189</samp>’</dt>
+<dd><p>23.189 seconds
+</p></dd>
+</dl>
+
+<p><a name="video-size-syntax"></a>
+</p><a name="Video-size"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Video-size">6.4 Video size</a></h2>
+<p>Specify the size of the sourced video, it may be a string of the form
+<var>width</var>x<var>height</var>, or the name of a size abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>720x480
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>720x576
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>768x576
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>352x240
+</p></dd>
+<dt> ‘<samp>sqcif</samp>’</dt>
+<dd><p>128x96
+</p></dd>
+<dt> ‘<samp>qcif</samp>’</dt>
+<dd><p>176x144
+</p></dd>
+<dt> ‘<samp>cif</samp>’</dt>
+<dd><p>352x288
+</p></dd>
+<dt> ‘<samp>4cif</samp>’</dt>
+<dd><p>704x576
+</p></dd>
+<dt> ‘<samp>16cif</samp>’</dt>
+<dd><p>1408x1152
+</p></dd>
+<dt> ‘<samp>qqvga</samp>’</dt>
+<dd><p>160x120
+</p></dd>
+<dt> ‘<samp>qvga</samp>’</dt>
+<dd><p>320x240
+</p></dd>
+<dt> ‘<samp>vga</samp>’</dt>
+<dd><p>640x480
+</p></dd>
+<dt> ‘<samp>svga</samp>’</dt>
+<dd><p>800x600
+</p></dd>
+<dt> ‘<samp>xga</samp>’</dt>
+<dd><p>1024x768
+</p></dd>
+<dt> ‘<samp>uxga</samp>’</dt>
+<dd><p>1600x1200
+</p></dd>
+<dt> ‘<samp>qxga</samp>’</dt>
+<dd><p>2048x1536
+</p></dd>
+<dt> ‘<samp>sxga</samp>’</dt>
+<dd><p>1280x1024
+</p></dd>
+<dt> ‘<samp>qsxga</samp>’</dt>
+<dd><p>2560x2048
+</p></dd>
+<dt> ‘<samp>hsxga</samp>’</dt>
+<dd><p>5120x4096
+</p></dd>
+<dt> ‘<samp>wvga</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>wxga</samp>’</dt>
+<dd><p>1366x768
+</p></dd>
+<dt> ‘<samp>wsxga</samp>’</dt>
+<dd><p>1600x1024
+</p></dd>
+<dt> ‘<samp>wuxga</samp>’</dt>
+<dd><p>1920x1200
+</p></dd>
+<dt> ‘<samp>woxga</samp>’</dt>
+<dd><p>2560x1600
+</p></dd>
+<dt> ‘<samp>wqsxga</samp>’</dt>
+<dd><p>3200x2048
+</p></dd>
+<dt> ‘<samp>wquxga</samp>’</dt>
+<dd><p>3840x2400
+</p></dd>
+<dt> ‘<samp>whsxga</samp>’</dt>
+<dd><p>6400x4096
+</p></dd>
+<dt> ‘<samp>whuxga</samp>’</dt>
+<dd><p>7680x4800
+</p></dd>
+<dt> ‘<samp>cga</samp>’</dt>
+<dd><p>320x200
+</p></dd>
+<dt> ‘<samp>ega</samp>’</dt>
+<dd><p>640x350
+</p></dd>
+<dt> ‘<samp>hd480</samp>’</dt>
+<dd><p>852x480
+</p></dd>
+<dt> ‘<samp>hd720</samp>’</dt>
+<dd><p>1280x720
+</p></dd>
+<dt> ‘<samp>hd1080</samp>’</dt>
+<dd><p>1920x1080
+</p></dd>
+<dt> ‘<samp>2k</samp>’</dt>
+<dd><p>2048x1080
+</p></dd>
+<dt> ‘<samp>2kflat</samp>’</dt>
+<dd><p>1998x1080
+</p></dd>
+<dt> ‘<samp>2kscope</samp>’</dt>
+<dd><p>2048x858
+</p></dd>
+<dt> ‘<samp>4k</samp>’</dt>
+<dd><p>4096x2160
+</p></dd>
+<dt> ‘<samp>4kflat</samp>’</dt>
+<dd><p>3996x2160
+</p></dd>
+<dt> ‘<samp>4kscope</samp>’</dt>
+<dd><p>4096x1716
+</p></dd>
+<dt> ‘<samp>nhd</samp>’</dt>
+<dd><p>640x360
+</p></dd>
+<dt> ‘<samp>hqvga</samp>’</dt>
+<dd><p>240x160
+</p></dd>
+<dt> ‘<samp>wqvga</samp>’</dt>
+<dd><p>400x240
+</p></dd>
+<dt> ‘<samp>fwqvga</samp>’</dt>
+<dd><p>432x240
+</p></dd>
+<dt> ‘<samp>hvga</samp>’</dt>
+<dd><p>480x320
+</p></dd>
+<dt> ‘<samp>qhd</samp>’</dt>
+<dd><p>960x540
+</p></dd>
+</dl>
+
+<p><a name="video-rate-syntax"></a>
+</p><a name="Video-rate"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Video-rate">6.5 Video rate</a></h2>
+
+<p>Specify the frame rate of a video, expressed as the number of frames
+generated per second. It has to be a string in the format
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation.
+</p>
+<p>The following abbreviations are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>ntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>pal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>qntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>qpal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>sntsc</samp>’</dt>
+<dd><p>30000/1001
+</p></dd>
+<dt> ‘<samp>spal</samp>’</dt>
+<dd><p>25/1
+</p></dd>
+<dt> ‘<samp>film</samp>’</dt>
+<dd><p>24/1
+</p></dd>
+<dt> ‘<samp>ntsc-film</samp>’</dt>
+<dd><p>24000/1001
+</p></dd>
+</dl>
+
+<p><a name="ratio-syntax"></a>
+</p><a name="Ratio"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Ratio">6.6 Ratio</a></h2>
+
+<p>A ratio can be expressed as an expression, or in the form
+<var>numerator</var>:<var>denominator</var>.
+</p>
+<p>Note that a ratio with infinite (1/0) or negative value is
+considered valid, so you should check on the returned value if you
+want to exclude those values.
+</p>
+<p>The undefined value can be expressed using the "0:0" string.
+</p>
+<p><a name="color-syntax"></a>
+</p><a name="Color"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Color">6.7 Color</a></h2>
+
+<p>It can be the name of a color as defined below (case insensitive match) or a
+<code>[0x|#]RRGGBB[AA]</code> sequence, possibly followed by @ and a string
+representing the alpha component.
+</p>
+<p>The alpha component may be a string composed by "0x" followed by an
+hexadecimal number or a decimal number between 0.0 and 1.0, which
+represents the opacity value (‘<samp>0x00</samp>’ or ‘<samp>0.0</samp>’ means completely
+transparent, ‘<samp>0xff</samp>’ or ‘<samp>1.0</samp>’ completely opaque). If the alpha
+component is not specified then ‘<samp>0xff</samp>’ is assumed.
+</p>
+<p>The string ‘<samp>random</samp>’ will result in a random color.
+</p>
+<p>The following names of colors are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>AliceBlue</samp>’</dt>
+<dd><p>0xF0F8FF
+</p></dd>
+<dt> ‘<samp>AntiqueWhite</samp>’</dt>
+<dd><p>0xFAEBD7
+</p></dd>
+<dt> ‘<samp>Aqua</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>Aquamarine</samp>’</dt>
+<dd><p>0x7FFFD4
+</p></dd>
+<dt> ‘<samp>Azure</samp>’</dt>
+<dd><p>0xF0FFFF
+</p></dd>
+<dt> ‘<samp>Beige</samp>’</dt>
+<dd><p>0xF5F5DC
+</p></dd>
+<dt> ‘<samp>Bisque</samp>’</dt>
+<dd><p>0xFFE4C4
+</p></dd>
+<dt> ‘<samp>Black</samp>’</dt>
+<dd><p>0x000000
+</p></dd>
+<dt> ‘<samp>BlanchedAlmond</samp>’</dt>
+<dd><p>0xFFEBCD
+</p></dd>
+<dt> ‘<samp>Blue</samp>’</dt>
+<dd><p>0x0000FF
+</p></dd>
+<dt> ‘<samp>BlueViolet</samp>’</dt>
+<dd><p>0x8A2BE2
+</p></dd>
+<dt> ‘<samp>Brown</samp>’</dt>
+<dd><p>0xA52A2A
+</p></dd>
+<dt> ‘<samp>BurlyWood</samp>’</dt>
+<dd><p>0xDEB887
+</p></dd>
+<dt> ‘<samp>CadetBlue</samp>’</dt>
+<dd><p>0x5F9EA0
+</p></dd>
+<dt> ‘<samp>Chartreuse</samp>’</dt>
+<dd><p>0x7FFF00
+</p></dd>
+<dt> ‘<samp>Chocolate</samp>’</dt>
+<dd><p>0xD2691E
+</p></dd>
+<dt> ‘<samp>Coral</samp>’</dt>
+<dd><p>0xFF7F50
+</p></dd>
+<dt> ‘<samp>CornflowerBlue</samp>’</dt>
+<dd><p>0x6495ED
+</p></dd>
+<dt> ‘<samp>Cornsilk</samp>’</dt>
+<dd><p>0xFFF8DC
+</p></dd>
+<dt> ‘<samp>Crimson</samp>’</dt>
+<dd><p>0xDC143C
+</p></dd>
+<dt> ‘<samp>Cyan</samp>’</dt>
+<dd><p>0x00FFFF
+</p></dd>
+<dt> ‘<samp>DarkBlue</samp>’</dt>
+<dd><p>0x00008B
+</p></dd>
+<dt> ‘<samp>DarkCyan</samp>’</dt>
+<dd><p>0x008B8B
+</p></dd>
+<dt> ‘<samp>DarkGoldenRod</samp>’</dt>
+<dd><p>0xB8860B
+</p></dd>
+<dt> ‘<samp>DarkGray</samp>’</dt>
+<dd><p>0xA9A9A9
+</p></dd>
+<dt> ‘<samp>DarkGreen</samp>’</dt>
+<dd><p>0x006400
+</p></dd>
+<dt> ‘<samp>DarkKhaki</samp>’</dt>
+<dd><p>0xBDB76B
+</p></dd>
+<dt> ‘<samp>DarkMagenta</samp>’</dt>
+<dd><p>0x8B008B
+</p></dd>
+<dt> ‘<samp>DarkOliveGreen</samp>’</dt>
+<dd><p>0x556B2F
+</p></dd>
+<dt> ‘<samp>Darkorange</samp>’</dt>
+<dd><p>0xFF8C00
+</p></dd>
+<dt> ‘<samp>DarkOrchid</samp>’</dt>
+<dd><p>0x9932CC
+</p></dd>
+<dt> ‘<samp>DarkRed</samp>’</dt>
+<dd><p>0x8B0000
+</p></dd>
+<dt> ‘<samp>DarkSalmon</samp>’</dt>
+<dd><p>0xE9967A
+</p></dd>
+<dt> ‘<samp>DarkSeaGreen</samp>’</dt>
+<dd><p>0x8FBC8F
+</p></dd>
+<dt> ‘<samp>DarkSlateBlue</samp>’</dt>
+<dd><p>0x483D8B
+</p></dd>
+<dt> ‘<samp>DarkSlateGray</samp>’</dt>
+<dd><p>0x2F4F4F
+</p></dd>
+<dt> ‘<samp>DarkTurquoise</samp>’</dt>
+<dd><p>0x00CED1
+</p></dd>
+<dt> ‘<samp>DarkViolet</samp>’</dt>
+<dd><p>0x9400D3
+</p></dd>
+<dt> ‘<samp>DeepPink</samp>’</dt>
+<dd><p>0xFF1493
+</p></dd>
+<dt> ‘<samp>DeepSkyBlue</samp>’</dt>
+<dd><p>0x00BFFF
+</p></dd>
+<dt> ‘<samp>DimGray</samp>’</dt>
+<dd><p>0x696969
+</p></dd>
+<dt> ‘<samp>DodgerBlue</samp>’</dt>
+<dd><p>0x1E90FF
+</p></dd>
+<dt> ‘<samp>FireBrick</samp>’</dt>
+<dd><p>0xB22222
+</p></dd>
+<dt> ‘<samp>FloralWhite</samp>’</dt>
+<dd><p>0xFFFAF0
+</p></dd>
+<dt> ‘<samp>ForestGreen</samp>’</dt>
+<dd><p>0x228B22
+</p></dd>
+<dt> ‘<samp>Fuchsia</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Gainsboro</samp>’</dt>
+<dd><p>0xDCDCDC
+</p></dd>
+<dt> ‘<samp>GhostWhite</samp>’</dt>
+<dd><p>0xF8F8FF
+</p></dd>
+<dt> ‘<samp>Gold</samp>’</dt>
+<dd><p>0xFFD700
+</p></dd>
+<dt> ‘<samp>GoldenRod</samp>’</dt>
+<dd><p>0xDAA520
+</p></dd>
+<dt> ‘<samp>Gray</samp>’</dt>
+<dd><p>0x808080
+</p></dd>
+<dt> ‘<samp>Green</samp>’</dt>
+<dd><p>0x008000
+</p></dd>
+<dt> ‘<samp>GreenYellow</samp>’</dt>
+<dd><p>0xADFF2F
+</p></dd>
+<dt> ‘<samp>HoneyDew</samp>’</dt>
+<dd><p>0xF0FFF0
+</p></dd>
+<dt> ‘<samp>HotPink</samp>’</dt>
+<dd><p>0xFF69B4
+</p></dd>
+<dt> ‘<samp>IndianRed</samp>’</dt>
+<dd><p>0xCD5C5C
+</p></dd>
+<dt> ‘<samp>Indigo</samp>’</dt>
+<dd><p>0x4B0082
+</p></dd>
+<dt> ‘<samp>Ivory</samp>’</dt>
+<dd><p>0xFFFFF0
+</p></dd>
+<dt> ‘<samp>Khaki</samp>’</dt>
+<dd><p>0xF0E68C
+</p></dd>
+<dt> ‘<samp>Lavender</samp>’</dt>
+<dd><p>0xE6E6FA
+</p></dd>
+<dt> ‘<samp>LavenderBlush</samp>’</dt>
+<dd><p>0xFFF0F5
+</p></dd>
+<dt> ‘<samp>LawnGreen</samp>’</dt>
+<dd><p>0x7CFC00
+</p></dd>
+<dt> ‘<samp>LemonChiffon</samp>’</dt>
+<dd><p>0xFFFACD
+</p></dd>
+<dt> ‘<samp>LightBlue</samp>’</dt>
+<dd><p>0xADD8E6
+</p></dd>
+<dt> ‘<samp>LightCoral</samp>’</dt>
+<dd><p>0xF08080
+</p></dd>
+<dt> ‘<samp>LightCyan</samp>’</dt>
+<dd><p>0xE0FFFF
+</p></dd>
+<dt> ‘<samp>LightGoldenRodYellow</samp>’</dt>
+<dd><p>0xFAFAD2
+</p></dd>
+<dt> ‘<samp>LightGreen</samp>’</dt>
+<dd><p>0x90EE90
+</p></dd>
+<dt> ‘<samp>LightGrey</samp>’</dt>
+<dd><p>0xD3D3D3
+</p></dd>
+<dt> ‘<samp>LightPink</samp>’</dt>
+<dd><p>0xFFB6C1
+</p></dd>
+<dt> ‘<samp>LightSalmon</samp>’</dt>
+<dd><p>0xFFA07A
+</p></dd>
+<dt> ‘<samp>LightSeaGreen</samp>’</dt>
+<dd><p>0x20B2AA
+</p></dd>
+<dt> ‘<samp>LightSkyBlue</samp>’</dt>
+<dd><p>0x87CEFA
+</p></dd>
+<dt> ‘<samp>LightSlateGray</samp>’</dt>
+<dd><p>0x778899
+</p></dd>
+<dt> ‘<samp>LightSteelBlue</samp>’</dt>
+<dd><p>0xB0C4DE
+</p></dd>
+<dt> ‘<samp>LightYellow</samp>’</dt>
+<dd><p>0xFFFFE0
+</p></dd>
+<dt> ‘<samp>Lime</samp>’</dt>
+<dd><p>0x00FF00
+</p></dd>
+<dt> ‘<samp>LimeGreen</samp>’</dt>
+<dd><p>0x32CD32
+</p></dd>
+<dt> ‘<samp>Linen</samp>’</dt>
+<dd><p>0xFAF0E6
+</p></dd>
+<dt> ‘<samp>Magenta</samp>’</dt>
+<dd><p>0xFF00FF
+</p></dd>
+<dt> ‘<samp>Maroon</samp>’</dt>
+<dd><p>0x800000
+</p></dd>
+<dt> ‘<samp>MediumAquaMarine</samp>’</dt>
+<dd><p>0x66CDAA
+</p></dd>
+<dt> ‘<samp>MediumBlue</samp>’</dt>
+<dd><p>0x0000CD
+</p></dd>
+<dt> ‘<samp>MediumOrchid</samp>’</dt>
+<dd><p>0xBA55D3
+</p></dd>
+<dt> ‘<samp>MediumPurple</samp>’</dt>
+<dd><p>0x9370D8
+</p></dd>
+<dt> ‘<samp>MediumSeaGreen</samp>’</dt>
+<dd><p>0x3CB371
+</p></dd>
+<dt> ‘<samp>MediumSlateBlue</samp>’</dt>
+<dd><p>0x7B68EE
+</p></dd>
+<dt> ‘<samp>MediumSpringGreen</samp>’</dt>
+<dd><p>0x00FA9A
+</p></dd>
+<dt> ‘<samp>MediumTurquoise</samp>’</dt>
+<dd><p>0x48D1CC
+</p></dd>
+<dt> ‘<samp>MediumVioletRed</samp>’</dt>
+<dd><p>0xC71585
+</p></dd>
+<dt> ‘<samp>MidnightBlue</samp>’</dt>
+<dd><p>0x191970
+</p></dd>
+<dt> ‘<samp>MintCream</samp>’</dt>
+<dd><p>0xF5FFFA
+</p></dd>
+<dt> ‘<samp>MistyRose</samp>’</dt>
+<dd><p>0xFFE4E1
+</p></dd>
+<dt> ‘<samp>Moccasin</samp>’</dt>
+<dd><p>0xFFE4B5
+</p></dd>
+<dt> ‘<samp>NavajoWhite</samp>’</dt>
+<dd><p>0xFFDEAD
+</p></dd>
+<dt> ‘<samp>Navy</samp>’</dt>
+<dd><p>0x000080
+</p></dd>
+<dt> ‘<samp>OldLace</samp>’</dt>
+<dd><p>0xFDF5E6
+</p></dd>
+<dt> ‘<samp>Olive</samp>’</dt>
+<dd><p>0x808000
+</p></dd>
+<dt> ‘<samp>OliveDrab</samp>’</dt>
+<dd><p>0x6B8E23
+</p></dd>
+<dt> ‘<samp>Orange</samp>’</dt>
+<dd><p>0xFFA500
+</p></dd>
+<dt> ‘<samp>OrangeRed</samp>’</dt>
+<dd><p>0xFF4500
+</p></dd>
+<dt> ‘<samp>Orchid</samp>’</dt>
+<dd><p>0xDA70D6
+</p></dd>
+<dt> ‘<samp>PaleGoldenRod</samp>’</dt>
+<dd><p>0xEEE8AA
+</p></dd>
+<dt> ‘<samp>PaleGreen</samp>’</dt>
+<dd><p>0x98FB98
+</p></dd>
+<dt> ‘<samp>PaleTurquoise</samp>’</dt>
+<dd><p>0xAFEEEE
+</p></dd>
+<dt> ‘<samp>PaleVioletRed</samp>’</dt>
+<dd><p>0xD87093
+</p></dd>
+<dt> ‘<samp>PapayaWhip</samp>’</dt>
+<dd><p>0xFFEFD5
+</p></dd>
+<dt> ‘<samp>PeachPuff</samp>’</dt>
+<dd><p>0xFFDAB9
+</p></dd>
+<dt> ‘<samp>Peru</samp>’</dt>
+<dd><p>0xCD853F
+</p></dd>
+<dt> ‘<samp>Pink</samp>’</dt>
+<dd><p>0xFFC0CB
+</p></dd>
+<dt> ‘<samp>Plum</samp>’</dt>
+<dd><p>0xDDA0DD
+</p></dd>
+<dt> ‘<samp>PowderBlue</samp>’</dt>
+<dd><p>0xB0E0E6
+</p></dd>
+<dt> ‘<samp>Purple</samp>’</dt>
+<dd><p>0x800080
+</p></dd>
+<dt> ‘<samp>Red</samp>’</dt>
+<dd><p>0xFF0000
+</p></dd>
+<dt> ‘<samp>RosyBrown</samp>’</dt>
+<dd><p>0xBC8F8F
+</p></dd>
+<dt> ‘<samp>RoyalBlue</samp>’</dt>
+<dd><p>0x4169E1
+</p></dd>
+<dt> ‘<samp>SaddleBrown</samp>’</dt>
+<dd><p>0x8B4513
+</p></dd>
+<dt> ‘<samp>Salmon</samp>’</dt>
+<dd><p>0xFA8072
+</p></dd>
+<dt> ‘<samp>SandyBrown</samp>’</dt>
+<dd><p>0xF4A460
+</p></dd>
+<dt> ‘<samp>SeaGreen</samp>’</dt>
+<dd><p>0x2E8B57
+</p></dd>
+<dt> ‘<samp>SeaShell</samp>’</dt>
+<dd><p>0xFFF5EE
+</p></dd>
+<dt> ‘<samp>Sienna</samp>’</dt>
+<dd><p>0xA0522D
+</p></dd>
+<dt> ‘<samp>Silver</samp>’</dt>
+<dd><p>0xC0C0C0
+</p></dd>
+<dt> ‘<samp>SkyBlue</samp>’</dt>
+<dd><p>0x87CEEB
+</p></dd>
+<dt> ‘<samp>SlateBlue</samp>’</dt>
+<dd><p>0x6A5ACD
+</p></dd>
+<dt> ‘<samp>SlateGray</samp>’</dt>
+<dd><p>0x708090
+</p></dd>
+<dt> ‘<samp>Snow</samp>’</dt>
+<dd><p>0xFFFAFA
+</p></dd>
+<dt> ‘<samp>SpringGreen</samp>’</dt>
+<dd><p>0x00FF7F
+</p></dd>
+<dt> ‘<samp>SteelBlue</samp>’</dt>
+<dd><p>0x4682B4
+</p></dd>
+<dt> ‘<samp>Tan</samp>’</dt>
+<dd><p>0xD2B48C
+</p></dd>
+<dt> ‘<samp>Teal</samp>’</dt>
+<dd><p>0x008080
+</p></dd>
+<dt> ‘<samp>Thistle</samp>’</dt>
+<dd><p>0xD8BFD8
+</p></dd>
+<dt> ‘<samp>Tomato</samp>’</dt>
+<dd><p>0xFF6347
+</p></dd>
+<dt> ‘<samp>Turquoise</samp>’</dt>
+<dd><p>0x40E0D0
+</p></dd>
+<dt> ‘<samp>Violet</samp>’</dt>
+<dd><p>0xEE82EE
+</p></dd>
+<dt> ‘<samp>Wheat</samp>’</dt>
+<dd><p>0xF5DEB3
+</p></dd>
+<dt> ‘<samp>White</samp>’</dt>
+<dd><p>0xFFFFFF
+</p></dd>
+<dt> ‘<samp>WhiteSmoke</samp>’</dt>
+<dd><p>0xF5F5F5
+</p></dd>
+<dt> ‘<samp>Yellow</samp>’</dt>
+<dd><p>0xFFFF00
+</p></dd>
+<dt> ‘<samp>YellowGreen</samp>’</dt>
+<dd><p>0x9ACD32
+</p></dd>
+</dl>
+
+<p><a name="channel-layout-syntax"></a>
+</p><a name="Channel-Layout"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Channel-Layout">6.8 Channel Layout</a></h2>
+
+<p>A channel layout specifies the spatial disposition of the channels in
+a multi-channel audio stream. To specify a channel layout, FFmpeg
+makes use of a special syntax.
+</p>
+<p>Individual channels are identified by an id, as given by the table
+below:
+</p><dl compact="compact">
+<dt> ‘<samp>FL</samp>’</dt>
+<dd><p>front left
+</p></dd>
+<dt> ‘<samp>FR</samp>’</dt>
+<dd><p>front right
+</p></dd>
+<dt> ‘<samp>FC</samp>’</dt>
+<dd><p>front center
+</p></dd>
+<dt> ‘<samp>LFE</samp>’</dt>
+<dd><p>low frequency
+</p></dd>
+<dt> ‘<samp>BL</samp>’</dt>
+<dd><p>back left
+</p></dd>
+<dt> ‘<samp>BR</samp>’</dt>
+<dd><p>back right
+</p></dd>
+<dt> ‘<samp>FLC</samp>’</dt>
+<dd><p>front left-of-center
+</p></dd>
+<dt> ‘<samp>FRC</samp>’</dt>
+<dd><p>front right-of-center
+</p></dd>
+<dt> ‘<samp>BC</samp>’</dt>
+<dd><p>back center
+</p></dd>
+<dt> ‘<samp>SL</samp>’</dt>
+<dd><p>side left
+</p></dd>
+<dt> ‘<samp>SR</samp>’</dt>
+<dd><p>side right
+</p></dd>
+<dt> ‘<samp>TC</samp>’</dt>
+<dd><p>top center
+</p></dd>
+<dt> ‘<samp>TFL</samp>’</dt>
+<dd><p>top front left
+</p></dd>
+<dt> ‘<samp>TFC</samp>’</dt>
+<dd><p>top front center
+</p></dd>
+<dt> ‘<samp>TFR</samp>’</dt>
+<dd><p>top front right
+</p></dd>
+<dt> ‘<samp>TBL</samp>’</dt>
+<dd><p>top back left
+</p></dd>
+<dt> ‘<samp>TBC</samp>’</dt>
+<dd><p>top back center
+</p></dd>
+<dt> ‘<samp>TBR</samp>’</dt>
+<dd><p>top back right
+</p></dd>
+<dt> ‘<samp>DL</samp>’</dt>
+<dd><p>downmix left
+</p></dd>
+<dt> ‘<samp>DR</samp>’</dt>
+<dd><p>downmix right
+</p></dd>
+<dt> ‘<samp>WL</samp>’</dt>
+<dd><p>wide left
+</p></dd>
+<dt> ‘<samp>WR</samp>’</dt>
+<dd><p>wide right
+</p></dd>
+<dt> ‘<samp>SDL</samp>’</dt>
+<dd><p>surround direct left
+</p></dd>
+<dt> ‘<samp>SDR</samp>’</dt>
+<dd><p>surround direct right
+</p></dd>
+<dt> ‘<samp>LFE2</samp>’</dt>
+<dd><p>low frequency 2
+</p></dd>
+</dl>
+
+<p>Standard channel layout compositions can be specified by using the
+following identifiers:
+</p><dl compact="compact">
+<dt> ‘<samp>mono</samp>’</dt>
+<dd><p>FC
+</p></dd>
+<dt> ‘<samp>stereo</samp>’</dt>
+<dd><p>FL+FR
+</p></dd>
+<dt> ‘<samp>2.1</samp>’</dt>
+<dd><p>FL+FR+LFE
+</p></dd>
+<dt> ‘<samp>3.0</samp>’</dt>
+<dd><p>FL+FR+FC
+</p></dd>
+<dt> ‘<samp>3.0(back)</samp>’</dt>
+<dd><p>FL+FR+BC
+</p></dd>
+<dt> ‘<samp>4.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC
+</p></dd>
+<dt> ‘<samp>quad</samp>’</dt>
+<dd><p>FL+FR+BL+BR
+</p></dd>
+<dt> ‘<samp>quad(side)</samp>’</dt>
+<dd><p>FL+FR+SL+SR
+</p></dd>
+<dt> ‘<samp>3.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE
+</p></dd>
+<dt> ‘<samp>5.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR
+</p></dd>
+<dt> ‘<samp>5.0(side)</samp>’</dt>
+<dd><p>FL+FR+FC+SL+SR
+</p></dd>
+<dt> ‘<samp>4.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC
+</p></dd>
+<dt> ‘<samp>5.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR
+</p></dd>
+<dt> ‘<samp>5.1(side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0</samp>’</dt>
+<dd><p>FL+FR+FC+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.0(front)</samp>’</dt>
+<dd><p>FL+FR+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>hexagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>6.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+BC
+</p></dd>
+<dt> ‘<samp>6.1(front)</samp>’</dt>
+<dd><p>FL+FR+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.0(front)</samp>’</dt>
+<dd><p>FL+FR+FC+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+SL+SR
+</p></dd>
+<dt> ‘<samp>7.1(wide)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+BL+BR+FLC+FRC
+</p></dd>
+<dt> ‘<samp>7.1(wide-side)</samp>’</dt>
+<dd><p>FL+FR+FC+LFE+FLC+FRC+SL+SR
+</p></dd>
+<dt> ‘<samp>octagonal</samp>’</dt>
+<dd><p>FL+FR+FC+BL+BR+BC+SL+SR
+</p></dd>
+<dt> ‘<samp>downmix</samp>’</dt>
+<dd><p>DL+DR
+</p></dd>
+</dl>
+
+<p>A custom channel layout can be specified as a sequence of terms, separated by
+’+’ or ’|’. Each term can be:
+</p><ul>
+<li>
+the name of a standard channel layout (e.g. ‘<samp>mono</samp>’,
+‘<samp>stereo</samp>’, ‘<samp>4.0</samp>’, ‘<samp>quad</samp>’, ‘<samp>5.0</samp>’, etc.)
+
+</li><li>
+the name of a single channel (e.g. ‘<samp>FL</samp>’, ‘<samp>FR</samp>’, ‘<samp>FC</samp>’, ‘<samp>LFE</samp>’, etc.)
+
+</li><li>
+a number of channels, in decimal, optionally followed by ’c’, yielding
+the default channel layout for that number of channels (see the
+function <code>av_get_default_channel_layout</code>)
+
+</li><li>
+a channel layout mask, in hexadecimal starting with "0x" (see the
+<code>AV_CH_*</code> macros in ‘<tt>libavutil/channel_layout.h</tt>’.
+</li></ul>
+
+<p>Starting from libavutil version 53 the trailing character "c" to
+specify a number of channels will be required, while a channel layout
+mask could also be specified as a decimal number (if and only if not
+followed by "c").
+</p>
+<p>See also the function <code>av_get_channel_layout</code> defined in
+‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<a name="Expression-Evaluation"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Expression-Evaluation">7. Expression Evaluation</a></h1>
+
+<p>When evaluating an arithmetic expression, FFmpeg uses an internal
+formula evaluator, implemented through the ‘<tt>libavutil/eval.h</tt>’
+interface.
+</p>
+<p>An expression may contain unary, binary operators, constants, and
+functions.
+</p>
+<p>Two expressions <var>expr1</var> and <var>expr2</var> can be combined to form
+another expression "<var>expr1</var>;<var>expr2</var>".
+<var>expr1</var> and <var>expr2</var> are evaluated in turn, and the new
+expression evaluates to the value of <var>expr2</var>.
+</p>
+<p>The following binary operators are available: <code>+</code>, <code>-</code>,
+<code>*</code>, <code>/</code>, <code>^</code>.
+</p>
+<p>The following unary operators are available: <code>+</code>, <code>-</code>.
+</p>
+<p>The following functions are available:
+</p><dl compact="compact">
+<dt> ‘<samp>abs(x)</samp>’</dt>
+<dd><p>Compute absolute value of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>acos(x)</samp>’</dt>
+<dd><p>Compute arccosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>asin(x)</samp>’</dt>
+<dd><p>Compute arcsine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>atan(x)</samp>’</dt>
+<dd><p>Compute arctangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>between(x, min, max)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>min</var> and lesser than or
+equal to <var>max</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>bitand(x, y)</samp>’</dt>
+<dt> ‘<samp>bitor(x, y)</samp>’</dt>
+<dd><p>Compute bitwise and/or operation on <var>x</var> and <var>y</var>.
+</p>
+<p>The results of the evaluation of <var>x</var> and <var>y</var> are converted to
+integers before executing the bitwise operation.
+</p>
+<p>Note that both the conversion to integer and the conversion back to
+floating point can lose precision. Beware of unexpected results for
+large numbers (usually 2^53 and larger).
+</p>
+</dd>
+<dt> ‘<samp>ceil(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> upwards to the nearest
+integer. For example, "ceil(1.5)" is "2.0".
+</p>
+</dd>
+<dt> ‘<samp>cos(x)</samp>’</dt>
+<dd><p>Compute cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>cosh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic cosine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>eq(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> and <var>y</var> are equivalent, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>exp(x)</samp>’</dt>
+<dd><p>Compute exponential of <var>x</var> (with base <code>e</code>, the Euler’s number).
+</p>
+</dd>
+<dt> ‘<samp>floor(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> downwards to the nearest
+integer. For example, "floor(-1.5)" is "-2.0".
+</p>
+</dd>
+<dt> ‘<samp>gauss(x)</samp>’</dt>
+<dd><p>Compute Gauss function of <var>x</var>, corresponding to
+<code>exp(-x*x/2) / sqrt(2*PI)</code>.
+</p>
+</dd>
+<dt> ‘<samp>gcd(x, y)</samp>’</dt>
+<dd><p>Return the greatest common divisor of <var>x</var> and <var>y</var>. If both <var>x</var> and
+<var>y</var> are 0 or either or both are less than zero then behavior is undefined.
+</p>
+</dd>
+<dt> ‘<samp>gt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>gte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is greater than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>hypot(x, y)</samp>’</dt>
+<dd><p>This function is similar to the C function with the same name; it returns
+"sqrt(<var>x</var>*<var>x</var> + <var>y</var>*<var>y</var>)", the length of the hypotenuse of a
+right triangle with sides of length <var>x</var> and <var>y</var>, or the distance of the
+point (<var>x</var>, <var>y</var>) from the origin.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the result of
+the evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>if(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is non-zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the result of the
+evaluation of <var>y</var>, return 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ifnot(x, y, z)</samp>’</dt>
+<dd><p>Evaluate <var>x</var>, and if the result is zero return the evaluation
+result of <var>y</var>, otherwise the evaluation result of <var>z</var>.
+</p>
+</dd>
+<dt> ‘<samp>isinf(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is +/-INFINITY, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>isnan(x)</samp>’</dt>
+<dd><p>Return 1.0 if <var>x</var> is NAN, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>ld(var)</samp>’</dt>
+<dd><p>Allow to load the value of the internal variable with number
+<var>var</var>, which was previously stored with st(<var>var</var>, <var>expr</var>).
+The function returns the loaded value.
+</p>
+</dd>
+<dt> ‘<samp>log(x)</samp>’</dt>
+<dd><p>Compute natural logarithm of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>lt(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>lte(x, y)</samp>’</dt>
+<dd><p>Return 1 if <var>x</var> is lesser than or equal to <var>y</var>, 0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>max(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>min(x, y)</samp>’</dt>
+<dd><p>Return the maximum between <var>x</var> and <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>mod(x, y)</samp>’</dt>
+<dd><p>Compute the remainder of division of <var>x</var> by <var>y</var>.
+</p>
+</dd>
+<dt> ‘<samp>not(expr)</samp>’</dt>
+<dd><p>Return 1.0 if <var>expr</var> is zero, 0.0 otherwise.
+</p>
+</dd>
+<dt> ‘<samp>pow(x, y)</samp>’</dt>
+<dd><p>Compute the power of <var>x</var> elevated <var>y</var>, it is equivalent to
+"(<var>x</var>)^(<var>y</var>)".
+</p>
+</dd>
+<dt> ‘<samp>print(t)</samp>’</dt>
+<dt> ‘<samp>print(t, l)</samp>’</dt>
+<dd><p>Print the value of expression <var>t</var> with loglevel <var>l</var>. If
+<var>l</var> is not specified then a default log level is used.
+Returns the value of the expression printed.
+</p>
+<p>Prints t with loglevel l
+</p>
+</dd>
+<dt> ‘<samp>random(x)</samp>’</dt>
+<dd><p>Return a pseudo random value between 0.0 and 1.0. <var>x</var> is the index of the
+internal variable which will be used to save the seed/state.
+</p>
+</dd>
+<dt> ‘<samp>root(expr, max)</samp>’</dt>
+<dd><p>Find an input value for which the function represented by <var>expr</var>
+with argument <var>ld(0)</var> is 0 in the interval 0..<var>max</var>.
+</p>
+<p>The expression in <var>expr</var> must denote a continuous function or the
+result is undefined.
+</p>
+<p><var>ld(0)</var> is used to represent the function input value, which means
+that the given expression will be evaluated multiple times with
+various input values that the expression can access through
+<code>ld(0)</code>. When the expression evaluates to 0 then the
+corresponding input value will be returned.
+</p>
+</dd>
+<dt> ‘<samp>sin(x)</samp>’</dt>
+<dd><p>Compute sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sinh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic sine of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>sqrt(expr)</samp>’</dt>
+<dd><p>Compute the square root of <var>expr</var>. This is equivalent to
+"(<var>expr</var>)^.5".
+</p>
+</dd>
+<dt> ‘<samp>squish(x)</samp>’</dt>
+<dd><p>Compute expression <code>1/(1 + exp(4*x))</code>.
+</p>
+</dd>
+<dt> ‘<samp>st(var, expr)</samp>’</dt>
+<dd><p>Allow to store the value of the expression <var>expr</var> in an internal
+variable. <var>var</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.
+</p>
+</dd>
+<dt> ‘<samp>tan(x)</samp>’</dt>
+<dd><p>Compute tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>tanh(x)</samp>’</dt>
+<dd><p>Compute hyperbolic tangent of <var>x</var>.
+</p>
+</dd>
+<dt> ‘<samp>taylor(expr, x)</samp>’</dt>
+<dt> ‘<samp>taylor(expr, x, id)</samp>’</dt>
+<dd><p>Evaluate a Taylor series at <var>x</var>, given an expression representing
+the <code>ld(id)</code>-th derivative of a function at 0.
+</p>
+<p>When the series does not converge the result is undefined.
+</p>
+<p><var>ld(id)</var> is used to represent the derivative order in <var>expr</var>,
+which means that the given expression will be evaluated multiple times
+with various input values that the expression can access through
+<code>ld(id)</code>. If <var>id</var> is not specified then 0 is assumed.
+</p>
+<p>Note, when you have the derivatives at y instead of 0,
+<code>taylor(expr, x-y)</code> can be used.
+</p>
+</dd>
+<dt> ‘<samp>time(0)</samp>’</dt>
+<dd><p>Return the current (wallclock) time in seconds.
+</p>
+</dd>
+<dt> ‘<samp>trunc(expr)</samp>’</dt>
+<dd><p>Round the value of expression <var>expr</var> towards zero to the nearest
+integer. For example, "trunc(-1.5)" is "-1.0".
+</p>
+</dd>
+<dt> ‘<samp>while(cond, expr)</samp>’</dt>
+<dd><p>Evaluate expression <var>expr</var> while the expression <var>cond</var> is
+non-zero, and returns the value of the last <var>expr</var> evaluation, or
+NAN if <var>cond</var> was always false.
+</p></dd>
+</dl>
+
+<p>The following constants are available:
+</p><dl compact="compact">
+<dt> ‘<samp>PI</samp>’</dt>
+<dd><p>area of the unit disc, approximately 3.14
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>exp(1) (Euler’s number), approximately 2.718
+</p></dd>
+<dt> ‘<samp>PHI</samp>’</dt>
+<dd><p>golden ratio (1+sqrt(5))/2, approximately 1.618
+</p></dd>
+</dl>
+
+<p>Assuming that an expression is considered "true" if it has a non-zero
+value, note that:
+</p>
+<p><code>*</code> works like AND
+</p>
+<p><code>+</code> works like OR
+</p>
+<p>For example the construct:
+</p><table><tr><td> </td><td><pre class="example">if (A AND B) then C
+</pre></td></tr></table>
+<p>is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">if(A*B, C)
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<p>The evaluator also recognizes the International System unit prefixes.
+If ’i’ is appended after the prefix, binary prefixes are used, which
+are based on powers of 1024 instead of powers of 1000.
+The ’B’ postfix multiplies the value by 8, and can be appended after a
+unit prefix or used alone. This allows using for example ’KB’, ’MiB’,
+’G’ and ’B’ as number postfix.
+</p>
+<p>The list of available International System prefixes follows, with
+indication of the corresponding powers of 10 and of 2.
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>10^-24 / 2^-80
+</p></dd>
+<dt> ‘<samp>z</samp>’</dt>
+<dd><p>10^-21 / 2^-70
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>10^-18 / 2^-60
+</p></dd>
+<dt> ‘<samp>f</samp>’</dt>
+<dd><p>10^-15 / 2^-50
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>10^-12 / 2^-40
+</p></dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>10^-9 / 2^-30
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>10^-6 / 2^-20
+</p></dd>
+<dt> ‘<samp>m</samp>’</dt>
+<dd><p>10^-3 / 2^-10
+</p></dd>
+<dt> ‘<samp>c</samp>’</dt>
+<dd><p>10^-2
+</p></dd>
+<dt> ‘<samp>d</samp>’</dt>
+<dd><p>10^-1
+</p></dd>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>10^2
+</p></dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>K</samp>’</dt>
+<dd><p>10^3 / 2^10
+</p></dd>
+<dt> ‘<samp>M</samp>’</dt>
+<dd><p>10^6 / 2^20
+</p></dd>
+<dt> ‘<samp>G</samp>’</dt>
+<dd><p>10^9 / 2^30
+</p></dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>10^12 / 2^40
+</p></dd>
+<dt> ‘<samp>P</samp>’</dt>
+<dd><p>10^15 / 2^40
+</p></dd>
+<dt> ‘<samp>E</samp>’</dt>
+<dd><p>10^18 / 2^50
+</p></dd>
+<dt> ‘<samp>Z</samp>’</dt>
+<dd><p>10^21 / 2^60
+</p></dd>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>10^24 / 2^70
+</p></dd>
+</dl>
+
+
+<a name="OpenCL-Options"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-OpenCL-Options">8. OpenCL Options</a></h1>
+
+<p>When FFmpeg is configured with <code>--enable-opencl</code>, it is possible
+to set the options for the global OpenCL context.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>build_options</samp>’</dt>
+<dd><p>Set build options used to compile the registered kernels.
+</p>
+<p>See reference "OpenCL Specification Version: 1.2 chapter 5.6.4".
+</p>
+</dd>
+<dt> ‘<samp>platform_idx</samp>’</dt>
+<dd><p>Select the index of the platform to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list
+which can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+<dt> ‘<samp>device_idx</samp>’</dt>
+<dd><p>Select the index of the device used to run OpenCL code.
+</p>
+<p>The specified index must be one of the indexes in the device list which
+can be obtained with <code>ffmpeg -opencl_bench</code> or <code>av_opencl_get_device_list()</code>.
+</p>
+</dd>
+</dl>
+
+<p><a name="codec_002doptions"></a>
+</p><a name="Codec-Options"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Codec-Options">9. Codec Options</a></h1>
+
+<p>libavcodec provides some generic global options, which can be set on
+all the encoders and decoders. In addition each codec may support
+so-called private options, which are specific for a given codec.
+</p>
+<p>Sometimes, a global option may only affect a specific kind of codec,
+and may be unsensical or ignored by another, so you need to be aware
+of the meaning of the specified options. Also some options are
+meant only for decoding or encoding.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVCodecContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follow:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>b <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set bitrate in bits/s. Default value is 200K.
+</p>
+</dd>
+<dt> ‘<samp>ab <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio bitrate (in bits/s). Default value is 128K.
+</p>
+</dd>
+<dt> ‘<samp>bt <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video bitrate tolerance (in bits/s). 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.
+</p>
+</dd>
+<dt> ‘<samp>flags <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Set generic flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>mv4</samp>’</dt>
+<dd><p>Use four motion vector by macroblock (mpeg4).
+</p></dd>
+<dt> ‘<samp>qpel</samp>’</dt>
+<dd><p>Use 1/4 pel motion compensation.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Use loop filter.
+</p></dd>
+<dt> ‘<samp>qscale</samp>’</dt>
+<dd><p>Use fixed qscale.
+</p></dd>
+<dt> ‘<samp>gmc</samp>’</dt>
+<dd><p>Use gmc.
+</p></dd>
+<dt> ‘<samp>mv0</samp>’</dt>
+<dd><p>Always try a mb with mv=<0,0>.
+</p></dd>
+<dt> ‘<samp>input_preserved</samp>’</dt>
+<dt> ‘<samp>pass1</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in first pass mode.
+</p></dd>
+<dt> ‘<samp>pass2</samp>’</dt>
+<dd><p>Use internal 2pass ratecontrol in second pass mode.
+</p></dd>
+<dt> ‘<samp>gray</samp>’</dt>
+<dd><p>Only decode/encode grayscale.
+</p></dd>
+<dt> ‘<samp>emu_edge</samp>’</dt>
+<dd><p>Do not draw edges.
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>Set error[?] variables during encoding.
+</p></dd>
+<dt> ‘<samp>truncated</samp>’</dt>
+<dt> ‘<samp>naq</samp>’</dt>
+<dd><p>Normalize adaptive quantization.
+</p></dd>
+<dt> ‘<samp>ildct</samp>’</dt>
+<dd><p>Use interlaced DCT.
+</p></dd>
+<dt> ‘<samp>low_delay</samp>’</dt>
+<dd><p>Force low delay.
+</p></dd>
+<dt> ‘<samp>global_header</samp>’</dt>
+<dd><p>Place global headers in extradata instead of every keyframe.
+</p></dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Use only bitexact stuff (except (I)DCT).
+</p></dd>
+<dt> ‘<samp>aic</samp>’</dt>
+<dd><p>Apply H263 advanced intra coding / mpeg4 ac prediction.
+</p></dd>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>qprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>ilme</samp>’</dt>
+<dd><p>Apply interlaced motion estimation.
+</p></dd>
+<dt> ‘<samp>cgop</samp>’</dt>
+<dd><p>Use closed gop.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_method <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero motion estimation (fastest)
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>full motion estimation (slowest)
+</p></dd>
+<dt> ‘<samp>epzs</samp>’</dt>
+<dd><p>EPZS motion estimation (default)
+</p></dd>
+<dt> ‘<samp>esa</samp>’</dt>
+<dd><p>esa motion estimation (alias for full)
+</p></dd>
+<dt> ‘<samp>tesa</samp>’</dt>
+<dd><p>tesa motion estimation
+</p></dd>
+<dt> ‘<samp>dia</samp>’</dt>
+<dd><p>dia motion estimation (alias for epzs)
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>log motion estimation
+</p></dd>
+<dt> ‘<samp>phods</samp>’</dt>
+<dd><p>phods motion estimation
+</p></dd>
+<dt> ‘<samp>x1</samp>’</dt>
+<dd><p>X1 motion estimation
+</p></dd>
+<dt> ‘<samp>hex</samp>’</dt>
+<dd><p>hex motion estimation
+</p></dd>
+<dt> ‘<samp>umh</samp>’</dt>
+<dd><p>umh motion estimation
+</p></dd>
+<dt> ‘<samp>iter</samp>’</dt>
+<dd><p>iter motion estimation
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>extradata_size <var>integer</var></samp>’</dt>
+<dd><p>Set extradata size.
+</p>
+</dd>
+<dt> ‘<samp>time_base <var>rational number</var></samp>’</dt>
+<dd><p>Set codec time base.
+</p>
+<p>It is the fundamental unit of time (in seconds) in terms of which
+frame timestamps are represented. For fixed-fps content, timebase
+should be <code>1 / frame_rate</code> and timestamp increments should be
+identically 1.
+</p>
+</dd>
+<dt> ‘<samp>g <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set the group of picture size. Default value is 12.
+</p>
+</dd>
+<dt> ‘<samp>ar <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio sampling rate (in Hz).
+</p>
+</dd>
+<dt> ‘<samp>ac <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd><p>Set number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>cutoff <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set cutoff bandwidth.
+</p>
+</dd>
+<dt> ‘<samp>frame_size <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio frame size.
+</p>
+<p>Each submitted frame except the last must contain exactly frame_size
+samples per channel. May be 0 when the codec has
+CODEC_CAP_VARIABLE_FRAME_SIZE set, in that case the frame size is not
+restricted. It is set by some decoders to indicate constant frame
+size.
+</p>
+</dd>
+<dt> ‘<samp>frame_number <var>integer</var></samp>’</dt>
+<dd><p>Set the frame number.
+</p>
+</dd>
+<dt> ‘<samp>delay <var>integer</var></samp>’</dt>
+<dt> ‘<samp>qcomp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale compression (VBR). It is used as a constant
+in the ratecontrol equation. Recommended range for default rc_eq:
+0.0-1.0.
+</p>
+</dd>
+<dt> ‘<samp>qblur <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set video quantizer scale blur (VBR).
+</p>
+</dd>
+<dt> ‘<samp>qmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min video quantizer scale (VBR). Must be included between -1 and
+69, default value is 2.
+</p>
+</dd>
+<dt> ‘<samp>qmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max video quantizer scale (VBR). Must be included between -1 and
+1024, default value is 31.
+</p>
+</dd>
+<dt> ‘<samp>qdiff <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max difference between the quantizer scale (VBR).
+</p>
+</dd>
+<dt> ‘<samp>bf <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max number of B frames between non-B-frames.
+</p>
+<p>Must be an integer between -1 and 16. 0 means that B-frames are
+disabled. If a value of -1 is used, it will choose an automatic value
+depending on the encoder.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>b_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set qp factor between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol method.
+</p>
+</dd>
+<dt> ‘<samp>b_strategy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set strategy to choose between I/P/B-frames.
+</p>
+</dd>
+<dt> ‘<samp>ps <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set RTP payload size in bytes.
+</p>
+</dd>
+<dt> ‘<samp>mv_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>header_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_tex_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>i_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>p_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>skip_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>misc_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>frame_bits <var>integer</var></samp>’</dt>
+<dt> ‘<samp>codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>bug <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Workaround not auto detected encoder bugs.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>autodetect</samp>’</dt>
+<dt> ‘<samp>old_msmpeg4</samp>’</dt>
+<dd><p>some old lavc generated msmpeg4v3 files (no autodetection)
+</p></dd>
+<dt> ‘<samp>xvid_ilace</samp>’</dt>
+<dd><p>Xvid interlacing bug (autodetected if fourcc==XVIX)
+</p></dd>
+<dt> ‘<samp>ump4</samp>’</dt>
+<dd><p>(autodetected if fourcc==UMP4)
+</p></dd>
+<dt> ‘<samp>no_padding</samp>’</dt>
+<dd><p>padding bug (autodetected)
+</p></dd>
+<dt> ‘<samp>amv</samp>’</dt>
+<dt> ‘<samp>ac_vlc</samp>’</dt>
+<dd><p>illegal vlc bug (autodetected per fourcc)
+</p></dd>
+<dt> ‘<samp>qpel_chroma</samp>’</dt>
+<dt> ‘<samp>std_qpel</samp>’</dt>
+<dd><p>old standard qpel (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>qpel_chroma2</samp>’</dt>
+<dt> ‘<samp>direct_blocksize</samp>’</dt>
+<dd><p>direct-qpel-blocksize bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>edge padding bug (autodetected per fourcc/version)
+</p></dd>
+<dt> ‘<samp>hpel_chroma</samp>’</dt>
+<dt> ‘<samp>dc_clip</samp>’</dt>
+<dt> ‘<samp>ms</samp>’</dt>
+<dd><p>Workaround various bugs in microsoft broken decoders.
+</p></dd>
+<dt> ‘<samp>trunc</samp>’</dt>
+<dd><p>trancated frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lelim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for luminance (negative
+values also consider DC coefficient).
+</p>
+</dd>
+<dt> ‘<samp>celim <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set single coefficient elimination threshold for chrominance (negative
+values also consider dc coefficient)
+</p>
+</dd>
+<dt> ‘<samp>strict <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Specify how strictly to follow the standards.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>very</samp>’</dt>
+<dd><p>strictly conform to a older more strict version of the spec or reference software
+</p></dd>
+<dt> ‘<samp>strict</samp>’</dt>
+<dd><p>strictly conform to all the things in the spec no matter what consequences
+</p></dd>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>unofficial</samp>’</dt>
+<dd><p>allow unofficial extensions
+</p></dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>allow non standardized experimental things, experimental
+(unfinished/work in progress/not well tested) decoders and encoders.
+Note: experimental decoders can pose a security risk, do not use this for
+decoding untrusted input.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>b_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and B frames.
+</p>
+</dd>
+<dt> ‘<samp>err_detect <var>flags</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set error detection flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>verify embedded CRCs
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>detect bitstream specification deviations
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>detect improper bitstream length
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>abort decoding on minor error detection
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>consider things that violate the spec and have not been seen in the wild as errors
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>consider all spec non compliancies as errors
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>consider things that a sane encoder should not do as an error
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>has_b_frames <var>integer</var></samp>’</dt>
+<dt> ‘<samp>block_align <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mpeg_quant <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Use MPEG quantizers instead of H.263.
+</p>
+</dd>
+<dt> ‘<samp>qsquish <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>How to keep quantizer between qmin and qmax (0 = clip, 1 = use
+differentiable function).
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_amp <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_qmod_freq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set experimental quantizer modulation.
+</p>
+</dd>
+<dt> ‘<samp>rc_override_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>rc_eq <var>string</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set rate control equation. When computing the expression, besides the
+standard functions defined in the section ’Expression Evaluation’, the
+following functions are available: bits2qp(bits), qp2bits(qp). Also
+the following constants are available: iTex pTex tex mv fCode iCount
+mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex
+avgTex.
+</p>
+</dd>
+<dt> ‘<samp>maxrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set max bitrate tolerance (in bits/s). Requires bufsize to be set.
+</p>
+</dd>
+<dt> ‘<samp>minrate <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR
+encode. It is of little use elsewise.
+</p>
+</dd>
+<dt> ‘<samp>bufsize <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set ratecontrol buffer size (in bits).
+</p>
+</dd>
+<dt> ‘<samp>rc_buf_aggressivity <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Currently useless.
+</p>
+</dd>
+<dt> ‘<samp>i_qfactor <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP factor between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>i_qoffset <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set QP offset between P and I frames.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_cplx <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set initial complexity for 1-pass encoding.
+</p>
+</dd>
+<dt> ‘<samp>dct <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set DCT algorithm.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>autoselect a good one (default)
+</p></dd>
+<dt> ‘<samp>fastint</samp>’</dt>
+<dd><p>fast integer
+</p></dd>
+<dt> ‘<samp>int</samp>’</dt>
+<dd><p>accurate integer
+</p></dd>
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>faan</samp>’</dt>
+<dd><p>floating point AAN DCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lumi_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress bright areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>tcplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set temporal complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>scplx_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set spatial complexity masking.
+</p>
+</dd>
+<dt> ‘<samp>p_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter masking.
+</p>
+</dd>
+<dt> ‘<samp>dark_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Compress dark areas stronger than medium ones.
+</p>
+</dd>
+<dt> ‘<samp>idct <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select IDCT implementation.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dt> ‘<samp>int</samp>’</dt>
+<dt> ‘<samp>simple</samp>’</dt>
+<dt> ‘<samp>simplemmx</samp>’</dt>
+<dt> ‘<samp>arm</samp>’</dt>
+<dt> ‘<samp>altivec</samp>’</dt>
+<dt> ‘<samp>sh4</samp>’</dt>
+<dt> ‘<samp>simplearm</samp>’</dt>
+<dt> ‘<samp>simplearmv5te</samp>’</dt>
+<dt> ‘<samp>simplearmv6</samp>’</dt>
+<dt> ‘<samp>simpleneon</samp>’</dt>
+<dt> ‘<samp>simplealpha</samp>’</dt>
+<dt> ‘<samp>ipp</samp>’</dt>
+<dt> ‘<samp>xvidmmx</samp>’</dt>
+<dt> ‘<samp>faani</samp>’</dt>
+<dd><p>floating point AAN IDCT
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>slice_count <var>integer</var></samp>’</dt>
+<dt> ‘<samp>ec <var>flags</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set error concealment strategy.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>guess_mvs</samp>’</dt>
+<dd><p>iterative motion vector (MV) search (slow)
+</p></dd>
+<dt> ‘<samp>deblock</samp>’</dt>
+<dd><p>use strong deblock filter for damaged MBs
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>bits_per_coded_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set prediction method.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>left</samp>’</dt>
+<dt> ‘<samp>plane</samp>’</dt>
+<dt> ‘<samp>median</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>aspect <var>rational number</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>debug <var>flags</var> (<em>decoding/encoding,audio,video,subtitles</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pict</samp>’</dt>
+<dd><p>picture info
+</p></dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dd><p>rate control
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dt> ‘<samp>mb_type</samp>’</dt>
+<dd><p>macroblock (MB) type
+</p></dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>per-block quantization parameter (QP)
+</p></dd>
+<dt> ‘<samp>mv</samp>’</dt>
+<dd><p>motion vector
+</p></dd>
+<dt> ‘<samp>dct_coeff</samp>’</dt>
+<dt> ‘<samp>skip</samp>’</dt>
+<dt> ‘<samp>startcode</samp>’</dt>
+<dt> ‘<samp>pts</samp>’</dt>
+<dt> ‘<samp>er</samp>’</dt>
+<dd><p>error recognition
+</p></dd>
+<dt> ‘<samp>mmco</samp>’</dt>
+<dd><p>memory management control operations (H.264)
+</p></dd>
+<dt> ‘<samp>bugs</samp>’</dt>
+<dt> ‘<samp>vis_qp</samp>’</dt>
+<dd><p>visualize quantization parameter (QP), lower QP are tinted greener
+</p></dd>
+<dt> ‘<samp>vis_mb_type</samp>’</dt>
+<dd><p>visualize block types
+</p></dd>
+<dt> ‘<samp>buffers</samp>’</dt>
+<dd><p>picture buffer allocations
+</p></dd>
+<dt> ‘<samp>thread_ops</samp>’</dt>
+<dd><p>threading operations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vismv <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Visualize motion vectors (MVs).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>pf</samp>’</dt>
+<dd><p>forward predicted MVs of P-frames
+</p></dd>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>forward predicted MVs of B-frames
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>backward predicted MVs of B-frames
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>cmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set full pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>subcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel me compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>mbcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>ildctcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set interlaced dct compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>last_pred <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set amount of motion predictors from the previous frame.
+</p>
+</dd>
+<dt> ‘<samp>preme <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation.
+</p>
+</dd>
+<dt> ‘<samp>precmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set pre motion estimation compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>pre_dia_size <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set diamond type & size for motion estimation pre-pass.
+</p>
+</dd>
+<dt> ‘<samp>subq <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set sub pel motion estimation quality.
+</p>
+</dd>
+<dt> ‘<samp>dtg_active_format <var>integer</var></samp>’</dt>
+<dt> ‘<samp>me_range <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set limit motion vectors range (1023 for DivX player).
+</p>
+</dd>
+<dt> ‘<samp>ibias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra quant bias.
+</p>
+</dd>
+<dt> ‘<samp>pbias <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set inter quant bias.
+</p>
+</dd>
+<dt> ‘<samp>color_table_id <var>integer</var></samp>’</dt>
+<dt> ‘<samp>global_quality <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>coder <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>vlc</samp>’</dt>
+<dd><p>variable length coder / huffman coder
+</p></dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>arithmetic coder
+</p></dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>raw (no encoding)
+</p></dd>
+<dt> ‘<samp>rle</samp>’</dt>
+<dd><p>run-length coder
+</p></dd>
+<dt> ‘<samp>deflate</samp>’</dt>
+<dd><p>deflate-based coder
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>context <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set context model.
+</p>
+</dd>
+<dt> ‘<samp>slice_flags <var>integer</var></samp>’</dt>
+<dt> ‘<samp>xvmc_acceleration <var>integer</var></samp>’</dt>
+<dt> ‘<samp>mbd <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock decision algorithm (high quality mode).
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>use mbcmp (default)
+</p></dd>
+<dt> ‘<samp>bits</samp>’</dt>
+<dd><p>use fewest bits
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>use best rate distortion
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>stream_codec_tag <var>integer</var></samp>’</dt>
+<dt> ‘<samp>sc_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set scene change threshold.
+</p>
+</dd>
+<dt> ‘<samp>lmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>lmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>nr <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set noise reduction.
+</p>
+</dd>
+<dt> ‘<samp>rc_init_occupancy <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set number of bits which should be loaded into the rc buffer before
+decoding starts.
+</p>
+</dd>
+<dt> ‘<samp>flags2 <var>flags</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dd><p>Allow non spec compliant speedup tricks.
+</p></dd>
+<dt> ‘<samp>sgop</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+<dt> ‘<samp>noout</samp>’</dt>
+<dd><p>Skip bitstream encoding.
+</p></dd>
+<dt> ‘<samp>ignorecrop</samp>’</dt>
+<dd><p>Ignore cropping information from sps.
+</p></dd>
+<dt> ‘<samp>local_header</samp>’</dt>
+<dd><p>Place global headers at every keyframe instead of in extradata.
+</p></dd>
+<dt> ‘<samp>chunks</samp>’</dt>
+<dd><p>Frame data might be split into multiple chunks.
+</p></dd>
+<dt> ‘<samp>showall</samp>’</dt>
+<dd><p>Show all frames before the first keyframe.
+</p></dd>
+<dt> ‘<samp>skiprd</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>error <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>qns <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Deprecated, use mpegvideo private options instead.
+</p>
+</dd>
+<dt> ‘<samp>threads <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>detect a good number of threads
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>me_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation threshold.
+</p>
+</dd>
+<dt> ‘<samp>mb_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set macroblock threshold.
+</p>
+</dd>
+<dt> ‘<samp>dc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set intra_dc_precision.
+</p>
+</dd>
+<dt> ‘<samp>nssew <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set nsse weight.
+</p>
+</dd>
+<dt> ‘<samp>skip_top <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the top which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>skip_bottom <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set number of macroblock rows at the bottom which are skipped.
+</p>
+</dd>
+<dt> ‘<samp>profile <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+<dt> ‘<samp>aac_main</samp>’</dt>
+<dt> ‘<samp>aac_low</samp>’</dt>
+<dt> ‘<samp>aac_ssr</samp>’</dt>
+<dt> ‘<samp>aac_ltp</samp>’</dt>
+<dt> ‘<samp>aac_he</samp>’</dt>
+<dt> ‘<samp>aac_he_v2</samp>’</dt>
+<dt> ‘<samp>aac_ld</samp>’</dt>
+<dt> ‘<samp>aac_eld</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_low</samp>’</dt>
+<dt> ‘<samp>mpeg2_aac_he</samp>’</dt>
+<dt> ‘<samp>dts</samp>’</dt>
+<dt> ‘<samp>dts_es</samp>’</dt>
+<dt> ‘<samp>dts_96_24</samp>’</dt>
+<dt> ‘<samp>dts_hd_hra</samp>’</dt>
+<dt> ‘<samp>dts_hd_ma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>unknown</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>lowres <var>integer</var> (<em>decoding,audio,video</em>)</samp>’</dt>
+<dd><p>Decode at 1= 1/2, 2=1/4, 3=1/8 resolutions.
+</p>
+</dd>
+<dt> ‘<samp>skip_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip threshold.
+</p>
+</dd>
+<dt> ‘<samp>skip_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip factor.
+</p>
+</dd>
+<dt> ‘<samp>skip_exp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip exponent.
+Negative values behave identical to the corresponding positive ones, except
+that the score is normalized.
+Positive values exist primarly for compatibility reasons and are not so useful.
+</p>
+</dd>
+<dt> ‘<samp>skipcmp <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set frame skip compare function.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>sad</samp>’</dt>
+<dd><p>sum of absolute differences, fast (default)
+</p></dd>
+<dt> ‘<samp>sse</samp>’</dt>
+<dd><p>sum of squared errors
+</p></dd>
+<dt> ‘<samp>satd</samp>’</dt>
+<dd><p>sum of absolute Hadamard transformed differences
+</p></dd>
+<dt> ‘<samp>dct</samp>’</dt>
+<dd><p>sum of absolute DCT transformed differences
+</p></dd>
+<dt> ‘<samp>psnr</samp>’</dt>
+<dd><p>sum of squared quantization errors (avoid, low quality)
+</p></dd>
+<dt> ‘<samp>bit</samp>’</dt>
+<dd><p>number of bits needed for the block
+</p></dd>
+<dt> ‘<samp>rd</samp>’</dt>
+<dd><p>rate distortion optimal, slow
+</p></dd>
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>0
+</p></dd>
+<dt> ‘<samp>vsad</samp>’</dt>
+<dd><p>sum of absolute vertical differences
+</p></dd>
+<dt> ‘<samp>vsse</samp>’</dt>
+<dd><p>sum of squared vertical differences
+</p></dd>
+<dt> ‘<samp>nsse</samp>’</dt>
+<dd><p>noise preserving sum of squared differences
+</p></dd>
+<dt> ‘<samp>w53</samp>’</dt>
+<dd><p>5/3 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>w97</samp>’</dt>
+<dd><p>9/7 wavelet, only used in snow
+</p></dd>
+<dt> ‘<samp>dctmax</samp>’</dt>
+<dt> ‘<samp>chroma</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>border_mask <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Increase the quantizer for macroblocks close to borders.
+</p>
+</dd>
+<dt> ‘<samp>mblmin <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set min macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mblmax <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set max macroblock lagrange factor (VBR).
+</p>
+</dd>
+<dt> ‘<samp>mepc <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set motion estimation bitrate penalty compensation (1.0 = 256).
+</p>
+</dd>
+<dt> ‘<samp>skip_loop_filter <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_idct <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>skip_frame <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd>
+<p>Make decoder discard processing depending on the frame type selected
+by the option value.
+</p>
+<p>‘<samp>skip_loop_filter</samp>’ skips frame loop filtering, ‘<samp>skip_idct</samp>’
+skips frame IDCT/dequantization, ‘<samp>skip_frame</samp>’ skips decoding.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Discard no frame.
+</p>
+</dd>
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Discard useless frames like 0-sized frames.
+</p>
+</dd>
+<dt> ‘<samp>noref</samp>’</dt>
+<dd><p>Discard all non-reference frames.
+</p>
+</dd>
+<dt> ‘<samp>bidir</samp>’</dt>
+<dd><p>Discard all bidirectional frames.
+</p>
+</dd>
+<dt> ‘<samp>nokey</samp>’</dt>
+<dd><p>Discard all frames excepts keyframes.
+</p>
+</dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Discard all frames.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>default</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>bidir_refine <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Refine the two motion vectors used in bidirectional macroblocks.
+</p>
+</dd>
+<dt> ‘<samp>brd_scale <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Downscale frames for dynamic B-frame decision.
+</p>
+</dd>
+<dt> ‘<samp>keyint_min <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set minimum interval between IDR-frames.
+</p>
+</dd>
+<dt> ‘<samp>refs <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set reference frames to consider for motion compensation.
+</p>
+</dd>
+<dt> ‘<samp>chromaoffset <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set chroma qp offset from luma.
+</p>
+</dd>
+<dt> ‘<samp>trellis <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dd><p>Set rate-distortion optimal quantization.
+</p>
+</dd>
+<dt> ‘<samp>sc_factor <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set value multiplied by qscale for each frame and added to
+scene_change_score.
+</p>
+</dd>
+<dt> ‘<samp>mv0_threshold <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>b_sensitivity <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Adjust sensitivity of b_frame_strategy 1.
+</p>
+</dd>
+<dt> ‘<samp>compression_level <var>integer</var> (<em>encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>min_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>max_prediction_order <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dt> ‘<samp>timecode_frame_start <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Set GOP timecode frame start number, in non drop frame format.
+</p>
+</dd>
+<dt> ‘<samp>request_channels <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set desired number of audio channels.
+</p>
+</dd>
+<dt> ‘<samp>bits_per_raw_sample <var>integer</var></samp>’</dt>
+<dt> ‘<samp>channel_layout <var>integer</var> (<em>decoding/encoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>request_channel_layout <var>integer</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p></dd>
+<dt> ‘<samp>rc_max_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>rc_min_vbv_use <var>float</var> (<em>encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>ticks_per_frame <var>integer</var> (<em>decoding/encoding,audio,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_primaries <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_trc <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>colorspace <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>color_range <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>chroma_sample_location <var>integer</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dt> ‘<samp>log_level_offset <var>integer</var></samp>’</dt>
+<dd><p>Set the log level offset.
+</p>
+</dd>
+<dt> ‘<samp>slices <var>integer</var> (<em>encoding,video</em>)</samp>’</dt>
+<dd><p>Number of slices, used in parallelized encoding.
+</p>
+</dd>
+<dt> ‘<samp>thread_type <var>flags</var> (<em>decoding/encoding,video</em>)</samp>’</dt>
+<dd><p>Select multithreading type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>slice</samp>’</dt>
+<dt> ‘<samp>frame</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>audio_service_type <var>integer</var> (<em>encoding,audio</em>)</samp>’</dt>
+<dd><p>Set audio service type.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ma</samp>’</dt>
+<dd><p>Main Audio Service
+</p></dd>
+<dt> ‘<samp>ef</samp>’</dt>
+<dd><p>Effects
+</p></dd>
+<dt> ‘<samp>vi</samp>’</dt>
+<dd><p>Visually Impaired
+</p></dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dd><p>Hearing Impaired
+</p></dd>
+<dt> ‘<samp>di</samp>’</dt>
+<dd><p>Dialogue
+</p></dd>
+<dt> ‘<samp>co</samp>’</dt>
+<dd><p>Commentary
+</p></dd>
+<dt> ‘<samp>em</samp>’</dt>
+<dd><p>Emergency
+</p></dd>
+<dt> ‘<samp>vo</samp>’</dt>
+<dd><p>Voice Over
+</p></dd>
+<dt> ‘<samp>ka</samp>’</dt>
+<dd><p>Karaoke
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>request_sample_fmt <var>sample_fmt</var> (<em>decoding,audio</em>)</samp>’</dt>
+<dd><p>Set sample format audio decoders should prefer. Default value is
+<code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_timebase <var>rational number</var></samp>’</dt>
+<dt> ‘<samp>sub_charenc <var>encoding</var> (<em>decoding,subtitles</em>)</samp>’</dt>
+<dd><p>Set the input subtitles character encoding.
+</p>
+</dd>
+<dt> ‘<samp>field_order <var>field_order</var> (<em>video</em>)</samp>’</dt>
+<dd><p>Set/override the field order of the video.
+Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>progressive</samp>’</dt>
+<dd><p>Progressive video
+</p></dd>
+<dt> ‘<samp>tt</samp>’</dt>
+<dd><p>Interlaced video, top field coded and displayed first
+</p></dd>
+<dt> ‘<samp>bb</samp>’</dt>
+<dd><p>Interlaced video, bottom field coded and displayed first
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>Interlaced video, top coded first, bottom displayed first
+</p></dd>
+<dt> ‘<samp>bt</samp>’</dt>
+<dd><p>Interlaced video, bottom coded first, top displayed first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>skip_alpha <var>integer</var> (<em>decoding,video</em>)</samp>’</dt>
+<dd><p>Set to 1 to disable processing alpha (transparency). This works like the
+‘<samp>gray</samp>’ flag in the ‘<samp>flags</samp>’ option which skips chroma information
+instead of alpha. Default is 0.
+</p></dd>
+</dl>
+
+
+<a name="Decoders"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Decoders">10. Decoders</a></h1>
+
+<p>Decoders are configured elements in FFmpeg which allow the decoding of
+multimedia streams.
+</p>
+<p>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 <code>--enable-lib</code> option. You can list all
+available decoders using the configure option <code>--list-decoders</code>.
+</p>
+<p>You can disable all the decoders with the configure option
+<code>--disable-decoders</code> and selectively enable / disable single decoders
+with the options <code>--enable-decoder=<var>DECODER</var></code> /
+<code>--disable-decoder=<var>DECODER</var></code>.
+</p>
+<p>The option <code>-decoders</code> of the ff* tools will display the list of
+enabled decoders.
+</p>
+
+<a name="Video-Decoders"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Video-Decoders">11. Video Decoders</a></h1>
+
+<p>A description of some of the currently available video decoders
+follows.
+</p>
+<a name="rawvideo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rawvideo">11.1 rawvideo</a></h2>
+
+<p>Raw video decoder.
+</p>
+<p>This decoder decodes rawvideo streams.
+</p>
+<a name="Options-1"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-1">11.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>top <var>top_field_first</var></samp>’</dt>
+<dd><p>Specify the assumed field type of the input video.
+</p><dl compact="compact">
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>the video is assumed to be progressive (default)
+</p></dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>bottom-field-first is assumed
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>top-field-first is assumed
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+
+<a name="Audio-Decoders"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Audio-Decoders">12. Audio Decoders</a></h1>
+
+<p>A description of some of the currently available audio decoders
+follows.
+</p>
+<a name="ac3"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ac3">12.1 ac3</a></h2>
+
+<p>AC-3 audio decoder.
+</p>
+<p>This decoder implements part of ATSC A/52:2010 and ETSI TS 102 366, as well as
+the undocumented RealAudio 3 (a.k.a. dnet).
+</p>
+<a name="AC_002d3-Decoder-Options"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-AC_002d3-Decoder-Options">12.1.1 AC-3 Decoder Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>-drc_scale <var>value</var></samp>’</dt>
+<dd><p>Dynamic Range Scale Factor. The factor to apply to dynamic range values
+from the AC-3 stream. This factor is applied exponentially.
+There are 3 notable scale factor ranges:
+</p><dl compact="compact">
+<dt> ‘<samp>drc_scale == 0</samp>’</dt>
+<dd><p>DRC disabled. Produces full range audio.
+</p></dd>
+<dt> ‘<samp>0 < drc_scale <= 1</samp>’</dt>
+<dd><p>DRC enabled. Applies a fraction of the stream DRC value.
+Audio reproduction is between full range and full compression.
+</p></dd>
+<dt> ‘<samp>drc_scale > 1</samp>’</dt>
+<dd><p>DRC enabled. Applies drc_scale asymmetrically.
+Loud sounds are fully compressed. Soft sounds are enhanced.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="ffwavesynth"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ffwavesynth">12.2 ffwavesynth</a></h2>
+
+<p>Internal wave synthetizer.
+</p>
+<p>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.
+</p>
+<a name="libcelt"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libcelt">12.3 libcelt</a></h2>
+
+<p>libcelt decoder wrapper.
+</p>
+<p>libcelt allows libavcodec to decode the Xiph CELT ultra-low delay audio codec.
+Requires the presence of the libcelt headers and library during configuration.
+You need to explicitly configure the build with <code>--enable-libcelt</code>.
+</p>
+<a name="libgsm"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libgsm">12.4 libgsm</a></h2>
+
+<p>libgsm decoder wrapper.
+</p>
+<p>libgsm allows libavcodec to decode the GSM full rate audio codec. Requires
+the presence of the libgsm headers and library during configuration. You need
+to explicitly configure the build with <code>--enable-libgsm</code>.
+</p>
+<p>This decoder supports both the ordinary GSM and the Microsoft variant.
+</p>
+<a name="libilbc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libilbc">12.5 libilbc</a></h2>
+
+<p>libilbc decoder wrapper.
+</p>
+<p>libilbc allows libavcodec to decode the Internet Low Bitrate Codec (iLBC)
+audio codec. Requires the presence of the libilbc headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libilbc</code>.
+</p>
+<a name="Options-11"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-11">12.5.1 Options</a></h3>
+
+<p>The following option is supported by the libilbc wrapper.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>enhance</samp>’</dt>
+<dd>
+<p>Enable the enhancement of the decoded audio when set to 1. The default
+value is 0 (disabled).
+</p>
+</dd>
+</dl>
+
+<a name="libopencore_002damrnb"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libopencore_002damrnb">12.6 libopencore-amrnb</a></h2>
+
+<p>libopencore-amrnb decoder wrapper.
+</p>
+<p>libopencore-amrnb allows libavcodec to decode the Adaptive Multi-Rate
+Narrowband audio codec. Using it requires the presence of the
+libopencore-amrnb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrnb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-NB exists, so users can decode AMR-NB
+without this library.
+</p>
+<a name="libopencore_002damrwb"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libopencore_002damrwb">12.7 libopencore-amrwb</a></h2>
+
+<p>libopencore-amrwb decoder wrapper.
+</p>
+<p>libopencore-amrwb allows libavcodec to decode the Adaptive Multi-Rate
+Wideband audio codec. Using it requires the presence of the
+libopencore-amrwb headers and library during configuration. You need to
+explicitly configure the build with <code>--enable-libopencore-amrwb</code>.
+</p>
+<p>An FFmpeg native decoder for AMR-WB exists, so users can decode AMR-WB
+without this library.
+</p>
+<a name="libopus"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libopus">12.8 libopus</a></h2>
+
+<p>libopus decoder wrapper.
+</p>
+<p>libopus allows libavcodec to decode the Opus Interactive Audio Codec.
+Requires the presence of the libopus headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libopus</code>.
+</p>
+
+<a name="Subtitles-Decoders"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Subtitles-Decoders">13. Subtitles Decoders</a></h1>
+
+<a name="dvdsub"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-dvdsub">13.1 dvdsub</a></h2>
+
+<p>This codec decodes the bitmap subtitles used in DVDs; the same subtitles can
+also be found in VobSub file pairs and in some Matroska files.
+</p>
+<a name="Options-7"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-7">13.1.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>palette</samp>’</dt>
+<dd><p>Specify the global palette used by the bitmaps. When stored in VobSub, the
+palette is normally specified in the index file; in Matroska, the palette is
+stored in the codec extra-data in the same format as in VobSub. In DVDs, the
+palette is stored in the IFO file, and therefore not available when reading
+from dumped VOB files.
+</p>
+<p>The format for this option is a string containing 16 24-bits hexadecimal
+numbers (without 0x prefix) separated by comas, for example <code>0d00ee,
+ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1,
+7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b</code>.
+</p></dd>
+</dl>
+
+<a name="libzvbi_002dteletext"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libzvbi_002dteletext">13.2 libzvbi-teletext</a></h2>
+
+<p>Libzvbi allows libavcodec to decode DVB teletext pages and DVB teletext
+subtitles. Requires the presence of the libzvbi headers and library during
+configuration. You need to explicitly configure the build with
+<code>--enable-libzvbi</code>.
+</p>
+<a name="Options-12"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-12">13.2.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>txt_page</samp>’</dt>
+<dd><p>List of teletext page numbers to decode. You may use the special * string to
+match all pages. Pages that do not match the specified list are dropped.
+Default value is *.
+</p></dd>
+<dt> ‘<samp>txt_chop_top</samp>’</dt>
+<dd><p>Discards the top teletext line. Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_format</samp>’</dt>
+<dd><p>Specifies the format of the decoded subtitles. The teletext decoder is capable
+of decoding the teletext pages to bitmaps or to simple text, you should use
+"bitmap" for teletext pages, because certain graphics and colors cannot be
+expressed in simple text. You might use "text" for teletext based subtitles if
+your application can handle simple text based subtitles. Default value is
+bitmap.
+</p></dd>
+<dt> ‘<samp>txt_left</samp>’</dt>
+<dd><p>X offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_top</samp>’</dt>
+<dd><p>Y offset of generated bitmaps, default is 0.
+</p></dd>
+<dt> ‘<samp>txt_chop_spaces</samp>’</dt>
+<dd><p>Chops leading and trailing spaces and removes empty lines from the generated
+text. This option is useful for teletext based subtitles where empty spaces may
+be present at the start or at the end of the lines or empty lines may be
+present between the subtitle lines because of double-sized teletext charactes.
+Default value is 1.
+</p></dd>
+<dt> ‘<samp>txt_duration</samp>’</dt>
+<dd><p>Sets the display duration of the decoded teletext pages or subtitles in
+miliseconds. Default value is 30000 which is 30 seconds.
+</p></dd>
+<dt> ‘<samp>txt_transparent</samp>’</dt>
+<dd><p>Force transparent background of the generated teletext bitmaps. Default value
+is 0 which means an opaque (black) background.
+</p></dd>
+</dl>
+
+<a name="Bitstream-Filters"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Bitstream-Filters">14. Bitstream Filters</a></h1>
+
+<p>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 <code>--list-bsfs</code>.
+</p>
+<p>You can disable all the bitstream filters using the configure option
+<code>--disable-bsfs</code>, and selectively enable any bitstream filter using
+the option <code>--enable-bsf=BSF</code>, or you can disable a particular
+bitstream filter using the option <code>--disable-bsf=BSF</code>.
+</p>
+<p>The option <code>-bsfs</code> of the ff* tools will display the list of
+all the supported bitstream filters included in your build.
+</p>
+<p>Below is a description of the currently available bitstream filters.
+</p>
+<a name="aac_005fadtstoasc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aac_005fadtstoasc">14.1 aac_adtstoasc</a></h2>
+
+<p>Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration
+bitstream filter.
+</p>
+<p>This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
+ADTS header and removes the ADTS header.
+</p>
+<p>This is required for example when copying an AAC stream from a raw
+ADTS AAC container to a FLV or a MOV/MP4 file.
+</p>
+<a name="chomp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-chomp">14.2 chomp</a></h2>
+
+<p>Remove zero padding at the end of a packet.
+</p>
+<a name="dump_005fextra"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-dump_005fextra">14.3 dump_extra</a></h2>
+
+<p>Add extradata to the beginning of the filtered packets.
+</p>
+<p>The additional argument specifies which packets should be filtered.
+It accepts the values:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>add extradata to all key packets, but only if <var>local_header</var> is
+set in the ‘<samp>flags2</samp>’ codec context field
+</p>
+</dd>
+<dt> ‘<samp>k</samp>’</dt>
+<dd><p>add extradata to all key packets
+</p>
+</dd>
+<dt> ‘<samp>e</samp>’</dt>
+<dd><p>add extradata to all packets
+</p></dd>
+</dl>
+
+<p>If not specified it is assumed ‘<samp>k</samp>’.
+</p>
+<p>For example the following <code>ffmpeg</code> command forces a global
+header (thus disabling individual packet headers) in the H.264 packets
+generated by the <code>libx264</code> encoder, but corrects them by adding
+the header stored in extradata to the key packets:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
+</pre></td></tr></table>
+
+<a name="h264_005fmp4toannexb"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-h264_005fmp4toannexb">14.4 h264_mp4toannexb</a></h2>
+
+<p>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).
+</p>
+<p>This is required by some streaming formats, typically the MPEG-2
+transport stream format ("mpegts").
+</p>
+<p>For example to remux an MP4 file containing an H.264 stream to mpegts
+format with <code>ffmpeg</code>, you can use the command:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
+</pre></td></tr></table>
+
+<a name="imx_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-imx_005fdump_005fheader">14.5 imx_dump_header</a></h2>
+
+<a name="mjpeg2jpeg"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mjpeg2jpeg">14.6 mjpeg2jpeg</a></h2>
+
+<p>Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
+</p>
+<p>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
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
+</pre></td></tr></table>
+
+<p>Unfortunately, these chunks are incomplete JPEG images, because
+they lack the DHT segment required for decoding. Quoting from
+<a href="http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml">http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml</a>:
+</p>
+<p>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."
+</p>
+<p>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.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
+exiftran -i -9 frame*.jpg
+ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
+</pre></td></tr></table>
+
+<a name="mjpega_005fdump_005fheader"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mjpega_005fdump_005fheader">14.7 mjpega_dump_header</a></h2>
+
+<a name="movsub"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-movsub">14.8 movsub</a></h2>
+
+<a name="mp3_005fheader_005fdecompress"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mp3_005fheader_005fdecompress">14.9 mp3_header_decompress</a></h2>
+
+<a name="noise"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-noise">14.10 noise</a></h2>
+
+<a name="remove_005fextra"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-remove_005fextra">14.11 remove_extra</a></h2>
+
+<a name="Format-Options"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Format-Options">15. Format Options</a></h1>
+
+<p>The libavformat library provides some generic global options, which
+can be set on all the muxers and demuxers. In addition each muxer or
+demuxer may support so-called private options, which are specific for
+that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+<p>The list of supported options follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>avioflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>direct</samp>’</dt>
+<dd><p>Reduce buffering.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>probesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set probing size in bytes, i.e. the size of the data to analyze to get
+stream information. A higher value will allow to detect more
+information in case it is dispersed into the stream, but will increase
+latency. Must be an integer not lesser than 32. It is 5000000 by default.
+</p>
+</dd>
+<dt> ‘<samp>packetsize <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set packet size.
+</p>
+</dd>
+<dt> ‘<samp>fflags <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set format flags.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ignidx</samp>’</dt>
+<dd><p>Ignore index.
+</p></dd>
+<dt> ‘<samp>genpts</samp>’</dt>
+<dd><p>Generate PTS.
+</p></dd>
+<dt> ‘<samp>nofillin</samp>’</dt>
+<dd><p>Do not fill in missing values that can be exactly calculated.
+</p></dd>
+<dt> ‘<samp>noparse</samp>’</dt>
+<dd><p>Disable AVParsers, this needs <code>+nofillin</code> too.
+</p></dd>
+<dt> ‘<samp>igndts</samp>’</dt>
+<dd><p>Ignore DTS.
+</p></dd>
+<dt> ‘<samp>discardcorrupt</samp>’</dt>
+<dd><p>Discard corrupted frames.
+</p></dd>
+<dt> ‘<samp>sortdts</samp>’</dt>
+<dd><p>Try to interleave output packets by DTS.
+</p></dd>
+<dt> ‘<samp>keepside</samp>’</dt>
+<dd><p>Do not merge side data.
+</p></dd>
+<dt> ‘<samp>latm</samp>’</dt>
+<dd><p>Enable RTP MP4A-LATM payload.
+</p></dd>
+<dt> ‘<samp>nobuffer</samp>’</dt>
+<dd><p>Reduce the latency introduced by optional buffering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seek2any <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Allow seeking to non-keyframes on demuxer level when supported if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>analyzeduration <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Specify how many microseconds are analyzed to probe the input. A
+higher value will allow to detect more accurate information, but will
+increase latency. It defaults to 5,000,000 microseconds = 5 seconds.
+</p>
+</dd>
+<dt> ‘<samp>cryptokey <var>hexadecimal string</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set decryption key.
+</p>
+</dd>
+<dt> ‘<samp>indexmem <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for timestamp index (per stream).
+</p>
+</dd>
+<dt> ‘<samp>rtbufsize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set max memory used for buffering real-time frames.
+</p>
+</dd>
+<dt> ‘<samp>fdebug <var>flags</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Print specific debug info.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>ts</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>max_delay <var>integer</var> (<em>input/output</em>)</samp>’</dt>
+<dd><p>Set maximum muxing or demuxing delay in microseconds.
+</p>
+</dd>
+<dt> ‘<samp>fpsprobesize <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of frames used to probe fps.
+</p>
+</dd>
+<dt> ‘<samp>audio_preload <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds by which audio packets should be interleaved earlier.
+</p>
+</dd>
+<dt> ‘<samp>chunk_duration <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set microseconds for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>chunk_size <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set size in bytes for each chunk.
+</p>
+</dd>
+<dt> ‘<samp>err_detect, f_err_detect <var>flags</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set error detection flags. <code>f_err_detect</code> is deprecated and
+should be used only via the <code>ffmpeg</code> tool.
+</p>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>crccheck</samp>’</dt>
+<dd><p>Verify embedded CRCs.
+</p></dd>
+<dt> ‘<samp>bitstream</samp>’</dt>
+<dd><p>Detect bitstream specification deviations.
+</p></dd>
+<dt> ‘<samp>buffer</samp>’</dt>
+<dd><p>Detect improper bitstream length.
+</p></dd>
+<dt> ‘<samp>explode</samp>’</dt>
+<dd><p>Abort decoding on minor error detection.
+</p></dd>
+<dt> ‘<samp>careful</samp>’</dt>
+<dd><p>Consider things that violate the spec and have not been seen in the
+wild as errors.
+</p></dd>
+<dt> ‘<samp>compliant</samp>’</dt>
+<dd><p>Consider all spec non compliancies as errors.
+</p></dd>
+<dt> ‘<samp>aggressive</samp>’</dt>
+<dd><p>Consider things that a sane encoder should not do as an error.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_wallclock_as_timestamps <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Use wallclock as timestamps.
+</p>
+</dd>
+<dt> ‘<samp>avoid_negative_ts <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd>
+<p>Possible values:
+</p><dl compact="compact">
+<dt> ‘<samp>make_non_negative</samp>’</dt>
+<dd><p>Shift timestamps to make them non-negative.
+Also note that this affects only leading negative timestamps, and not
+non-monotonic negative timestamps.
+</p></dd>
+<dt> ‘<samp>make_zero</samp>’</dt>
+<dd><p>Shift timestamps so that the first timestamp is 0.
+</p></dd>
+<dt> ‘<samp>auto (default)</samp>’</dt>
+<dd><p>Enables shifting when required by the target format.
+</p></dd>
+<dt> ‘<samp>disabled</samp>’</dt>
+<dd><p>Disables shifting of timestamp.
+</p></dd>
+</dl>
+
+<p>When shifting is enabled, all output timestamps are shifted by the
+same amount. Audio, video, and subtitles desynching and relative
+timestamp differences are preserved compared to how they would have
+been without shifting.
+</p>
+</dd>
+<dt> ‘<samp>skip_initial_bytes <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Set number of bytes to skip before reading header and frames if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>correct_ts_overflow <var>integer</var> (<em>input</em>)</samp>’</dt>
+<dd><p>Correct single timestamp overflows if set to 1. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>flush_packets <var>integer</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Flush the underlying I/O stream after each packet. Default 1 enables it, and
+has the effect of reducing the latency; 0 disables it and may slightly
+increase performance in some cases.
+</p>
+</dd>
+<dt> ‘<samp>output_ts_offset <var>offset</var> (<em>output</em>)</samp>’</dt>
+<dd><p>Set the output time offset.
+</p>
+<p><var>offset</var> must be a time duration specification,
+see <a href="ffmpeg-utils.html#time-duration-syntax">(ffmpeg-utils)time duration syntax</a>.
+</p>
+<p>The offset is added by the muxer to the output timestamps.
+</p>
+<p>Specifying a positive offset means that the corresponding streams are
+delayed bt the time duration specified in <var>offset</var>. Default value
+is <code>0</code> (meaning that no offset is applied).
+</p></dd>
+</dl>
+
+
+<p><a name="Format-stream-specifiers"></a>
+</p><a name="Format-stream-specifiers-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Format-stream-specifiers-1">15.1 Format stream specifiers</a></h2>
+
+<p>Format stream specifiers allow selection of one or more streams that
+match specific properties.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index.
+</p>
+</dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio,
+’s’ for subtitle, ’d’ for data, and ’t’ for attachments. If
+<var>stream_index</var> is given, then it matches the stream number
+<var>stream_index</var> of this type. Otherwise, it matches all streams of
+this type.
+</p>
+</dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number
+<var>stream_index</var> in the program with the id
+<var>program_id</var>. Otherwise, it matches all streams in the program.
+</p>
+</dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<p>The exact semantics of stream specifiers is defined by the
+<code>avformat_match_stream_specifier()</code> function declared in the
+‘<tt>libavformat/avformat.h</tt>’ header.
+</p>
+<a name="Demuxers"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Demuxers">16. Demuxers</a></h1>
+
+<p>Demuxers are configured elements in FFmpeg that can read the
+multimedia streams from a particular type of file.
+</p>
+<p>When you configure your FFmpeg build, all the supported demuxers
+are enabled by default. You can list all available ones using the
+configure option <code>--list-demuxers</code>.
+</p>
+<p>You can disable all the demuxers using the configure option
+<code>--disable-demuxers</code>, and selectively enable a single demuxer with
+the option <code>--enable-demuxer=<var>DEMUXER</var></code>, or disable it
+with the option <code>--disable-demuxer=<var>DEMUXER</var></code>.
+</p>
+<p>The option <code>-formats</code> of the ff* tools will display the list of
+enabled demuxers.
+</p>
+<p>The description of some of the currently available demuxers follows.
+</p>
+<a name="applehttp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-applehttp">16.1 applehttp</a></h2>
+
+<p>Apple HTTP Live Streaming demuxer.
+</p>
+<p>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".
+</p>
+<a name="asf"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-asf">16.2 asf</a></h2>
+
+<p>Advanced Systems Format demuxer.
+</p>
+<p>This demuxer is used to demux ASF files and MMS network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-no_resync_search <var>bool</var></samp>’</dt>
+<dd><p>Do not try to resynchronize by looking for a certain optional start code.
+</p></dd>
+</dl>
+
+<p><a name="concat"></a>
+</p><a name="concat-2"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-concat-2">16.3 concat</a></h2>
+
+<p>Virtual concatenation script demuxer.
+</p>
+<p>This demuxer reads a list of files and other directives from a text file and
+demuxes them one after the other, as if all their packet had been muxed
+together.
+</p>
+<p>The timestamps in the files are adjusted so that the first file starts at 0
+and each next file starts where the previous one finishes. Note that it is
+done globally and may cause gaps if all streams do not have exactly the same
+length.
+</p>
+<p>All files must have the same streams (same codecs, same time base, etc.).
+</p>
+<p>The duration of each file is used to adjust the timestamps of the next file:
+if the duration is incorrect (because it was computed using the bit-rate or
+because the file is truncated, for example), it can cause artifacts. The
+<code>duration</code> directive can be used to override the duration stored in
+each file.
+</p>
+<a name="Syntax-2"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Syntax-2">16.3.1 Syntax</a></h3>
+
+<p>The script is a text file in extended-ASCII, with one directive per line.
+Empty lines, leading spaces and lines starting with ’#’ are ignored. The
+following directive is recognized:
+</p>
+<dl compact="compact">
+<dt> ‘<samp><code>file <var>path</var></code></samp>’</dt>
+<dd><p>Path to a file to read; special characters and spaces must be escaped with
+backslash or single quotes.
+</p>
+<p>All subsequent directives apply to that file.
+</p>
+</dd>
+<dt> ‘<samp><code>ffconcat version 1.0</code></samp>’</dt>
+<dd><p>Identify the script type and version. It also sets the ‘<samp>safe</samp>’ option
+to 1 if it was to its default -1.
+</p>
+<p>To make FFmpeg recognize the format automatically, this directive must
+appears exactly as is (no extra space or byte-order-mark) on the very first
+line of the script.
+</p>
+</dd>
+<dt> ‘<samp><code>duration <var>dur</var></code></samp>’</dt>
+<dd><p>Duration of the file. This information can be specified from the file;
+specifying it here may be more efficient or help if the information from the
+file is not available or accurate.
+</p>
+<p>If the duration is set for all files, then it is possible to seek in the
+whole concatenated video.
+</p>
+</dd>
+</dl>
+
+<a name="Options-8"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-8">16.3.2 Options</a></h3>
+
+<p>This demuxer accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>safe</samp>’</dt>
+<dd><p>If set to 1, reject unsafe file paths. A file path is considered safe if it
+does not contain a protocol specification and is relative and all components
+only contain characters from the portable character set (letters, digits,
+period, underscore and hyphen) and have no period at the beginning of a
+component.
+</p>
+<p>If set to 0, any file name is accepted.
+</p>
+<p>The default is -1, it is equivalent to 1 if the format was automatically
+probed and 0 otherwise.
+</p>
+</dd>
+</dl>
+
+<a name="flv"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-flv">16.4 flv</a></h2>
+
+<p>Adobe Flash Video Format demuxer.
+</p>
+<p>This demuxer is used to demux FLV files and RTMP network streams.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-flv_metadata <var>bool</var></samp>’</dt>
+<dd><p>Allocate the streams according to the onMetaData array content.
+</p></dd>
+</dl>
+
+<a name="libgme"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libgme">16.5 libgme</a></h2>
+
+<p>The Game Music Emu library is a collection of video game music file emulators.
+</p>
+<p>See <a href="http://code.google.com/p/game-music-emu/">http://code.google.com/p/game-music-emu/</a> for more information.
+</p>
+<p>Some files have multiple tracks. The demuxer will pick the first track by
+default. The ‘<samp>track_index</samp>’ option can be used to select a different
+track. Track indexes start at 0. The demuxer exports the number of tracks as
+<var>tracks</var> meta data entry.
+</p>
+<p>For very large files, the ‘<samp>max_size</samp>’ option may have to be adjusted.
+</p>
+<a name="libquvi"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libquvi">16.6 libquvi</a></h2>
+
+<p>Play media from Internet services using the quvi project.
+</p>
+<p>The demuxer accepts a ‘<samp>format</samp>’ option to request a specific quality. It
+is by default set to <var>best</var>.
+</p>
+<p>See <a href="http://quvi.sourceforge.net/">http://quvi.sourceforge.net/</a> for more information.
+</p>
+<p>FFmpeg needs to be built with <code>--enable-libquvi</code> for this demuxer to be
+enabled.
+</p>
+<a name="image2"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-image2">16.7 image2</a></h2>
+
+<p>Image file demuxer.
+</p>
+<p>This demuxer reads from a list of image files specified by a pattern.
+The syntax and meaning of the pattern is specified by the
+option <var>pattern_type</var>.
+</p>
+<p>The pattern may contain a suffix which is used to automatically
+determine the format of the images contained in the files.
+</p>
+<p>The size, the pixel format, and the format of each image must be the
+same for all the files in the sequence.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate for the video stream. It defaults to 25.
+</p></dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>If set to 1, loop over the input. Default value is 0.
+</p></dd>
+<dt> ‘<samp>pattern_type</samp>’</dt>
+<dd><p>Select the pattern type used to interpret the provided filename.
+</p>
+<p><var>pattern_type</var> accepts one of the following values.
+</p><dl compact="compact">
+<dt> ‘<samp>sequence</samp>’</dt>
+<dd><p>Select a sequence pattern type, used to specify a sequence of files
+indexed by sequential numbers.
+</p>
+<p>A sequence pattern may contain the string "%d" or "%0<var>N</var>d", which
+specifies the position of the characters representing a sequential
+number in each filename matched by the pattern. If the form
+"%d0<var>N</var>d" is used, the string representing the number in each
+filename is 0-padded and <var>N</var> is the total number of 0-padded
+digits representing the number. The literal character ’%’ can be
+specified in the pattern with the string "%%".
+</p>
+<p>If the sequence pattern contains "%d" or "%0<var>N</var>d", the first filename of
+the file list specified by the pattern must contain a number
+inclusively contained between <var>start_number</var> and
+<var>start_number</var>+<var>start_number_range</var>-1, and all the following
+numbers must be sequential.
+</p>
+<p>For example the pattern "img-%03d.bmp" will match a sequence of
+filenames of the form ‘<tt>img-001.bmp</tt>’, ‘<tt>img-002.bmp</tt>’, ...,
+‘<tt>img-010.bmp</tt>’, etc.; the pattern "i%%m%%g-%d.jpg" will match a
+sequence of filenames of the form ‘<tt>i%m%g-1.jpg</tt>’,
+‘<tt>i%m%g-2.jpg</tt>’, ..., ‘<tt>i%m%g-10.jpg</tt>’, etc.
+</p>
+<p>Note that the pattern must not necessarily contain "%d" or
+"%0<var>N</var>d", for example to convert a single image file
+‘<tt>img.jpeg</tt>’ you can employ the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i img.jpeg img.png
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>glob</samp>’</dt>
+<dd><p>Select a glob wildcard pattern type.
+</p>
+<p>The pattern is interpreted like a <code>glob()</code> pattern. This is only
+selectable if libavformat was compiled with globbing support.
+</p>
+</dd>
+<dt> ‘<samp>glob_sequence <em>(deprecated, will be removed)</em></samp>’</dt>
+<dd><p>Select a mixed glob wildcard/sequence pattern.
+</p>
+<p>If your version of libavformat was compiled with globbing support, and
+the provided pattern contains at least one glob meta character among
+<code>%*?[]{}</code> that is preceded by an unescaped "%", the pattern is
+interpreted like a <code>glob()</code> pattern, otherwise it is interpreted
+like a sequence pattern.
+</p>
+<p>All glob special characters <code>%*?[]{}</code> must be prefixed
+with "%". To escape a literal "%" you shall use "%%".
+</p>
+<p>For example the pattern <code>foo-%*.jpeg</code> will match all the
+filenames prefixed by "foo-" and terminating with ".jpeg", and
+<code>foo-%?%?%?.jpeg</code> will match all the filenames prefixed with
+"foo-", followed by a sequence of three characters, and terminating
+with ".jpeg".
+</p>
+<p>This pattern type is deprecated in favor of <var>glob</var> and
+<var>sequence</var>.
+</p></dd>
+</dl>
+
+<p>Default value is <var>glob_sequence</var>.
+</p></dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the pixel format of the images to read. If not specified the pixel
+format is guessed from the first image file in the sequence.
+</p></dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>Set the index of the file matched by the image file pattern to start
+to read from. Default value is 0.
+</p></dd>
+<dt> ‘<samp>start_number_range</samp>’</dt>
+<dd><p>Set the index interval range to check when looking for the first image
+file in the sequence, starting from <var>start_number</var>. Default value
+is 5.
+</p></dd>
+<dt> ‘<samp>ts_from_file</samp>’</dt>
+<dd><p>If set to 1, will set frame timestamp to modification time of image file. Note
+that monotonity of timestamps is not provided: images go in the same order as
+without this option. Default value is 0.
+</p></dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size of the images to read. If not specified the video
+size is guessed from the first image file in the sequence.
+</p></dd>
+</dl>
+
+<a name="Examples-76"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-76">16.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for creating a video from the images in the file
+sequence ‘<tt>img-001.jpeg</tt>’, ‘<tt>img-002.jpeg</tt>’, ..., assuming an
+input frame rate of 10 frames per second:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+As above, but start by reading from a file with index 100 in the sequence:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
+</pre></td></tr></table>
+
+</li><li>
+Read images matching the "*.png" glob pattern , that is all the files
+terminating with the ".png" suffix:
+<table><tr><td> </td><td><pre class="example">ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mpegts"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mpegts">16.8 mpegts</a></h2>
+
+<p>MPEG-2 transport stream demuxer.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fix_teletext_pts</samp>’</dt>
+<dd><p>Overrides teletext packet PTS and DTS values with the timestamps calculated
+from the PCR of the first program which the teletext stream is part of and is
+not discarded. Default value is 1, set this option to 0 if you want your
+teletext packet PTS and DTS values untouched.
+</p></dd>
+</dl>
+
+<a name="rawvideo-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rawvideo-1">16.9 rawvideo</a></h2>
+
+<p>Raw video demuxer.
+</p>
+<p>This demuxer allows one to read raw video data. Since there is no header
+specifying the assumed video parameters, the user must specify them
+in order to be able to decode the data correctly.
+</p>
+<p>This demuxer accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set input video frame rate. Default value is 25.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Set the input video pixel format. Default value is <code>yuv420p</code>.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the input video size. This value must be specified explicitly.
+</p></dd>
+</dl>
+
+<p>For example to read a rawvideo file ‘<tt>input.raw</tt>’ with
+<code>ffplay</code>, assuming a pixel format of <code>rgb24</code>, a video
+size of <code>320x240</code>, and a frame rate of 10 images per second, use
+the command:
+</p><table><tr><td> </td><td><pre class="example">ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
+</pre></td></tr></table>
+
+<a name="sbg"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sbg">16.10 sbg</a></h2>
+
+<p>SBaGen script demuxer.
+</p>
+<p>This demuxer reads the script language used by SBaGen
+<a href="http://uazu.net/sbagen/">http://uazu.net/sbagen/</a> to generate binaural beats sessions. A SBG
+script looks like that:
+</p><table><tr><td> </td><td><pre class="example">-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
+</pre></td></tr></table>
+
+<p>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 <var>NOW</var> 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.
+</p>
+<a name="tedcaptions"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-tedcaptions">16.11 tedcaptions</a></h2>
+
+<p>JSON captions used for <a href="http://www.ted.com/">TED Talks</a>.
+</p>
+<p>TED does not provide links to the captions, but they can be guessed from the
+page. The file ‘<tt>tools/bookmarklets.html</tt>’ from the FFmpeg source tree
+contains a bookmarklet to expose them.
+</p>
+<p>This demuxer accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Set the start time of the TED talk, in milliseconds. The default is 15000
+(15s). It is used to sync the captions with the downloadable videos, because
+they include a 15s intro.
+</p></dd>
+</dl>
+
+<p>Example: convert the captions to a format most players understand:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
+</pre></td></tr></table>
+
+<a name="Metadata"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Metadata">17. Metadata</a></h1>
+
+<p>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.
+</p>
+<p>The file format is as follows:
+</p><ol>
+<li>
+A file consists of a header and a number of metadata tags divided into sections,
+each on its own line.
+
+</li><li>
+The header is a ’;FFMETADATA’ string, followed by a version number (now 1).
+
+</li><li>
+Metadata tags are of the form ’key=value’
+
+</li><li>
+Immediately after header follows global metadata
+
+</li><li>
+After global metadata there may be sections with per-stream/per-chapter
+metadata.
+
+</li><li>
+A section starts with the section name in uppercase (i.e. STREAM or CHAPTER) in
+brackets (’[’, ’]’) and ends with next section or end of file.
+
+</li><li>
+At the beginning of a chapter section there may be an optional timebase to be
+used for start/end values. It must be in form ’TIMEBASE=num/den’, where num and
+den are integers. If the timebase is missing then start/end times are assumed to
+be in milliseconds.
+Next a chapter section must contain chapter start and end times in form
+’START=num’, ’END=num’, where num is a positive integer.
+
+</li><li>
+Empty lines and lines starting with ’;’ or ’#’ are ignored.
+
+</li><li>
+Metadata keys or values containing special characters (’=’, ’;’, ’#’, ’\’ and a
+newline) must be escaped with a backslash ’\’.
+
+</li><li>
+Note that whitespace in metadata (e.g. foo = bar) is considered to be a part of
+the tag (in the example above key is ’foo ’, value is ’ bar’).
+</li></ol>
+
+<p>A ffmetadata file might look like this:
+</p><table><tr><td> </td><td><pre class="example">;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
+</pre></td></tr></table>
+
+<p>By using the ffmetadata muxer and demuxer it is possible to extract
+metadata from an input file to an ffmetadata file, and then transcode
+the file into an output file with the edited ffmetadata file.
+</p>
+<p>Extracting an ffmetadata file with ‘<tt>ffmpeg</tt>’ goes as follows:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
+</pre></td></tr></table>
+
+<p>Reinserting edited metadata information from the FFMETADATAFILE file can
+be done as:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
+</pre></td></tr></table>
+
+<a name="Protocols"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Protocols">18. Protocols</a></h1>
+
+<p>Protocols are configured elements in FFmpeg that enable access to
+resources that require specific protocols.
+</p>
+<p>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".
+</p>
+<p>You can disable all the protocols using the configure option
+"–disable-protocols", and selectively enable a protocol using the
+option "–enable-protocol=<var>PROTOCOL</var>", or you can disable a
+particular protocol using the option
+"–disable-protocol=<var>PROTOCOL</var>".
+</p>
+<p>The option "-protocols" of the ff* tools will display the list of
+supported protocols.
+</p>
+<p>A description of the currently available protocols follows.
+</p>
+<a name="bluray"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-bluray">18.1 bluray</a></h2>
+
+<p>Read BluRay playlist.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>angle</samp>’</dt>
+<dd><p>BluRay angle
+</p>
+</dd>
+<dt> ‘<samp>chapter</samp>’</dt>
+<dd><p>Start chapter (1...N)
+</p>
+</dd>
+<dt> ‘<samp>playlist</samp>’</dt>
+<dd><p>Playlist to read (BDMV/PLAYLIST/?????.mpls)
+</p>
+</dd>
+</dl>
+
+<p>Examples:
+</p>
+<p>Read longest playlist from BluRay mounted to /mnt/bluray:
+</p><table><tr><td> </td><td><pre class="example">bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<p>Read angle 2 of playlist 4 from BluRay mounted to /mnt/bluray, start from chapter 2:
+</p><table><tr><td> </td><td><pre class="example">-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
+</pre></td></tr></table>
+
+<a name="cache"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-cache">18.2 cache</a></h2>
+
+<p>Caching wrapper for input stream.
+</p>
+<p>Cache the input stream to temporary file. It brings seeking capability to live streams.
+</p>
+<table><tr><td> </td><td><pre class="example">cache:<var>URL</var>
+</pre></td></tr></table>
+
+<a name="concat-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-concat-1">18.3 concat</a></h2>
+
+<p>Physical concatenation protocol.
+</p>
+<p>Allow to read and seek from many resource in sequence as if they were
+a unique resource.
+</p>
+<p>A URL accepted by this protocol has the syntax:
+</p><table><tr><td> </td><td><pre class="example">concat:<var>URL1</var>|<var>URL2</var>|...|<var>URLN</var>
+</pre></td></tr></table>
+
+<p>where <var>URL1</var>, <var>URL2</var>, ..., <var>URLN</var> are the urls of the
+resource to be concatenated, each one possibly specifying a distinct
+protocol.
+</p>
+<p>For example to read a sequence of files ‘<tt>split1.mpeg</tt>’,
+‘<tt>split2.mpeg</tt>’, ‘<tt>split3.mpeg</tt>’ with <code>ffplay</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
+</pre></td></tr></table>
+
+<p>Note that you may need to escape the character "|" which is special for
+many shells.
+</p>
+<a name="crypto"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-crypto">18.4 crypto</a></h2>
+
+<p>AES-encrypted stream reading protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>Set the AES decryption key binary block from given hexadecimal representation.
+</p>
+</dd>
+<dt> ‘<samp>iv</samp>’</dt>
+<dd><p>Set the AES decryption initialization vector binary block from given hexadecimal representation.
+</p></dd>
+</dl>
+
+<p>Accepted URL formats:
+</p><table><tr><td> </td><td><pre class="example">crypto:<var>URL</var>
+crypto+<var>URL</var>
+</pre></td></tr></table>
+
+<a name="data"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-data">18.5 data</a></h2>
+
+<p>Data in-line in the URI. See <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">http://en.wikipedia.org/wiki/Data_URI_scheme</a>.
+</p>
+<p>For example, to convert a GIF file given inline with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
+</pre></td></tr></table>
+
+<a name="file"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-file">18.6 file</a></h2>
+
+<p>File access protocol.
+</p>
+<p>Allow to read from or write to a file.
+</p>
+<p>A file URL can have the form:
+</p><table><tr><td> </td><td><pre class="example">file:<var>filename</var>
+</pre></td></tr></table>
+
+<p>where <var>filename</var> is the path of the file to read.
+</p>
+<p>An URL that does not have a protocol prefix will be assumed to be a
+file URL. Depending on the build, an URL that looks like a Windows
+path with the drive letter at the beginning will also be assumed to be
+a file URL (usually not the case in builds for unix-like systems).
+</p>
+<p>For example to read from a file ‘<tt>input.mpeg</tt>’ with <code>ffmpeg</code>
+use the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i file:input.mpeg output.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable for files on slow medium.
+</p></dd>
+</dl>
+
+<a name="ftp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ftp">18.7 ftp</a></h2>
+
+<p>FTP (File Transfer Protocol).
+</p>
+<p>Allow to read from or write to remote resources using FTP protocol.
+</p>
+<p>Following syntax is required.
+</p><table><tr><td> </td><td><pre class="example">ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>ftp-anonymous-password</samp>’</dt>
+<dd><p>Password used when login as anonymous user. Typically an e-mail address
+should be used.
+</p>
+</dd>
+<dt> ‘<samp>ftp-write-seekable</samp>’</dt>
+<dd><p>Control seekability of connection during encoding. If set to 1 the
+resource is supposed to be seekable, if set to 0 it is assumed not
+to be seekable. Default value is 0.
+</p></dd>
+</dl>
+
+<p>NOTE: Protocol can be used as output, but it is recommended to not do
+it, unless special care is taken (tests, customized server configuration
+etc.). Different FTP servers behave in different way during seek
+operation. ff* tools may produce incomplete content due to server limitations.
+</p>
+<a name="gopher"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-gopher">18.8 gopher</a></h2>
+
+<p>Gopher protocol.
+</p>
+<a name="hls"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-hls">18.9 hls</a></h2>
+
+<p>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.
+The nested protocol is declared by specifying
+"+<var>proto</var>" after the hls URI scheme name, where <var>proto</var>
+is either "file" or "http".
+</p>
+<table><tr><td> </td><td><pre class="example">hls+http://host/path/to/remote/resource.m3u8
+hls+file://path/to/local/resource.m3u8
+</pre></td></tr></table>
+
+<p>Using this protocol is discouraged - the hls demuxer should work
+just as well (if not, please report the issues) and is more complete.
+To use the hls demuxer instead, simply use the direct URLs to the
+m3u8 files.
+</p>
+<a name="http"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-http">18.10 http</a></h2>
+
+<p>HTTP (Hyper Text Transfer Protocol).
+</p>
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>seekable</samp>’</dt>
+<dd><p>Control seekability of connection. If set to 1 the resource is
+supposed to be seekable, if set to 0 it is assumed not to be seekable,
+if set to -1 it will try to autodetect if it is seekable. Default
+value is -1.
+</p>
+</dd>
+<dt> ‘<samp>chunked_post</samp>’</dt>
+<dd><p>If set to 1 use chunked Transfer-Encoding for posts, default is 1.
+</p>
+</dd>
+<dt> ‘<samp>content_type</samp>’</dt>
+<dd><p>Set a specific content type for the POST messages.
+</p>
+</dd>
+<dt> ‘<samp>headers</samp>’</dt>
+<dd><p>Set custom HTTP headers, can override built in default headers. The
+value must be a string encoding the headers.
+</p>
+</dd>
+<dt> ‘<samp>multiple_requests</samp>’</dt>
+<dd><p>Use persistent connections if set to 1, default is 0.
+</p>
+</dd>
+<dt> ‘<samp>post_data</samp>’</dt>
+<dd><p>Set custom HTTP post data.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dt> ‘<samp>user_agent</samp>’</dt>
+<dd><p>Override the User-Agent header. If not specified the protocol will use a
+string describing the libavformat build. ("Lavf/<version>")
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout is
+not specified.
+</p>
+</dd>
+<dt> ‘<samp>mime_type</samp>’</dt>
+<dd><p>Export the MIME type.
+</p>
+</dd>
+<dt> ‘<samp>icy</samp>’</dt>
+<dd><p>If set to 1 request ICY (SHOUTcast) metadata from the server. If the server
+supports this, the metadata has to be retrieved by the application by reading
+the ‘<samp>icy_metadata_headers</samp>’ and ‘<samp>icy_metadata_packet</samp>’ options.
+The default is 0.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_headers</samp>’</dt>
+<dd><p>If the server supports ICY metadata, this contains the ICY-specific HTTP reply
+headers, separated by newline characters.
+</p>
+</dd>
+<dt> ‘<samp>icy_metadata_packet</samp>’</dt>
+<dd><p>If the server supports ICY metadata, and ‘<samp>icy</samp>’ was set to 1, this
+contains the last non-empty metadata packet sent by the server. It should be
+polled in regular intervals by applications interested in mid-stream metadata
+updates.
+</p>
+</dd>
+<dt> ‘<samp>cookies</samp>’</dt>
+<dd><p>Set the cookies to be sent in future requests. The format of each cookie is the
+same as the value of a Set-Cookie HTTP response field. Multiple cookies can be
+delimited by a newline character.
+</p>
+</dd>
+<dt> ‘<samp>offset</samp>’</dt>
+<dd><p>Set initial byte offset.
+</p>
+</dd>
+<dt> ‘<samp>end_offset</samp>’</dt>
+<dd><p>Try to limit the request to bytes preceding this offset.
+</p></dd>
+</dl>
+
+<a name="HTTP-Cookies"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-HTTP-Cookies">18.10.1 HTTP Cookies</a></h3>
+
+<p>Some HTTP requests will be denied unless cookie values are passed in with the
+request. The ‘<samp>cookies</samp>’ option allows these cookies to be specified. At
+the very least, each cookie must specify a value along with a path and domain.
+HTTP requests that match both the domain and path will automatically include the
+cookie value in the HTTP Cookie header field. Multiple cookies can be delimited
+by a newline.
+</p>
+<p>The required syntax to play a stream specifying a cookie is:
+</p><table><tr><td> </td><td><pre class="example">ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
+</pre></td></tr></table>
+
+<a name="mmst"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mmst">18.11 mmst</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over TCP.
+</p>
+<a name="mmsh"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mmsh">18.12 mmsh</a></h2>
+
+<p>MMS (Microsoft Media Server) protocol over HTTP.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">mmsh://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<a name="md5"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-md5">18.13 md5</a></h2>
+
+<p>MD5 output protocol.
+</p>
+<p>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.
+</p>
+<p>Some examples follow.
+</p><table><tr><td> </td><td><pre class="example"># 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:
+</pre></td></tr></table>
+
+<p>Note that some formats (typically MOV) require the output protocol to
+be seekable, so they will fail with the MD5 output protocol.
+</p>
+<a name="pipe"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pipe">18.14 pipe</a></h2>
+
+<p>UNIX pipe access protocol.
+</p>
+<p>Allow to read and write from UNIX pipes.
+</p>
+<p>The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">pipe:[<var>number</var>]
+</pre></td></tr></table>
+
+<p><var>number</var> is the number corresponding to the file descriptor of the
+pipe (e.g. 0 for stdin, 1 for stdout, 2 for stderr). If <var>number</var>
+is not specified, by default the stdout file descriptor will be used
+for writing, stdin for reading.
+</p>
+<p>For example to read from stdin with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">cat test.wav | ffmpeg -i pipe:0
+# ...this is the same as...
+cat test.wav | ffmpeg -i pipe:
+</pre></td></tr></table>
+
+<p>For writing to stdout with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">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
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Set I/O operation maximum block size, in bytes. Default value is
+<code>INT_MAX</code>, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable if data transmission is slow.
+</p></dd>
+</dl>
+
+<p>Note that some formats (typically MOV), require the output protocol to
+be seekable, so they will fail with the pipe output protocol.
+</p>
+<a name="rtmp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtmp">18.15 rtmp</a></h2>
+
+<p>Real-Time Messaging Protocol.
+</p>
+<p>The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia
+content across a TCP/IP network.
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example">rtmp://[<var>username</var>:<var>password</var>@]<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>instance</var>][/<var>playpath</var>]
+</pre></td></tr></table>
+
+<p>The accepted parameters are:
+</p><dl compact="compact">
+<dt> ‘<samp>username</samp>’</dt>
+<dd><p>An optional username (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>password</samp>’</dt>
+<dd><p>An optional password (mostly for publishing).
+</p>
+</dd>
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>The address of the RTMP server.
+</p>
+</dd>
+<dt> ‘<samp>port</samp>’</dt>
+<dd><p>The number of the TCP port to use (by default is 1935).
+</p>
+</dd>
+<dt> ‘<samp>app</samp>’</dt>
+<dd><p>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. ‘<tt>/ondemand/</tt>’, ‘<tt>/flash/live/</tt>’, etc.). You can override
+the value parsed from the URI through the <code>rtmp_app</code> option, too.
+</p>
+</dd>
+<dt> ‘<samp>playpath</samp>’</dt>
+<dd><p>It is the path or name of the resource to play with reference to the
+application specified in <var>app</var>, may be prefixed by "mp4:". You
+can override the value parsed from the URI through the <code>rtmp_playpath</code>
+option, too.
+</p>
+</dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Maximum time to wait for the incoming connection. Implies listen.
+</p></dd>
+</dl>
+
+<p>Additionally, the following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p><dl compact="compact">
+<dt> ‘<samp>rtmp_app</samp>’</dt>
+<dd><p>Name of application to connect on the RTMP server. This option
+overrides the parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_buffer</samp>’</dt>
+<dd><p>Set the client buffer time in milliseconds. The default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_conn</samp>’</dt>
+<dd><p>Extra arbitrary AMF connection parameters, parsed from a string,
+e.g. like <code>B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0</code>.
+Each value is prefixed by a single character denoting the type,
+B for Boolean, N for number, S for string, O for object, or Z for null,
+followed by a colon. For Booleans the data must be either 0 or 1 for
+FALSE or TRUE, respectively. Likewise for Objects the data must be 0 or
+1 to end or begin an object, respectively. Data items in subobjects may
+be named, by prefixing the type with ’N’ and specifying the name before
+the value (i.e. <code>NB:myFlag:1</code>). This option may be used multiple
+times to construct arbitrary AMF sequences.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flashver</samp>’</dt>
+<dd><p>Version of the Flash plugin used to run the SWF player. The default
+is LNX 9,0,124,2. (When publishing, the default is FMLE/3.0 (compatible;
+<libavformat version>).)
+</p>
+</dd>
+<dt> ‘<samp>rtmp_flush_interval</samp>’</dt>
+<dd><p>Number of packets flushed in the same request (RTMPT only). The default
+is 10.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_live</samp>’</dt>
+<dd><p>Specify that the media is a live stream. No resuming or seeking in
+live streams is possible. The default value is <code>any</code>, which means the
+subscriber first tries to play the live stream specified in the
+playpath. If a live stream of that name is not found, it plays the
+recorded stream. The other possible values are <code>live</code> and
+<code>recorded</code>.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_pageurl</samp>’</dt>
+<dd><p>URL of the web page in which the media was embedded. By default no
+value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_playpath</samp>’</dt>
+<dd><p>Stream identifier to play or to publish. This option overrides the
+parameter specified in the URI.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_subscribe</samp>’</dt>
+<dd><p>Name of live stream to subscribe to. By default no value will be sent.
+It is only sent if the option is specified or if rtmp_live
+is set to live.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfhash</samp>’</dt>
+<dd><p>SHA256 hash of the decompressed SWF file (32 bytes).
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfsize</samp>’</dt>
+<dd><p>Size of the decompressed SWF file, required for SWFVerification.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfurl</samp>’</dt>
+<dd><p>URL of the SWF player for the media. By default no value will be sent.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_swfverify</samp>’</dt>
+<dd><p>URL to player swf file, compute hash/size automatically.
+</p>
+</dd>
+<dt> ‘<samp>rtmp_tcurl</samp>’</dt>
+<dd><p>URL of the target stream. Defaults to proto://host[:port]/app.
+</p>
+</dd>
+</dl>
+
+<p>For example to read with <code>ffplay</code> a multimedia resource named
+"sample" from the application "vod" from an RTMP server "myserver":
+</p><table><tr><td> </td><td><pre class="example">ffplay rtmp://myserver/vod/sample
+</pre></td></tr></table>
+
+<p>To publish to a password protected server, passing the playpath and
+app names separately:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
+</pre></td></tr></table>
+
+<a name="rtmpe"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtmpe">18.16 rtmpe</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol (RTMPE) is used for
+streaming multimedia content within standard cryptographic primitives,
+consisting of Diffie-Hellman key exchange and HMACSHA256, generating
+a pair of RC4 keys.
+</p>
+<a name="rtmps"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtmps">18.17 rtmps</a></h2>
+
+<p>Real-Time Messaging Protocol over a secure SSL connection.
+</p>
+<p>The Real-Time Messaging Protocol (RTMPS) is used for streaming
+multimedia content across an encrypted connection.
+</p>
+<a name="rtmpt"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtmpt">18.18 rtmpt</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTP (RTMPT) is used
+for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpte"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtmpte">18.19 rtmpte</a></h2>
+
+<p>Encrypted Real-Time Messaging Protocol tunneled through HTTP.
+</p>
+<p>The Encrypted Real-Time Messaging Protocol tunneled through HTTP (RTMPTE)
+is used for streaming multimedia content within HTTP requests to traverse
+firewalls.
+</p>
+<a name="rtmpts"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtmpts">18.20 rtmpts</a></h2>
+
+<p>Real-Time Messaging Protocol tunneled through HTTPS.
+</p>
+<p>The Real-Time Messaging Protocol tunneled through HTTPS (RTMPTS) is used
+for streaming multimedia content within HTTPS requests to traverse
+firewalls.
+</p>
+<a name="libssh"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libssh">18.21 libssh</a></h2>
+
+<p>Secure File Transfer Protocol via libssh
+</p>
+<p>Allow to read from or write to remote resources using SFTP protocol.
+</p>
+<p>Following syntax is required.
+</p>
+<table><tr><td> </td><td><pre class="example">sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
+</pre></td></tr></table>
+
+<p>This protocol accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set timeout of socket I/O operations used by the underlying low level
+operation. By default it is set to -1, which means that the timeout
+is not specified.
+</p>
+</dd>
+<dt> ‘<samp>truncate</samp>’</dt>
+<dd><p>Truncate existing files on write, if set to 1. A value of 0 prevents
+truncating. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>private_key</samp>’</dt>
+<dd><p>Specify the path of the file containing private key to use during authorization.
+By default libssh searches for keys in the ‘<tt>~/.ssh/</tt>’ directory.
+</p>
+</dd>
+</dl>
+
+<p>Example: Play a file stored on remote server.
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
+</pre></td></tr></table>
+
+<a name="librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-librtmp-rtmp_002c-rtmpe_002c-rtmps_002c-rtmpt_002c-rtmpte">18.22 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte</a></h2>
+
+<p>Real-Time Messaging Protocol and its variants supported through
+librtmp.
+</p>
+<p>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.
+</p>
+<p>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).
+</p>
+<p>The required syntax is:
+</p><table><tr><td> </td><td><pre class="example"><var>rtmp_proto</var>://<var>server</var>[:<var>port</var>][/<var>app</var>][/<var>playpath</var>] <var>options</var>
+</pre></td></tr></table>
+
+<p>where <var>rtmp_proto</var> is one of the strings "rtmp", "rtmpt", "rtmpe",
+"rtmps", "rtmpte", "rtmpts" corresponding to each RTMP variant, and
+<var>server</var>, <var>port</var>, <var>app</var> and <var>playpath</var> have the same
+meaning as specified for the RTMP native protocol.
+<var>options</var> contains a list of space-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>See the librtmp manual page (man 3 librtmp) for more information.
+</p>
+<p>For example, to stream a file in real-time to an RTMP server using
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
+</pre></td></tr></table>
+
+<p>To play the same stream using <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffplay "rtmp://myserver/live/mystream live=1"
+</pre></td></tr></table>
+
+<a name="rtp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtp">18.23 rtp</a></h2>
+
+<p>Real-time Transport Protocol.
+</p>
+<p>The required syntax for an RTP URL is:
+rtp://<var>hostname</var>[:<var>port</var>][?<var>option</var>=<var>val</var>...]
+</p>
+<p><var>port</var> specifies the RTP port to use.
+</p>
+<p>The following URL options are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ttl=<var>n</var></samp>’</dt>
+<dd><p>Set the TTL (Time-To-Live) value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>rtcpport=<var>n</var></samp>’</dt>
+<dd><p>Set the remote RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtpport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>localrtcpport=<var>n</var>'</samp>’</dt>
+<dd><p>Set the local RTCP port to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>n</var></samp>’</dt>
+<dd><p>Set max packet size (in bytes) to <var>n</var>.
+</p>
+</dd>
+<dt> ‘<samp>connect=0|1</samp>’</dt>
+<dd><p>Do a <code>connect()</code> on the UDP socket (if set to 1) or not (if set
+to 0).
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List allowed source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>ip</var>[,<var>ip</var>]</samp>’</dt>
+<dd><p>List disallowed (blocked) source IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>write_to_source=0|1</samp>’</dt>
+<dd><p>Send packets to the source address of the latest received packet (if
+set to 1) or to a default remote address (if set to 0).
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>n</var></samp>’</dt>
+<dd><p>Set the local RTP port to <var>n</var>.
+</p>
+<p>This is a deprecated option. Instead, ‘<samp>localrtpport</samp>’ should be
+used.
+</p>
+</dd>
+</dl>
+
+<p>Important notes:
+</p>
+<ol>
+<li>
+If ‘<samp>rtcpport</samp>’ is not set the RTCP port will be set to the RTP
+port value plus 1.
+
+</li><li>
+If ‘<samp>localrtpport</samp>’ (the local RTP port) is not set any available
+port will be used for the local RTP and RTCP ports.
+
+</li><li>
+If ‘<samp>localrtcpport</samp>’ (the local RTCP port) is not set it will be
+set to the the local RTP port value plus 1.
+</li></ol>
+
+<a name="rtsp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rtsp">18.24 rtsp</a></h2>
+
+<p>Real-Time Streaming Protocol.
+</p>
+<p>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).
+</p>
+<p>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
+<a href="http://github.com/revmischa/rtsp-server">RTSP server</a>).
+</p>
+<p>The required syntax for a RTSP url is:
+</p><table><tr><td> </td><td><pre class="example">rtsp://<var>hostname</var>[:<var>port</var>]/<var>path</var>
+</pre></td></tr></table>
+
+<p>Options can be set on the <code>ffmpeg</code>/<code>ffplay</code> command
+line, or set in code via <code>AVOption</code>s or in
+<code>avformat_open_input</code>.
+</p>
+<p>The following options are supported.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>initial_pause</samp>’</dt>
+<dd><p>Do not start playing the stream immediately if set to 1. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_transport</samp>’</dt>
+<dd><p>Set RTSP trasport protocols.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>udp</samp>’</dt>
+<dd><p>Use UDP as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>tcp</samp>’</dt>
+<dd><p>Use TCP (interleaving within the RTSP control channel) as lower
+transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>udp_multicast</samp>’</dt>
+<dd><p>Use UDP multicast as lower transport protocol.
+</p>
+</dd>
+<dt> ‘<samp>http</samp>’</dt>
+<dd><p>Use HTTP tunneling as lower transport protocol, which is useful for
+passing proxies.
+</p></dd>
+</dl>
+
+<p>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 ‘<samp>tcp</samp>’ and ‘<samp>udp</samp>’ options are supported.
+</p>
+</dd>
+<dt> ‘<samp>rtsp_flags</samp>’</dt>
+<dd><p>Set RTSP flags.
+</p>
+<p>The following values are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>filter_src</samp>’</dt>
+<dd><p>Accept packets only from negotiated peer address and port.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Act as a server, listening for an incoming connection.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>none</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>allowed_media_types</samp>’</dt>
+<dd><p>Set media types to accept from the server.
+</p>
+<p>The following flags are accepted:
+</p><dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dt> ‘<samp>audio</samp>’</dt>
+<dt> ‘<samp>data</samp>’</dt>
+</dl>
+
+<p>By default it accepts all media types.
+</p>
+</dd>
+<dt> ‘<samp>min_port</samp>’</dt>
+<dd><p>Set minimum local UDP port. Default value is 5000.
+</p>
+</dd>
+<dt> ‘<samp>max_port</samp>’</dt>
+<dd><p>Set maximum local UDP port. Default value is 65000.
+</p>
+</dd>
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Set maximum timeout (in seconds) to wait for incoming connections.
+</p>
+<p>A value of -1 mean infinite (default). This option implies the
+‘<samp>rtsp_flags</samp>’ set to ‘<samp>listen</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>reorder_queue_size</samp>’</dt>
+<dd><p>Set number of packets to buffer for handling of reordered packets.
+</p>
+</dd>
+<dt> ‘<samp>stimeout</samp>’</dt>
+<dd><p>Set socket TCP I/O timeout in micro seconds.
+</p>
+</dd>
+<dt> ‘<samp>user-agent</samp>’</dt>
+<dd><p>Override User-Agent header. If not specified, it default to the
+libavformat identifier string.
+</p></dd>
+</dl>
+
+<p>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). This
+can be disabled by setting the maximum demuxing delay to zero (via
+the <code>max_delay</code> field of AVFormatContext).
+</p>
+<p>When watching multi-bitrate Real-RTSP streams with <code>ffplay</code>, the
+streams to display can be chosen with <code>-vst</code> <var>n</var> and
+<code>-ast</code> <var>n</var> for video and audio respectively, and can be switched
+on the fly by pressing <code>v</code> and <code>a</code>.
+</p>
+<a name="Examples-45"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-45">18.24.1 Examples</a></h3>
+
+<p>The following examples all make use of the <code>ffplay</code> and
+<code>ffmpeg</code> tools.
+</p>
+<ul>
+<li>
+Watch a stream over UDP, with a max reordering delay of 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Watch a stream tunneled over HTTP:
+<table><tr><td> </td><td><pre class="example">ffplay -rtsp_transport http rtsp://server/video.mp4
+</pre></td></tr></table>
+
+</li><li>
+Send a stream in realtime to a RTSP server, for others to watch:
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
+</pre></td></tr></table>
+
+</li><li>
+Receive a stream in realtime:
+<table><tr><td> </td><td><pre class="example">ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp <var>output</var>
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sap"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sap">18.25 sap</a></h2>
+
+<p>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.
+</p>
+<a name="Muxer"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Muxer">18.25.1 Muxer</a></h3>
+
+<p>The syntax for a SAP url given to the muxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://<var>destination</var>[:<var>port</var>][?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The RTP packets are sent to <var>destination</var> on port <var>port</var>,
+or to port 5004 if no port is specified.
+<var>options</var> is a <code>&</code>-separated list. The following options
+are supported:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>announce_addr=<var>address</var></samp>’</dt>
+<dd><p>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 <var>destination</var> is an IPv6 address.
+</p>
+</dd>
+<dt> ‘<samp>announce_port=<var>port</var></samp>’</dt>
+<dd><p>Specify the port to send the announcements on, defaults to
+9875 if not specified.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Specify the time to live value for the announcements and RTP packets,
+defaults to 255.
+</p>
+</dd>
+<dt> ‘<samp>same_port=<var>0|1</var></samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>Example command lines follow.
+</p>
+<p>To broadcast a stream on the local subnet, for watching in VLC:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255?same_port=1
+</pre></td></tr></table>
+
+<p>Similarly, for watching in <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://224.0.0.255
+</pre></td></tr></table>
+
+<p>And for watching in <code>ffplay</code>, over IPv6:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -re -i <var>input</var> -f sap sap://[ff0e::1:2:3:4]
+</pre></td></tr></table>
+
+<a name="Demuxer"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Demuxer">18.25.2 Demuxer</a></h3>
+
+<p>The syntax for a SAP url given to the demuxer is:
+</p><table><tr><td> </td><td><pre class="example">sap://[<var>address</var>][:<var>port</var>]
+</pre></td></tr></table>
+
+<p><var>address</var> is the multicast address to listen for announcements on,
+if omitted, the default 224.2.127.254 (sap.mcast.net) is used. <var>port</var>
+is the port that is listened on, 9875 if omitted.
+</p>
+<p>The demuxers listens for announcements on the given address and port.
+Once an announcement is received, it tries to receive that particular stream.
+</p>
+<p>Example command lines follow.
+</p>
+<p>To play back the first stream announced on the normal SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://
+</pre></td></tr></table>
+
+<p>To play back the first stream announced on one the default IPv6 SAP multicast address:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay sap://[ff0e::2:7ffe]
+</pre></td></tr></table>
+
+<a name="sctp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sctp">18.26 sctp</a></h2>
+
+<p>Stream Control Transmission Protocol.
+</p>
+<p>The accepted URL syntax is:
+</p><table><tr><td> </td><td><pre class="example">sctp://<var>host</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The protocol accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>If set to any value, listen for an incoming connection. Outgoing connection is done by default.
+</p>
+</dd>
+<dt> ‘<samp>max_streams</samp>’</dt>
+<dd><p>Set the maximum number of streams. By default no limit is set.
+</p></dd>
+</dl>
+
+<a name="srtp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-srtp">18.27 srtp</a></h2>
+
+<p>Secure Real-time Transport Protocol.
+</p>
+<p>The accepted options are:
+</p><dl compact="compact">
+<dt> ‘<samp>srtp_in_suite</samp>’</dt>
+<dt> ‘<samp>srtp_out_suite</samp>’</dt>
+<dd><p>Select input and output encoding suites.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_80</samp>’</dt>
+<dt> ‘<samp>AES_CM_128_HMAC_SHA1_32</samp>’</dt>
+<dt> ‘<samp>SRTP_AES128_CM_HMAC_SHA1_32</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>srtp_in_params</samp>’</dt>
+<dt> ‘<samp>srtp_out_params</samp>’</dt>
+<dd><p>Set input and output encoding parameters, which are expressed by a
+base64-encoded representation of a binary block. The first 16 bytes of
+this binary block are used as master key, the following 14 bytes are
+used as master salt.
+</p></dd>
+</dl>
+
+<a name="tcp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-tcp">18.28 tcp</a></h2>
+
+<p>Transmission Control Protocol.
+</p>
+<p>The required syntax for a TCP url is:
+</p><table><tr><td> </td><td><pre class="example">tcp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form
+<var>key</var>=<var>val</var>.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>Listen for an incoming connection. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p>
+</dd>
+<dt> ‘<samp>listen_timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set listen timeout, expressed in microseconds.
+</p></dd>
+</dl>
+
+<p>The following example shows how to setup a listening TCP connection
+with <code>ffmpeg</code>, which is then accessed with <code>ffplay</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tcp://<var>hostname</var>:<var>port</var>?listen
+ffplay tcp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="tls"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-tls">18.29 tls</a></h2>
+
+<p>Transport Layer Security (TLS) / Secure Sockets Layer (SSL)
+</p>
+<p>The required syntax for a TLS/SSL url is:
+</p><table><tr><td> </td><td><pre class="example">tls://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ca_file, cafile=<var>filename</var></samp>’</dt>
+<dd><p>A file containing certificate authority (CA) root certificates to treat
+as trusted. If the linked TLS library contains a default this might not
+need to be specified for verification to work, but not all libraries and
+setups have defaults built in.
+The file must be in OpenSSL PEM format.
+</p>
+</dd>
+<dt> ‘<samp>tls_verify=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, try to verify the peer that we are communicating with.
+Note, if using OpenSSL, this currently only makes sure that the
+peer certificate is signed by one of the root certificates in the CA
+database, but it does not validate that the certificate actually
+matches the host name we are trying to connect to. (With GnuTLS,
+the host name is validated as well.)
+</p>
+<p>This is disabled by default since it requires a CA database to be
+provided by the caller in many cases.
+</p>
+</dd>
+<dt> ‘<samp>cert_file, cert=<var>filename</var></samp>’</dt>
+<dd><p>A file containing a certificate to use in the handshake with the peer.
+(When operating as server, in listen mode, this is more often required
+by the peer, while client certificates only are mandated in certain
+setups.)
+</p>
+</dd>
+<dt> ‘<samp>key_file, key=<var>filename</var></samp>’</dt>
+<dd><p>A file containing the private key for the certificate.
+</p>
+</dd>
+<dt> ‘<samp>listen=<var>1|0</var></samp>’</dt>
+<dd><p>If enabled, listen for connections on the provided port, and assume
+the server role in the handshake instead of the client role.
+</p>
+</dd>
+</dl>
+
+<p>Example command lines:
+</p>
+<p>To create a TLS/SSL server that serves an input stream.
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> tls://<var>hostname</var>:<var>port</var>?listen&cert=<var>server.crt</var>&key=<var>server.key</var>
+</pre></td></tr></table>
+
+<p>To play back a stream from the TLS/SSL server using <code>ffplay</code>:
+</p>
+<table><tr><td> </td><td><pre class="example">ffplay tls://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+<a name="udp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-udp">18.30 udp</a></h2>
+
+<p>User Datagram Protocol.
+</p>
+<p>The required syntax for an UDP URL is:
+</p><table><tr><td> </td><td><pre class="example">udp://<var>hostname</var>:<var>port</var>[?<var>options</var>]
+</pre></td></tr></table>
+
+<p><var>options</var> contains a list of &-separated options of the form <var>key</var>=<var>val</var>.
+</p>
+<p>In case threading is enabled on the system, a circular buffer is used
+to store the incoming data, which allows one to reduce loss of data due to
+UDP socket buffer overruns. The <var>fifo_size</var> and
+<var>overrun_nonfatal</var> options are related to this buffer.
+</p>
+<p>The list of supported options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>buffer_size=<var>size</var></samp>’</dt>
+<dd><p>Set the UDP socket buffer size in bytes. This is used both for the
+receiving and the sending buffer size.
+</p>
+</dd>
+<dt> ‘<samp>localport=<var>port</var></samp>’</dt>
+<dd><p>Override the local UDP port to bind with.
+</p>
+</dd>
+<dt> ‘<samp>localaddr=<var>addr</var></samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pkt_size=<var>size</var></samp>’</dt>
+<dd><p>Set the size in bytes of UDP packets.
+</p>
+</dd>
+<dt> ‘<samp>reuse=<var>1|0</var></samp>’</dt>
+<dd><p>Explicitly allow or disallow reusing UDP sockets.
+</p>
+</dd>
+<dt> ‘<samp>ttl=<var>ttl</var></samp>’</dt>
+<dd><p>Set the time to live value (for multicast only).
+</p>
+</dd>
+<dt> ‘<samp>connect=<var>1|0</var></samp>’</dt>
+<dd><p>Initialize the UDP socket with <code>connect()</code>. 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.
+</p>
+</dd>
+<dt> ‘<samp>sources=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Only receive packets sent to the multicast group from one of the
+specified sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>block=<var>address</var>[,<var>address</var>]</samp>’</dt>
+<dd><p>Ignore packets sent to the multicast group from the specified
+sender IP addresses.
+</p>
+</dd>
+<dt> ‘<samp>fifo_size=<var>units</var></samp>’</dt>
+<dd><p>Set the UDP receiving circular buffer size, expressed as a number of
+packets with size of 188 bytes. If not specified defaults to 7*4096.
+</p>
+</dd>
+<dt> ‘<samp>overrun_nonfatal=<var>1|0</var></samp>’</dt>
+<dd><p>Survive in case of UDP receiving circular buffer overrun. Default
+value is 0.
+</p>
+</dd>
+<dt> ‘<samp>timeout=<var>microseconds</var></samp>’</dt>
+<dd><p>Set raise error timeout, expressed in microseconds.
+</p>
+<p>This option is only relevant in read mode: if no data arrived in more
+than this time interval, raise error.
+</p></dd>
+</dl>
+
+<a name="Examples-13"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-13">18.30.1 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> to stream over UDP to a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f <var>format</var> udp://<var>hostname</var>:<var>port</var>
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to stream in mpegts format over UDP using 188
+sized UDP packets, using a large input buffer:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i <var>input</var> -f mpegts udp://<var>hostname</var>:<var>port</var>?pkt_size=188&buffer_size=65535
+</pre></td></tr></table>
+
+</li><li>
+Use <code>ffmpeg</code> to receive over UDP from a remote endpoint:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i udp://[<var>multicast-address</var>]:<var>port</var> ...
+</pre></td></tr></table>
+</li></ul>
+
+<a name="unix"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-unix">18.31 unix</a></h2>
+
+<p>Unix local socket
+</p>
+<p>The required syntax for a Unix socket URL is:
+</p>
+<table><tr><td> </td><td><pre class="example">unix://<var>filepath</var>
+</pre></td></tr></table>
+
+<p>The following parameters can be set via command line options
+(or in code via <code>AVOption</code>s):
+</p>
+<dl compact="compact">
+<dt> ‘<samp>timeout</samp>’</dt>
+<dd><p>Timeout in ms.
+</p></dd>
+<dt> ‘<samp>listen</samp>’</dt>
+<dd><p>Create the Unix socket in listening mode.
+</p></dd>
+</dl>
+
+<a name="Device-Options"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Device-Options">19. Device Options</a></h1>
+
+<p>The libavdevice library provides the same interface as
+libavformat. Namely, an input device is considered like a demuxer, and
+an output device like a muxer, and the interface and generic device
+options are the same provided by libavformat (see the ffmpeg-formats
+manual).
+</p>
+<p>In addition each input or output device may support so-called private
+options, which are specific for that component.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, or by setting the value explicitly in the device
+<code>AVFormatContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API
+for programmatic use.
+</p>
+
+<a name="Input-Devices"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Input-Devices">20. Input Devices</a></h1>
+
+<p>Input devices are configured elements in FFmpeg which allow to access
+the data coming from a multimedia device attached to your system.
+</p>
+<p>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".
+</p>
+<p>You can disable all the input devices using the configure option
+"–disable-indevs", and selectively enable an input device using the
+option "–enable-indev=<var>INDEV</var>", or you can disable a particular
+input device using the option "–disable-indev=<var>INDEV</var>".
+</p>
+<p>The option "-formats" of the ff* tools will display the list of
+supported input devices (amongst the demuxers).
+</p>
+<p>A description of the currently available input devices follows.
+</p>
+<a name="alsa"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-alsa">20.1 alsa</a></h2>
+
+<p>ALSA (Advanced Linux Sound Architecture) input device.
+</p>
+<p>To enable this input device during configuration you need libasound
+installed on your system.
+</p>
+<p>This device allows capturing from an ALSA device. The name of the
+device to capture has to be an ALSA card identifier.
+</p>
+<p>An ALSA identifier has the syntax:
+</p><table><tr><td> </td><td><pre class="example">hw:<var>CARD</var>[,<var>DEV</var>[,<var>SUBDEV</var>]]
+</pre></td></tr></table>
+
+<p>where the <var>DEV</var> and <var>SUBDEV</var> components are optional.
+</p>
+<p>The three arguments (in order: <var>CARD</var>,<var>DEV</var>,<var>SUBDEV</var>)
+specify card number or identifier, device number and subdevice number
+(-1 means any).
+</p>
+<p>To see the list of cards currently recognized by your system check the
+files ‘<tt>/proc/asound/cards</tt>’ and ‘<tt>/proc/asound/devices</tt>’.
+</p>
+<p>For example to capture with <code>ffmpeg</code> from an ALSA device with
+card id 0, you may run the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f alsa -i hw:0 alsaout.wav
+</pre></td></tr></table>
+
+<p>For more information see:
+<a href="http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html">http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html</a>
+</p>
+<a name="bktr"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-bktr">20.2 bktr</a></h2>
+
+<p>BSD video input device.
+</p>
+<a name="dshow"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-dshow">20.3 dshow</a></h2>
+
+<p>Windows DirectShow input device.
+</p>
+<p>DirectShow support is enabled when FFmpeg is built with the mingw-w64 project.
+Currently only audio and video devices are supported.
+</p>
+<p>Multiple devices may be opened as separate inputs, but they may also be
+opened on the same input, which should improve synchronism between them.
+</p>
+<p>The input name should be in the format:
+</p>
+<table><tr><td> </td><td><pre class="example"><var>TYPE</var>=<var>NAME</var>[:<var>TYPE</var>=<var>NAME</var>]
+</pre></td></tr></table>
+
+<p>where <var>TYPE</var> can be either <var>audio</var> or <var>video</var>,
+and <var>NAME</var> is the device’s name.
+</p>
+<a name="Options-9"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-9">20.3.1 Options</a></h3>
+
+<p>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.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video size in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the frame rate in the captured video.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+</p>
+</dd>
+<dt> ‘<samp>list_options</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of selected device’s options
+and exit.
+</p>
+</dd>
+<dt> ‘<samp>video_device_number</samp>’</dt>
+<dd><p>Set video device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>audio_device_number</samp>’</dt>
+<dd><p>Set audio device number for devices with same name (starts at 0,
+defaults to 0).
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select pixel format to be used by DirectShow. This may only be set when
+the video codec is not set or set to rawvideo.
+</p>
+</dd>
+<dt> ‘<samp>audio_buffer_size</samp>’</dt>
+<dd><p>Set audio device buffer size in milliseconds (which can directly
+impact latency, depending on the device).
+Defaults to using the audio device’s
+default buffer size (typically some multiple of 500ms).
+Setting this value too low can degrade performance.
+See also
+<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx</a>
+</p>
+</dd>
+</dl>
+
+<a name="Examples-42"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-42">20.3.2 Examples</a></h3>
+
+<ul>
+<li>
+Print the list of DirectShow supported devices and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f dshow -i dummy
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open second video device with name <var>Camera</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
+</pre></td></tr></table>
+
+</li><li>
+Open video device <var>Camera</var> and audio device <var>Microphone</var>:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
+</pre></td></tr></table>
+
+</li><li>
+Print the list of supported options in selected device and exit:
+<table><tr><td> </td><td><pre class="example">$ ffmpeg -list_options true -f dshow -i video="Camera"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="dv1394"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-dv1394">20.4 dv1394</a></h2>
+
+<p>Linux DV 1394 input device.
+</p>
+<a name="fbdev"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-fbdev">20.5 fbdev</a></h2>
+
+<p>Linux framebuffer input device.
+</p>
+<p>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
+‘<tt>/dev/fb0</tt>’.
+</p>
+<p>For more detailed information read the file
+Documentation/fb/framebuffer.txt included in the Linux source tree.
+</p>
+<p>To record from the framebuffer device ‘<tt>/dev/fb0</tt>’ with
+<code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi
+</pre></td></tr></table>
+
+<p>You can take a single screenshot image with the command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f fbdev -frames:v 1 -r 1 -i /dev/fb0 screenshot.jpeg
+</pre></td></tr></table>
+
+<p>See also <a href="http://linux-fbdev.sourceforge.net/">http://linux-fbdev.sourceforge.net/</a>, and fbset(1).
+</p>
+<a name="iec61883"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-iec61883">20.6 iec61883</a></h2>
+
+<p>FireWire DV/HDV input device using libiec61883.
+</p>
+<p>To enable this input device, you need libiec61883, libraw1394 and
+libavc1394 installed on your system. Use the configure option
+<code>--enable-libiec61883</code> to compile with the device enabled.
+</p>
+<p>The iec61883 capture device supports capturing from a video device
+connected via IEEE1394 (FireWire), using libiec61883 and the new Linux
+FireWire stack (juju). This is the default DV/HDV input method in Linux
+Kernel 2.6.37 and later, since the old FireWire stack was removed.
+</p>
+<p>Specify the FireWire port to be used as input file, or "auto"
+to choose the first port connected.
+</p>
+<a name="Options-13"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-13">20.6.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>dvtype</samp>’</dt>
+<dd><p>Override autodetection of DV/HDV. This should only be used if auto
+detection does not work, or if usage of a different device type
+should be prohibited. Treating a DV device as HDV (or vice versa) will
+not work and result in undefined behavior.
+The values ‘<samp>auto</samp>’, ‘<samp>dv</samp>’ and ‘<samp>hdv</samp>’ are supported.
+</p>
+</dd>
+<dt> ‘<samp>dvbuffer</samp>’</dt>
+<dd><p>Set maxiumum size of buffer for incoming data, in frames. For DV, this
+is an exact value. For HDV, it is not frame exact, since HDV does
+not have a fixed frame size.
+</p>
+</dd>
+<dt> ‘<samp>dvguid</samp>’</dt>
+<dd><p>Select the capture device by specifying it’s GUID. Capturing will only
+be performed from the specified device and fails if no device with the
+given GUID is found. This is useful to select the input if multiple
+devices are connected at the same time.
+Look at /sys/bus/firewire/devices to find out the GUIDs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-71"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-71">20.6.2 Examples</a></h3>
+
+<ul>
+<li>
+Grab and show the input of a FireWire DV/HDV device.
+<table><tr><td> </td><td><pre class="example">ffplay -f iec61883 -i auto
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a FireWire DV/HDV device,
+using a packet buffer of 100000 packets if the source is HDV.
+<table><tr><td> </td><td><pre class="example">ffmpeg -f iec61883 -i auto -hdvbuffer 100000 out.mpg
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="jack"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-jack">20.7 jack</a></h2>
+
+<p>JACK input device.
+</p>
+<p>To enable this input device during configuration you need libjack
+installed on your system.
+</p>
+<p>A JACK input device creates one or more JACK writable clients, one for
+each audio channel, with name <var>client_name</var>:input_<var>N</var>, where
+<var>client_name</var> is the name provided by the application, and <var>N</var>
+is a number which identifies the channel.
+Each writable client will send the acquired data to the FFmpeg input
+device.
+</p>
+<p>Once you have created one or more JACK readable clients, you need to
+connect them to one or more JACK writable clients.
+</p>
+<p>To connect or disconnect JACK clients you can use the <code>jack_connect</code>
+and <code>jack_disconnect</code> programs, or do it through a graphical interface,
+for example with <code>qjackctl</code>.
+</p>
+<p>To list the JACK clients and their properties you can invoke the command
+<code>jack_lsp</code>.
+</p>
+<p>Follows an example which shows how to capture a JACK readable client
+with <code>ffmpeg</code>.
+</p><table><tr><td> </td><td><pre class="example"># 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
+</pre></td></tr></table>
+
+<p>For more information read:
+<a href="http://jackaudio.org/">http://jackaudio.org/</a>
+</p>
+<a name="lavfi"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-lavfi">20.8 lavfi</a></h2>
+
+<p>Libavfilter input virtual device.
+</p>
+<p>This input device reads data from the open output pads of a libavfilter
+filtergraph.
+</p>
+<p>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 ‘<samp>graph</samp>’.
+</p>
+<a name="Options-5"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-5">20.8.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>graph</samp>’</dt>
+<dd><p>Specify the filtergraph to use as input. Each video open output must be
+labelled by a unique string of the form "out<var>N</var>", where <var>N</var> 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.
+</p>
+<p>If not specified defaults to the filename specified for the input
+device.
+</p>
+</dd>
+<dt> ‘<samp>graph_file</samp>’</dt>
+<dd><p>Set the filename of the filtergraph to be read and sent to the other
+filters. Syntax of the filtergraph is the same as the one specified by
+the option <var>graph</var>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-54"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-54">20.8.2 Examples</a></h3>
+
+<ul>
+<li>
+Create a color video stream and play it back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "color=c=pink [out0]" dummy
+</pre></td></tr></table>
+
+</li><li>
+As the previous example, but use filename for specifying the graph
+description, and omit the "out0" label:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi color=c=pink
+</pre></td></tr></table>
+
+</li><li>
+Create three different video test filtered sources and play them:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream from a file using the amovie source and play it
+back with <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "amovie=test.wav"
+</pre></td></tr></table>
+
+</li><li>
+Read an audio stream and a video stream and play it back with
+<code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="libdc1394"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-libdc1394">20.9 libdc1394</a></h2>
+
+<p>IIDC1394 input device, based on libdc1394 and libraw1394.
+</p>
+<a name="openal"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-openal">20.10 openal</a></h2>
+
+<p>The OpenAL input device provides audio capture on all systems with a
+working OpenAL 1.1 implementation.
+</p>
+<p>To enable this input device during configuration, you need OpenAL
+headers and libraries installed on your system, and need to configure
+FFmpeg with <code>--enable-openal</code>.
+</p>
+<p>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
+<code>--extra-cflags</code> and <code>--extra-ldflags</code> for allowing the build
+system to locate the OpenAL headers and libraries.
+</p>
+<p>An incomplete list of OpenAL implementations follows:
+</p>
+<dl compact="compact">
+<dt> <strong>Creative</strong></dt>
+<dd><p>The official Windows implementation, providing hardware acceleration
+with supported devices and software fallback.
+See <a href="http://openal.org/">http://openal.org/</a>.
+</p></dd>
+<dt> <strong>OpenAL Soft</strong></dt>
+<dd><p>Portable, open source (LGPL) software implementation. Includes
+backends for the most common sound APIs on the Windows, Linux,
+Solaris, and BSD operating systems.
+See <a href="http://kcat.strangesoft.net/openal.html">http://kcat.strangesoft.net/openal.html</a>.
+</p></dd>
+<dt> <strong>Apple</strong></dt>
+<dd><p>OpenAL is part of Core Audio, the official Mac OS X Audio interface.
+See <a href="http://developer.apple.com/technologies/mac/audio-and-video.html">http://developer.apple.com/technologies/mac/audio-and-video.html</a>
+</p></dd>
+</dl>
+
+<p>This device allows one to capture from an audio input device handled
+through OpenAL.
+</p>
+<p>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 <var>list_devices</var>.
+</p>
+<a name="Options-2"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-2">20.10.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Set the number of channels in the captured audio. Only the values
+‘<samp>1</samp>’ (monaural) and ‘<samp>2</samp>’ (stereo) are currently supported.
+Defaults to ‘<samp>2</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_size</samp>’</dt>
+<dd><p>Set the sample size (in bits) of the captured audio. Only the values
+‘<samp>8</samp>’ and ‘<samp>16</samp>’ are currently supported. Defaults to
+‘<samp>16</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Set the sample rate (in Hz) of the captured audio.
+Defaults to ‘<samp>44.1k</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>list_devices</samp>’</dt>
+<dd><p>If set to ‘<samp>true</samp>’, print a list of devices and exit.
+Defaults to ‘<samp>false</samp>’.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-19"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-19">20.10.2 Examples</a></h3>
+
+<p>Print the list of OpenAL supported devices and exit:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -list_devices true -f openal -i dummy out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the OpenAL device ‘<tt>DR-BT101 via PulseAudio</tt>’:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from the default device (note the empty string ” as filename):
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i '' out.ogg
+</pre></td></tr></table>
+
+<p>Capture from two devices simultaneously, writing to two different files,
+within the same <code>ffmpeg</code> command:
+</p><table><tr><td> </td><td><pre class="example">$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
+</pre></td></tr></table>
+<p>Note: not all OpenAL implementations support multiple simultaneous capture -
+try the latest OpenAL Soft if the above does not work.
+</p>
+<a name="oss"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-oss">20.11 oss</a></h2>
+
+<p>Open Sound System input device.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the OSS input device, and is usually set to
+‘<tt>/dev/dsp</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/dsp</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
+</pre></td></tr></table>
+
+<p>For more information about OSS see:
+<a href="http://manuals.opensound.com/usersguide/dsp.html">http://manuals.opensound.com/usersguide/dsp.html</a>
+</p>
+<a name="pulse"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pulse">20.12 pulse</a></h2>
+
+<p>PulseAudio input device.
+</p>
+<p>To enable this output device you need to configure FFmpeg with <code>--enable-libpulse</code>.
+</p>
+<p>The filename to provide to the input device is a source device or the
+string "default"
+</p>
+<p>To list the PulseAudio source devices and their properties you can invoke
+the command <code>pactl list sources</code>.
+</p>
+<p>More information about PulseAudio can be found on <a href="http://www.pulseaudio.org">http://www.pulseaudio.org</a>.
+</p>
+<a name="Options-4"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-4">20.12.1 Options</a></h3>
+<dl compact="compact">
+<dt> ‘<samp>server</samp>’</dt>
+<dd><p>Connect to a specific PulseAudio server, specified by an IP address.
+Default server is used when not provided.
+</p>
+</dd>
+<dt> ‘<samp>name</samp>’</dt>
+<dd><p>Specify the application name PulseAudio will use when showing active clients,
+by default it is the <code>LIBAVFORMAT_IDENT</code> string.
+</p>
+</dd>
+<dt> ‘<samp>stream_name</samp>’</dt>
+<dd><p>Specify the stream name PulseAudio will use when showing active streams,
+by default it is "record".
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>Specify the samplerate in Hz, by default 48kHz is used.
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>Specify the channels in use, by default 2 (stereo) is set.
+</p>
+</dd>
+<dt> ‘<samp>frame_size</samp>’</dt>
+<dd><p>Specify the number of bytes per frame, by default it is set to 1024.
+</p>
+</dd>
+<dt> ‘<samp>fragment_size</samp>’</dt>
+<dd><p>Specify the minimal buffering fragment in PulseAudio, it will affect the
+audio latency. By default it is unset.
+</p></dd>
+</dl>
+
+<a name="Examples-73"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-73">20.12.2 Examples</a></h3>
+<p>Record a stream from default device:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f pulse -i default /tmp/pulse.wav
+</pre></td></tr></table>
+
+<a name="sndio"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sndio">20.13 sndio</a></h2>
+
+<p>sndio input device.
+</p>
+<p>To enable this input device during configuration you need libsndio
+installed on your system.
+</p>
+<p>The filename to provide to the input device is the device node
+representing the sndio input device, and is usually set to
+‘<tt>/dev/audio0</tt>’.
+</p>
+<p>For example to grab from ‘<tt>/dev/audio0</tt>’ using <code>ffmpeg</code> use the
+command:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
+</pre></td></tr></table>
+
+<a name="video4linux2_002c-v4l2"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-video4linux2_002c-v4l2">20.14 video4linux2, v4l2</a></h2>
+
+<p>Video4Linux2 input video device.
+</p>
+<p>"v4l2" can be used as alias for "video4linux2".
+</p>
+<p>If FFmpeg is built with v4l-utils support (by using the
+<code>--enable-libv4l2</code> configure option), it is possible to use it with the
+<code>-use_libv4l2</code> input device option.
+</p>
+<p>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 ‘<tt>/dev/video<var>N</var></tt>’, where <var>N</var> is a number associated to
+the device.
+</p>
+<p>Video4Linux2 devices usually support a limited set of
+<var>width</var>x<var>height</var> sizes and frame rates. You can check which are
+supported using <code>-list_formats all</code> for Video4Linux2 devices.
+Some devices, like TV cards, support one or more standards. It is possible
+to list all the supported standards using <code>-list_standards all</code>.
+</p>
+<p>The time base for the timestamps is 1 microsecond. Depending on the kernel
+version and configuration, the timestamps may be derived from the real time
+clock (origin at the Unix Epoch) or the monotonic clock (origin usually at
+boot time, unaffected by NTP or manual changes to the clock). The
+‘<samp>-timestamps abs</samp>’ or ‘<samp>-ts abs</samp>’ option can be used to force
+conversion into the real time clock.
+</p>
+<p>Some usage examples of the video4linux2 device with <code>ffmpeg</code>
+and <code>ffplay</code>:
+</p><ul>
+<li>
+Grab and show the input of a video4linux2 device:
+<table><tr><td> </td><td><pre class="example">ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
+</pre></td></tr></table>
+
+</li><li>
+Grab and record the input of a video4linux2 device, leave the
+frame rate and size as previously set:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about Video4Linux, check <a href="http://linuxtv.org/">http://linuxtv.org/</a>.
+</p>
+<a name="Options-14"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-14">20.14.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>standard</samp>’</dt>
+<dd><p>Set the standard. Must be the name of a supported standard. To get a
+list of the supported standards, use the ‘<samp>list_standards</samp>’
+option.
+</p>
+</dd>
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>Set the input channel number. Default to -1, which means using the
+previously selected channel.
+</p>
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. The argument must be a string in the form
+<var>WIDTH</var>x<var>HEIGHT</var> or a valid size abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>pixel_format</samp>’</dt>
+<dd><p>Select the pixel format (only valid for raw video input).
+</p>
+</dd>
+<dt> ‘<samp>input_format</samp>’</dt>
+<dd><p>Set the preferred pixel format (for raw video) or a codec name.
+This option allows one to select the input format, when several are
+available.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the preferred video frame rate.
+</p>
+</dd>
+<dt> ‘<samp>list_formats</samp>’</dt>
+<dd><p>List available formats (supported pixel formats, codecs, and frame
+sizes) and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all available (compressed and non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>raw</samp>’</dt>
+<dd><p>Show only raw video (non-compressed) formats.
+</p>
+</dd>
+<dt> ‘<samp>compressed</samp>’</dt>
+<dd><p>Show only compressed formats.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>list_standards</samp>’</dt>
+<dd><p>List supported standards and exit.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Show all supported standards.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>timestamps, ts</samp>’</dt>
+<dd><p>Set type of timestamps for grabbed frames.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>default</samp>’</dt>
+<dd><p>Use timestamps from the kernel.
+</p>
+</dd>
+<dt> ‘<samp>abs</samp>’</dt>
+<dd><p>Use absolute timestamps (wall clock).
+</p>
+</dd>
+<dt> ‘<samp>mono2abs</samp>’</dt>
+<dd><p>Force conversion from monotonic to absolute timestamps.
+</p></dd>
+</dl>
+
+<p>Default value is <code>default</code>.
+</p></dd>
+</dl>
+
+<a name="vfwcap"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-vfwcap">20.15 vfwcap</a></h2>
+
+<p>VfW (Video for Windows) capture input device.
+</p>
+<p>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.
+</p>
+<a name="x11grab"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-x11grab">20.16 x11grab</a></h2>
+
+<p>X11 video input device.
+</p>
+<p>This device allows one to capture a region of an X11 display.
+</p>
+<p>The filename passed as input has the syntax:
+</p><table><tr><td> </td><td><pre class="example">[<var>hostname</var>]:<var>display_number</var>.<var>screen_number</var>[+<var>x_offset</var>,<var>y_offset</var>]
+</pre></td></tr></table>
+
+<p><var>hostname</var>:<var>display_number</var>.<var>screen_number</var> specifies the
+X11 display name of the screen to grab from. <var>hostname</var> can be
+omitted, and defaults to "localhost". The environment variable
+<code>DISPLAY</code> contains the default display name.
+</p>
+<p><var>x_offset</var> and <var>y_offset</var> specify the offsets of the grabbed
+area with respect to the top-left border of the X11 screen. They
+default to 0.
+</p>
+<p>Check the X11 documentation (e.g. man X) for more detailed information.
+</p>
+<p>Use the <code>dpyinfo</code> program for getting basic information about the
+properties of your X11 display (e.g. grep for "name" or "dimensions").
+</p>
+<p>For example to grab from ‘<tt>:0.0</tt>’ using <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>Grab at position <code>10,20</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<a name="Options"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options">20.16.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>draw_mouse</samp>’</dt>
+<dd><p>Specify whether to draw the mouse pointer. A value of <code>0</code> specify
+not to draw the pointer. Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>follow_mouse</samp>’</dt>
+<dd><p>Make the grabbed area follow the mouse. The argument can be
+<code>centered</code> or a number of pixels <var>PIXELS</var>.
+</p>
+<p>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 <var>PIXELS</var> (greater than
+zero) to the edge of region.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+<p>To follow only when the mouse pointer reaches within 100 pixels to edge:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Set the grabbing frame rate. Default value is <code>ntsc</code>,
+corresponding to a frame rate of <code>30000/1001</code>.
+</p>
+</dd>
+<dt> ‘<samp>show_region</samp>’</dt>
+<dd><p>Show grabbed region on screen.
+</p>
+<p>If <var>show_region</var> is specified with <code>1</code>, then the grabbing
+region will be indicated on screen. With this option, it is easy to
+know what is being grabbed if only a portion of the screen is grabbed.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
+</pre></td></tr></table>
+
+<p>With <var>follow_mouse</var>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Set the video frame size. Default value is <code>vga</code>.
+</p></dd>
+</dl>
+
+<a name="Resampler-Options"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Resampler-Options">21. Resampler Options</a></h1>
+
+<p>The audio resampler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools, <var>option</var>=<var>value</var> for the aresample filter,
+by setting the value explicitly in the
+<code>SwrContext</code> options or using the ‘<tt>libavutil/opt.h</tt>’ API for
+programmatic use.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ich, in_channel_count</samp>’</dt>
+<dd><p>Set the number of input channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>in_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>och, out_channel_count</samp>’</dt>
+<dd><p>Set the number of output channels. Default value is 0. Setting this
+value is not mandatory if the corresponding channel layout
+‘<samp>out_channel_layout</samp>’ is set.
+</p>
+</dd>
+<dt> ‘<samp>uch, used_channel_count</samp>’</dt>
+<dd><p>Set the number of used input channels. Default value is 0. This option is
+only used for special remapping.
+</p>
+</dd>
+<dt> ‘<samp>isr, in_sample_rate</samp>’</dt>
+<dd><p>Set the input sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>osr, out_sample_rate</samp>’</dt>
+<dd><p>Set the output sample rate. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>isf, in_sample_fmt</samp>’</dt>
+<dd><p>Specify the input sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>osf, out_sample_fmt</samp>’</dt>
+<dd><p>Specify the output sample format. It is set by default to <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>tsf, internal_sample_fmt</samp>’</dt>
+<dd><p>Set the internal sample format. Default value is <code>none</code>.
+This will automatically be chosen when it is not explicitly set.
+</p>
+</dd>
+<dt> ‘<samp>icl, in_channel_layout</samp>’</dt>
+<dt> ‘<samp>ocl, out_channel_layout</samp>’</dt>
+<dd><p>Set the input/output channel layout.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p>
+</dd>
+<dt> ‘<samp>clev, center_mix_level</samp>’</dt>
+<dd><p>Set the center mix level. It is a value expressed in deciBel, and must be
+in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>slev, surround_mix_level</samp>’</dt>
+<dd><p>Set the surround mix level. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>lfe_mix_level</samp>’</dt>
+<dd><p>Set LFE mix into non LFE level. It is used when there is a LFE input but no
+LFE output. It is a value expressed in deciBel, and must
+be in the interval [-32,32].
+</p>
+</dd>
+<dt> ‘<samp>rmvol, rematrix_volume</samp>’</dt>
+<dd><p>Set rematrix volume. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>rematrix_maxval</samp>’</dt>
+<dd><p>Set maximum output value for rematrixing.
+This can be used to prevent clipping vs. preventing volumn reduction
+A value of 1.0 prevents cliping.
+</p>
+</dd>
+<dt> ‘<samp>flags, swr_flags</samp>’</dt>
+<dd><p>Set flags used by the converter. Default value is 0.
+</p>
+<p>It supports the following individual flags:
+</p><dl compact="compact">
+<dt> ‘<samp>res</samp>’</dt>
+<dd><p>force resampling, this flag forces resampling to be used even when the
+input and output sample rates match.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dither_scale</samp>’</dt>
+<dd><p>Set the dither scale. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>dither_method</samp>’</dt>
+<dd><p>Set dither method. Default value is 0.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>rectangular</samp>’</dt>
+<dd><p>select rectangular dither
+</p></dd>
+<dt> ‘<samp>triangular</samp>’</dt>
+<dd><p>select triangular dither
+</p></dd>
+<dt> ‘<samp>triangular_hp</samp>’</dt>
+<dd><p>select triangular dither with high pass
+</p></dd>
+<dt> ‘<samp>lipshitz</samp>’</dt>
+<dd><p>select lipshitz noise shaping dither
+</p></dd>
+<dt> ‘<samp>shibata</samp>’</dt>
+<dd><p>select shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>low_shibata</samp>’</dt>
+<dd><p>select low shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>high_shibata</samp>’</dt>
+<dd><p>select high shibata noise shaping dither
+</p></dd>
+<dt> ‘<samp>f_weighted</samp>’</dt>
+<dd><p>select f-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>modified_e_weighted</samp>’</dt>
+<dd><p>select modified-e-weighted noise shaping dither
+</p></dd>
+<dt> ‘<samp>improved_e_weighted</samp>’</dt>
+<dd><p>select improved-e-weighted noise shaping dither
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>resampler</samp>’</dt>
+<dd><p>Set resampling engine. Default value is swr.
+</p>
+<p>Supported values:
+</p><dl compact="compact">
+<dt> ‘<samp>swr</samp>’</dt>
+<dd><p>select the native SW Resampler; filter options precision and cheby are not
+applicable in this case.
+</p></dd>
+<dt> ‘<samp>soxr</samp>’</dt>
+<dd><p>select the SoX Resampler (where available); compensation, and filter options
+filter_size, phase_shift, filter_type & kaiser_beta, are not applicable in this
+case.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>filter_size</samp>’</dt>
+<dd><p>For swr only, set resampling filter size, default value is 32.
+</p>
+</dd>
+<dt> ‘<samp>phase_shift</samp>’</dt>
+<dd><p>For swr only, set resampling phase shift, default value is 10, and must be in
+the interval [0,30].
+</p>
+</dd>
+<dt> ‘<samp>linear_interp</samp>’</dt>
+<dd><p>Use Linear Interpolation if set to 1, default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>cutoff</samp>’</dt>
+<dd><p>Set cutoff frequency (swr: 6dB point; soxr: 0dB point) ratio; must be a float
+value between 0 and 1. Default value is 0.97 with swr, and 0.91 with soxr
+(which, with a sample-rate of 44100, preserves the entire audio band to 20kHz).
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>For soxr only, the precision in bits to which the resampled signal will be
+calculated. The default value of 20 (which, with suitable dithering, is
+appropriate for a destination bit-depth of 16) gives SoX’s ’High Quality’; a
+value of 28 gives SoX’s ’Very High Quality’.
+</p>
+</dd>
+<dt> ‘<samp>cheby</samp>’</dt>
+<dd><p>For soxr only, selects passband rolloff none (Chebyshev) & higher-precision
+approximation for ’irrational’ ratios. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>async</samp>’</dt>
+<dd><p>For swr only, simple 1 parameter audio sync to timestamps using stretching,
+squeezing, filling and trimming. Setting this to 1 will enable filling and
+trimming, larger values represent the maximum amount in samples that the data
+may be stretched or squeezed for each second.
+Default value is 0, thus no compensation is applied to make the samples match
+the audio timestamps.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>For swr only, assume the first pts should be this value. The time unit is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+<dt> ‘<samp>min_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger stretching/squeezing/filling or trimming of the
+data to make it match the timestamps. The default is that
+stretching/squeezing/filling and trimming is disabled
+(‘<samp>min_comp</samp>’ = <code>FLT_MAX</code>).
+</p>
+</dd>
+<dt> ‘<samp>min_hard_comp</samp>’</dt>
+<dd><p>For swr only, set the minimum difference between timestamps and audio data (in
+seconds) to trigger adding/dropping samples to make it match the
+timestamps. This option effectively is a threshold to select between
+hard (trim/fill) and soft (squeeze/stretch) compensation. Note that
+all compensation is by default disabled through ‘<samp>min_comp</samp>’.
+The default is 0.1.
+</p>
+</dd>
+<dt> ‘<samp>comp_duration</samp>’</dt>
+<dd><p>For swr only, set duration (in seconds) over which data is stretched/squeezed
+to make it match the timestamps. Must be a non-negative double float value,
+default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>max_soft_comp</samp>’</dt>
+<dd><p>For swr only, set maximum factor by which data is stretched/squeezed to make it
+match the timestamps. Must be a non-negative double float value, default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>matrix_encoding</samp>’</dt>
+<dd><p>Select matrixed stereo encoding.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>select none
+</p></dd>
+<dt> ‘<samp>dolby</samp>’</dt>
+<dd><p>select Dolby
+</p></dd>
+<dt> ‘<samp>dplii</samp>’</dt>
+<dd><p>select Dolby Pro Logic II
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>filter_type</samp>’</dt>
+<dd><p>For swr only, select resampling filter type. This only affects resampling
+operations.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>cubic</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>blackman_nuttall</samp>’</dt>
+<dd><p>select Blackman Nuttall Windowed Sinc
+</p></dd>
+<dt> ‘<samp>kaiser</samp>’</dt>
+<dd><p>select Kaiser Windowed Sinc
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>kaiser_beta</samp>’</dt>
+<dd><p>For swr only, set Kaiser Window Beta value. Must be an integer in the
+interval [2,16], default value is 9.
+</p>
+</dd>
+<dt> ‘<samp>output_sample_bits</samp>’</dt>
+<dd><p>For swr only, set number of used output sample bits for dithering. Must be an integer in the
+interval [0,64], default value is 0, which means it’s not used.
+</p>
+</dd>
+</dl>
+
+<p><a name="scaler_005foptions"></a>
+</p><a name="Scaler-Options"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Scaler-Options">22. Scaler Options</a></h1>
+
+<p>The video scaler supports the following named options.
+</p>
+<p>Options may be set by specifying -<var>option</var> <var>value</var> in the
+FFmpeg tools. For programmatic use, they can be set explicitly in the
+<code>SwsContext</code> options or through the ‘<tt>libavutil/opt.h</tt>’ API.
+</p>
+<dl compact="compact">
+<dd>
+<p><a name="sws_005fflags"></a>
+</p></dd>
+<dt> ‘<samp>sws_flags</samp>’</dt>
+<dd><p>Set the scaler flags. This is also used to set the scaling
+algorithm. Only a single algorithm should be selected.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast_bilinear</samp>’</dt>
+<dd><p>Select fast bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Select bilinear scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>experimental</samp>’</dt>
+<dd><p>Select experimental scaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>neighbor</samp>’</dt>
+<dd><p>Select nearest neighbor rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>area</samp>’</dt>
+<dd><p>Select averaging area rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>bicublin</samp>’</dt>
+<dd><p>Select bicubic scaling algorithm for the luma component, bilinear for
+chroma components.
+</p>
+</dd>
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>Select Gaussian rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>sinc</samp>’</dt>
+<dd><p>Select sinc rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>lanczos</samp>’</dt>
+<dd><p>Select lanczos rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>spline</samp>’</dt>
+<dd><p>Select natural bicubic spline rescaling algorithm.
+</p>
+</dd>
+<dt> ‘<samp>print_info</samp>’</dt>
+<dd><p>Enable printing/debug logging.
+</p>
+</dd>
+<dt> ‘<samp>accurate_rnd</samp>’</dt>
+<dd><p>Enable accurate rounding.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_int</samp>’</dt>
+<dd><p>Enable full chroma interpolation.
+</p>
+</dd>
+<dt> ‘<samp>full_chroma_inp</samp>’</dt>
+<dd><p>Select full chroma input.
+</p>
+</dd>
+<dt> ‘<samp>bitexact</samp>’</dt>
+<dd><p>Enable bitexact output.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>srcw</samp>’</dt>
+<dd><p>Set source width.
+</p>
+</dd>
+<dt> ‘<samp>srch</samp>’</dt>
+<dd><p>Set source height.
+</p>
+</dd>
+<dt> ‘<samp>dstw</samp>’</dt>
+<dd><p>Set destination width.
+</p>
+</dd>
+<dt> ‘<samp>dsth</samp>’</dt>
+<dd><p>Set destination height.
+</p>
+</dd>
+<dt> ‘<samp>src_format</samp>’</dt>
+<dd><p>Set source pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>dst_format</samp>’</dt>
+<dd><p>Set destination pixel format (must be expressed as an integer).
+</p>
+</dd>
+<dt> ‘<samp>src_range</samp>’</dt>
+<dd><p>Select source range.
+</p>
+</dd>
+<dt> ‘<samp>dst_range</samp>’</dt>
+<dd><p>Select destination range.
+</p>
+</dd>
+<dt> ‘<samp>param0, param1</samp>’</dt>
+<dd><p>Set scaling algorithm parameters. The specified values are specific of
+some scaling algorithms and ignored by others. The specified values
+are floating point number values.
+</p>
+</dd>
+<dt> ‘<samp>sws_dither</samp>’</dt>
+<dd><p>Set the dithering algorithm. Accepts one of the following
+values. Default value is ‘<samp>auto</samp>’.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>automatic choice
+</p>
+</dd>
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>no dithering
+</p>
+</dd>
+<dt> ‘<samp>bayer</samp>’</dt>
+<dd><p>bayer dither
+</p>
+</dd>
+<dt> ‘<samp>ed</samp>’</dt>
+<dd><p>error diffusion dither
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Filtering-Introduction"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Filtering-Introduction">23. Filtering Introduction</a></h1>
+
+<p>Filtering in FFmpeg is enabled through the libavfilter library.
+</p>
+<p>In libavfilter, a filter can have multiple inputs and multiple
+outputs.
+To illustrate the sorts of things that are possible, we consider the
+following filtergraph.
+</p>
+<table><tr><td> </td><td><pre class="example"> [main]
+input --> split ---------------------> overlay --> output
+ | ^
+ |[tmp] [flip]|
+ +-----> crop --> vflip -------+
+</pre></td></tr></table>
+
+<p>This filtergraph splits the input 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:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
+</pre></td></tr></table>
+
+<p>The result will be that in output the top half of the video is mirrored
+onto the bottom half.
+</p>
+<p>Filters in the same linear chain are separated by commas, and distinct
+linear chains of filters are separated by semicolons. In our example,
+<var>crop,vflip</var> are in one linear chain, <var>split</var> and
+<var>overlay</var> are separately in another. The points where the linear
+chains join are labelled by names enclosed in square brackets. In the
+example, the split filter generates two outputs that are associated to
+the labels <var>[main]</var> and <var>[tmp]</var>.
+</p>
+<p>The stream sent to the second output of <var>split</var>, labelled as
+<var>[tmp]</var>, is processed through the <var>crop</var> filter, which crops
+away the lower half part of the video, and then vertically flipped. The
+<var>overlay</var> filter takes in input the first unchanged output of the
+split filter (which was labelled as <var>[main]</var>), and overlay on its
+lower half the output generated by the <var>crop,vflip</var> filterchain.
+</p>
+<p>Some filters take in input a list of parameters: they are specified
+after the filter name and an equal sign, and are separated from each other
+by a colon.
+</p>
+<p>There exist so-called <var>source filters</var> that do not have an
+audio/video input, and <var>sink filters</var> that will not have audio/video
+output.
+</p>
+
+<a name="graph2dot"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-graph2dot">24. graph2dot</a></h1>
+
+<p>The ‘<tt>graph2dot</tt>’ program included in the FFmpeg ‘<tt>tools</tt>’
+directory can be used to parse a filtergraph description and issue a
+corresponding textual representation in the dot language.
+</p>
+<p>Invoke the command:
+</p><table><tr><td> </td><td><pre class="example">graph2dot -h
+</pre></td></tr></table>
+
+<p>to see how to use ‘<tt>graph2dot</tt>’.
+</p>
+<p>You can then pass the dot description to the ‘<tt>dot</tt>’ program (from
+the graphviz suite of programs) and obtain a graphical representation
+of the filtergraph.
+</p>
+<p>For example the sequence of commands:
+</p><table><tr><td> </td><td><pre class="example">echo <var>GRAPH_DESCRIPTION</var> | \
+tools/graph2dot -o graph.tmp && \
+dot -Tpng graph.tmp -o graph.png && \
+display graph.png
+</pre></td></tr></table>
+
+<p>can be used to create and display an image representing the graph
+described by the <var>GRAPH_DESCRIPTION</var> string. Note that this string must be
+a complete self-contained graph, with its inputs and outputs explicitly defined.
+For example if your command line is of the form:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i infile -vf scale=640:360 outfile
+</pre></td></tr></table>
+<p>your <var>GRAPH_DESCRIPTION</var> string will need to be of the form:
+</p><table><tr><td> </td><td><pre class="example">nullsrc,scale=640:360,nullsink
+</pre></td></tr></table>
+<p>you may also need to set the <var>nullsrc</var> parameters and add a <var>format</var>
+filter in order to simulate a specific input file.
+</p>
+
+<a name="Filtergraph-description"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Filtergraph-description">25. Filtergraph description</a></h1>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>A filter with no input pads is called a "source", a filter with no
+output pads is called a "sink".
+</p>
+<p><a name="Filtergraph-syntax"></a>
+</p><a name="Filtergraph-syntax-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Filtergraph-syntax-1">25.1 Filtergraph syntax</a></h2>
+
+<p>A filtergraph can be represented using a textual representation, which is
+recognized by the ‘<samp>-filter</samp>’/‘<samp>-vf</samp>’ and ‘<samp>-filter_complex</samp>’
+options in <code>ffmpeg</code> and ‘<samp>-vf</samp>’ in <code>ffplay</code>, and by the
+<code>avfilter_graph_parse()</code>/<code>avfilter_graph_parse2()</code> function defined in
+‘<tt>libavfilter/avfilter.h</tt>’.
+</p>
+<p>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.
+</p>
+<p>A filtergraph consists of a sequence of filterchains. A sequence of
+filterchains is represented by a list of ";"-separated filterchain
+descriptions.
+</p>
+<p>A filter is represented by a string of the form:
+[<var>in_link_1</var>]...[<var>in_link_N</var>]<var>filter_name</var>=<var>arguments</var>[<var>out_link_1</var>]...[<var>out_link_M</var>]
+</p>
+<p><var>filter_name</var> 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
+"=<var>arguments</var>".
+</p>
+<p><var>arguments</var> is a string which contains the parameters used to
+initialize the filter instance. It may have one of the following forms:
+</p><ul>
+<li>
+A ’:’-separated list of <var>key=value</var> pairs.
+
+</li><li>
+A ’:’-separated list of <var>value</var>. In this case, the keys are assumed to be
+the option names in the order they are declared. E.g. the <code>fade</code> filter
+declares three options in this order – ‘<samp>type</samp>’, ‘<samp>start_frame</samp>’ and
+‘<samp>nb_frames</samp>’. Then the parameter list <var>in:0:30</var> means that the value
+<var>in</var> is assigned to the option ‘<samp>type</samp>’, <var>0</var> to
+‘<samp>start_frame</samp>’ and <var>30</var> to ‘<samp>nb_frames</samp>’.
+
+</li><li>
+A ’:’-separated list of mixed direct <var>value</var> and long <var>key=value</var>
+pairs. The direct <var>value</var> must precede the <var>key=value</var> pairs, and
+follow the same constraints order of the previous point. The following
+<var>key=value</var> pairs can be set in any preferred order.
+
+</li></ul>
+
+<p>If the option value itself is a list of items (e.g. the <code>format</code> filter
+takes a list of pixel formats), the items in the list are usually separated by
+’|’.
+</p>
+<p>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.
+</p>
+<p>The name and arguments of the filter are optionally preceded and
+followed by a list of link labels.
+A link label allows one to name a link and associate it to a filter output
+or input pad. The preceding labels <var>in_link_1</var>
+... <var>in_link_N</var>, are associated to the filter input pads,
+the following labels <var>out_link_1</var> ... <var>out_link_M</var>, are
+associated to the output pads.
+</p>
+<p>When two link labels with the same name are found in the
+filtergraph, a link between the corresponding input and output pad is
+created.
+</p>
+<p>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:
+</p><table><tr><td> </td><td><pre class="example">nullsrc, split[L1], [L2]overlay, nullsink
+</pre></td></tr></table>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>Libavfilter will automatically insert <a href="#scale">scale</a> filters where format
+conversion is required. It is possible to specify swscale flags
+for those automatically inserted scalers by prepending
+<code>sws_flags=<var>flags</var>;</code>
+to the filtergraph description.
+</p>
+<p>Follows a BNF description for the filtergraph syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>NAME</var> ::= sequence of alphanumeric characters and '_'
+<var>LINKLABEL</var> ::= "[" <var>NAME</var> "]"
+<var>LINKLABELS</var> ::= <var>LINKLABEL</var> [<var>LINKLABELS</var>]
+<var>FILTER_ARGUMENTS</var> ::= sequence of chars (eventually quoted)
+<var>FILTER</var> ::= [<var>LINKLABELS</var>] <var>NAME</var> ["=" <var>FILTER_ARGUMENTS</var>] [<var>LINKLABELS</var>]
+<var>FILTERCHAIN</var> ::= <var>FILTER</var> [,<var>FILTERCHAIN</var>]
+<var>FILTERGRAPH</var> ::= [sws_flags=<var>flags</var>;] <var>FILTERCHAIN</var> [;<var>FILTERGRAPH</var>]
+</pre></td></tr></table>
+
+<a name="Notes-on-filtergraph-escaping"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-Notes-on-filtergraph-escaping">25.2 Notes on filtergraph escaping</a></h2>
+
+<p>Filtergraph description composition entails several levels of
+escaping. See <a href="ffmpeg-utils.html#quoting_005fand_005fescaping">(ffmpeg-utils)quoting_and_escaping</a> for more
+information about the employed escaping procedure.
+</p>
+<p>A first level escaping affects the content of each filter option
+value, which may contain the special character <code>:</code> used to
+separate values, or one of the escaping characters <code>\'</code>.
+</p>
+<p>A second level escaping affects the whole filter description, which
+may contain the escaping characters <code>\'</code> or the special
+characters <code>[],;</code> used by the filtergraph description.
+</p>
+<p>Finally, when you specify a filtergraph on a shell commandline, you
+need to perform a third level escaping for the shell special
+characters contained within it.
+</p>
+<p>For example, consider the following string to be embedded in
+the <a href="#drawtext">drawtext</a> filter description ‘<samp>text</samp>’ value:
+</p><table><tr><td> </td><td><pre class="example">this is a 'string': may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>This string contains the <code>'</code> special escaping character, and the
+<code>:</code> special character, so it needs to be escaped in this way:
+</p><table><tr><td> </td><td><pre class="example">text=this is a \'string\'\: may contain one, or more, special characters
+</pre></td></tr></table>
+
+<p>A second level of escaping is required when embedding the filter
+description in a filtergraph description, in order to escape all the
+filtergraph special characters. Thus the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
+</pre></td></tr></table>
+<p>(note that in addition to the <code>\'</code> escaping special characters,
+also <code>,</code> needs to be escaped).
+</p>
+<p>Finally an additional level of escaping is needed when writing the
+filtergraph description in a shell command, which depends on the
+escaping rules of the adopted shell. For example, assuming that
+<code>\</code> is special and needs to be escaped with another <code>\</code>, the
+previous string will finally result in:
+</p><table><tr><td> </td><td><pre class="example">-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
+</pre></td></tr></table>
+
+<a name="Timeline-editing"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Timeline-editing">26. Timeline editing</a></h1>
+
+<p>Some filters support a generic ‘<samp>enable</samp>’ option. For the filters
+supporting timeline editing, this option can be set to an expression which is
+evaluated before sending a frame to the filter. If the evaluation is non-zero,
+the filter will be enabled, otherwise the frame will be sent unchanged to the
+next filter in the filtergraph.
+</p>
+<p>The expression accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p></dd>
+</dl>
+
+<p>Additionally, these filters support an ‘<samp>enable</samp>’ command that can be used
+to re-define the expression.
+</p>
+<p>Like any other filtering option, the ‘<samp>enable</samp>’ option follows the same
+rules.
+</p>
+<p>For example, to enable a blur filter (<a href="#smartblur">smartblur</a>) from 10 seconds to 3
+minutes, and a <a href="#curves">curves</a> filter starting at 3 seconds:
+</p><table><tr><td> </td><td><pre class="example">smartblur = enable='between(t,10,3*60)',
+curves = enable='gte(t,3)' : preset=cross_process
+</pre></td></tr></table>
+
+
+<a name="Audio-Filters"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Audio-Filters">27. Audio Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the audio filters included in your
+build.
+</p>
+<p>Below is a description of the currently available audio filters.
+</p>
+<a name="aconvert"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aconvert">27.1 aconvert</a></h2>
+
+<p>Convert the input audio format to the specified formats.
+</p>
+<p><em>This filter is deprecated. Use <a href="#aformat">aformat</a> instead.</em>
+</p>
+<p>The filter accepts a string of the form:
+"<var>sample_format</var>:<var>channel_layout</var>".
+</p>
+<p><var>sample_format</var> specifies the sample format, and can be a string or the
+corresponding numeric value defined in ‘<tt>libavutil/samplefmt.h</tt>’. Use ’p’
+suffix for a planar sample format.
+</p>
+<p><var>channel_layout</var> specifies the channel layout, and can be a string
+or the corresponding number value defined in ‘<tt>libavutil/channel_layout.h</tt>’.
+</p>
+<p>The special parameter "auto", signifies that the filter will
+automatically select the output format depending on the output filter.
+</p>
+<a name="Examples-49"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-49">27.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input to float, planar, stereo:
+<table><tr><td> </td><td><pre class="example">aconvert=fltp:stereo
+</pre></td></tr></table>
+
+</li><li>
+Convert input to unsigned 8-bit, automatically select out channel layout:
+<table><tr><td> </td><td><pre class="example">aconvert=u8:auto
+</pre></td></tr></table>
+</li></ul>
+
+<a name="adelay"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-adelay">27.2 adelay</a></h2>
+
+<p>Delay one or more audio channels.
+</p>
+<p>Samples in delayed channel are filled with silence.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of delays in milliseconds for each channel separated by ’|’.
+At least one delay greater than 0 should be provided.
+Unused delays will be silently ignored. If number of given delays is
+smaller than number of channels all remaining channels will not be delayed.
+</p></dd>
+</dl>
+
+<a name="Examples-62"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-62">27.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Delay first channel by 1.5 seconds, the third channel by 0.5 seconds and leave
+the second channel (and any other channels that may be present) unchanged.
+<table><tr><td> </td><td><pre class="example">adelay=1500|0|500
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aecho"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aecho">27.3 aecho</a></h2>
+
+<p>Apply echoing to the input audio.
+</p>
+<p>Echoes are reflected sound and can occur naturally amongst mountains
+(and sometimes large buildings) when talking or shouting; digital echo
+effects emulate this behaviour and are often used to help fill out the
+sound of a single instrument or vocal. The time difference between the
+original signal and the reflection is the <code>delay</code>, and the
+loudness of the reflected signal is the <code>decay</code>.
+Multiple echoes can have different delays and decays.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain of reflected signal. Default is <code>0.6</code>.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain of reflected signal. Default is <code>0.3</code>.
+</p>
+</dd>
+<dt> ‘<samp>delays</samp>’</dt>
+<dd><p>Set list of time intervals in milliseconds between original signal and reflections
+separated by ’|’. Allowed range for each <code>delay</code> is <code>(0 - 90000.0]</code>.
+Default is <code>1000</code>.
+</p>
+</dd>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of loudnesses of reflected signals separated by ’|’.
+Allowed range for each <code>decay</code> is <code>(0 - 1.0]</code>.
+Default is <code>0.5</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-39"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-39">27.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Make it sound as if there are twice as many instruments as are actually playing:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:60:0.4
+</pre></td></tr></table>
+
+</li><li>
+If delay is very short, then it sound like a (metallic) robot playing music:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.88:6:0.4
+</pre></td></tr></table>
+
+</li><li>
+A longer delay will sound like an open air concert in the mountains:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000:0.3
+</pre></td></tr></table>
+
+</li><li>
+Same as above but with one more mountain:
+<table><tr><td> </td><td><pre class="example">aecho=0.8:0.9:1000|1800:0.3|0.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="aeval"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aeval">27.4 aeval</a></h2>
+
+<p>Modify an audio signal according to the specified expressions.
+</p>
+<p>This filter accepts one or more expressions (one for each channel),
+which are evaluated and used to modify a corresponding audio signal.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. If
+the number of input channels is greater than the number of
+expressions, the last specified expression is used for the remaining
+output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set output channel layout. If not specified, the channel layout is
+specified by the number of expressions. If set to ‘<samp>same</samp>’, it will
+use by default the same input channel layout.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>channel number of the current expression
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds
+</p>
+</dd>
+<dt> ‘<samp>nb_in_channels</samp>’</dt>
+<dt> ‘<samp>nb_out_channels</samp>’</dt>
+<dd><p>input and output number of channels
+</p>
+</dd>
+<dt> ‘<samp>val(CH)</samp>’</dt>
+<dd><p>the value of input channel with number <var>CH</var>
+</p></dd>
+</dl>
+
+<p>Note: this filter is slow. For faster processing you should use a
+dedicated filter.
+</p>
+<a name="Examples-75"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-75">27.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Half volume:
+<table><tr><td> </td><td><pre class="example">aeval=val(ch)/2:c=same
+</pre></td></tr></table>
+
+</li><li>
+Invert phase of the second channel:
+<table><tr><td> </td><td><pre class="example">eval=val(0)|-val(1)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="afade"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-afade">27.5 afade</a></h2>
+
+<p>Apply fade-in/out effect to input audio.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>Specify the effect type, can be either <code>in</code> for fade-in, or
+<code>out</code> for a fade-out effect. Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_sample, ss</samp>’</dt>
+<dd><p>Specify the number of the start sample for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, ns</samp>’</dt>
+<dd><p>Specify the number of samples for which the fade effect has to last. At
+the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence. Default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify time for starting to apply the fade effect. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+If set this option is used instead of <var>start_sample</var> one.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration for which the fade effect has to last. Default is 0.
+The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+At the end of the fade-in effect the output audio will have the same
+volume as the input audio, at the end of the fade-out transition
+the output audio will be silence.
+If set this option is used instead of <var>nb_samples</var> one.
+</p>
+</dd>
+<dt> ‘<samp>curve</samp>’</dt>
+<dd><p>Set curve for fade transition.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>tri</samp>’</dt>
+<dd><p>select triangular, linear slope (default)
+</p></dd>
+<dt> ‘<samp>qsin</samp>’</dt>
+<dd><p>select quarter of sine wave
+</p></dd>
+<dt> ‘<samp>hsin</samp>’</dt>
+<dd><p>select half of sine wave
+</p></dd>
+<dt> ‘<samp>esin</samp>’</dt>
+<dd><p>select exponential sine wave
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>select logarithmic
+</p></dd>
+<dt> ‘<samp>par</samp>’</dt>
+<dd><p>select inverted parabola
+</p></dd>
+<dt> ‘<samp>qua</samp>’</dt>
+<dd><p>select quadratic
+</p></dd>
+<dt> ‘<samp>cub</samp>’</dt>
+<dd><p>select cubic
+</p></dd>
+<dt> ‘<samp>squ</samp>’</dt>
+<dd><p>select square root
+</p></dd>
+<dt> ‘<samp>cbr</samp>’</dt>
+<dd><p>select cubic root
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-47"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-47">27.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 15 seconds of audio:
+<table><tr><td> </td><td><pre class="example">afade=t=in:ss=0:d=15
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 25 seconds of a 900 seconds audio:
+<table><tr><td> </td><td><pre class="example">afade=t=out:st=875:d=25
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="aformat"></a>
+</p><a name="aformat-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aformat-1">27.6 aformat</a></h2>
+
+<p>Set output format constraints for the input audio. The framework will
+negotiate the most appropriate format to minimize conversions.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>sample_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample formats.
+</p>
+</dd>
+<dt> ‘<samp>sample_rates</samp>’</dt>
+<dd><p>A ’|’-separated list of requested sample rates.
+</p>
+</dd>
+<dt> ‘<samp>channel_layouts</samp>’</dt>
+<dd><p>A ’|’-separated list of requested channel layouts.
+</p>
+<p>See <a href="ffmpeg-utils.html#channel-layout-syntax">(ffmpeg-utils)channel layout syntax</a>
+for the required syntax.
+</p></dd>
+</dl>
+
+<p>If a parameter is omitted, all values are allowed.
+</p>
+<p>For example to force the output to either unsigned 8-bit or signed 16-bit stereo:
+</p><table><tr><td> </td><td><pre class="example">aformat=sample_fmts=u8|s16:channel_layouts=stereo
+</pre></td></tr></table>
+
+<a name="allpass"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-allpass">27.7 allpass</a></h2>
+
+<p>Apply a two-pole all-pass filter with central frequency (in Hz)
+<var>frequency</var>, and filter-width <var>width</var>.
+An all-pass filter changes the audio’s frequency to phase relationship
+without changing its frequency to amplitude relationship.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="amerge"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-amerge">27.8 amerge</a></h2>
+
+<p>Merge two or more audio streams into a single multi-channel stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Set the number of inputs. Default is 2.
+</p>
+</dd>
+</dl>
+
+<p>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.
+</p>
+<p>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).
+</p>
+<p>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.
+</p>
+<p>All inputs must have the same sample rate, and format.
+</p>
+<p>If inputs do not have the same duration, the output will stop with the
+shortest.
+</p>
+<a name="Examples-35"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-35">27.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge two mono files into a stereo stream:
+<table><tr><td> </td><td><pre class="example">amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
+</pre></td></tr></table>
+
+</li><li>
+Multiple merges assuming 1 video stream and 6 audio streams in ‘<tt>input.mkv</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
+</pre></td></tr></table>
+</li></ul>
+
+<a name="amix"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-amix">27.9 amix</a></h2>
+
+<p>Mixes multiple audio inputs into a single output.
+</p>
+<p>For example
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
+</pre></td></tr></table>
+<p>will mix 3 input audio streams to a single output with the same duration as the
+first input and a dropout transition time of 3 seconds.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of inputs. If unspecified, it defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>How to determine the end-of-stream.
+</p><dl compact="compact">
+<dt> ‘<samp>longest</samp>’</dt>
+<dd><p>Duration of longest input. (default)
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Duration of shortest input.
+</p>
+</dd>
+<dt> ‘<samp>first</samp>’</dt>
+<dd><p>Duration of first input.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>dropout_transition</samp>’</dt>
+<dd><p>Transition time, in seconds, for volume renormalization when an input
+stream ends. The default value is 2 seconds.
+</p>
+</dd>
+</dl>
+
+<a name="anull"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-anull">27.10 anull</a></h2>
+
+<p>Pass the audio source unchanged to the output.
+</p>
+<a name="apad"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-apad">27.11 apad</a></h2>
+
+<p>Pad the end of a audio stream with silence, this can be used together with
+-shortest to extend audio streams to the same length as the video stream.
+</p>
+<a name="aphaser"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aphaser">27.12 aphaser</a></h2>
+<p>Add a phasing effect to the input audio.
+</p>
+<p>A phaser filter creates series of peaks and troughs in the frequency spectrum.
+The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_gain</samp>’</dt>
+<dd><p>Set input gain. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>out_gain</samp>’</dt>
+<dd><p>Set output gain. Default is 0.74
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in milliseconds. Default is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>decay</samp>’</dt>
+<dd><p>Set decay. Default is 0.4.
+</p>
+</dd>
+<dt> ‘<samp>speed</samp>’</dt>
+<dd><p>Set modulation speed in Hz. Default is 0.5.
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Set modulation type. Default is triangular.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>triangular, t</samp>’</dt>
+<dt> ‘<samp>sinusoidal, s</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+<p><a name="aresample"></a>
+</p><a name="aresample-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aresample-1">27.13 aresample</a></h2>
+
+<p>Resample the input audio to the specified parameters, using the
+libswresample library. If none are specified then the filter will
+automatically convert between its input and output.
+</p>
+<p>This filter is also able to stretch/squeeze the audio data to make it match
+the timestamps or to inject silence / cut out audio to make it match the
+timestamps, do a combination of both or do neither.
+</p>
+<p>The filter accepts the syntax
+[<var>sample_rate</var>:]<var>resampler_options</var>, where <var>sample_rate</var>
+expresses a sample rate and <var>resampler_options</var> is a list of
+<var>key</var>=<var>value</var> pairs, separated by ":". See the
+ffmpeg-resampler manual for the complete list of supported options.
+</p>
+<a name="Examples-28"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-28">27.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Resample the input audio to 44100Hz:
+<table><tr><td> </td><td><pre class="example">aresample=44100
+</pre></td></tr></table>
+
+</li><li>
+Stretch/squeeze samples to the given timestamps, with a maximum of 1000
+samples per second compensation:
+<table><tr><td> </td><td><pre class="example">aresample=async=1000
+</pre></td></tr></table>
+</li></ul>
+
+<a name="asetnsamples"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-asetnsamples">27.14 asetnsamples</a></h2>
+
+<p>Set the number of samples per each output audio frame.
+</p>
+<p>The last output packet may contain a different number of samples, as
+the filter will flush all the remaining samples when the input audio
+signal its end.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_out_samples, n</samp>’</dt>
+<dd><p>Set the number of frames per each output audio frame. The number is
+intended as the number of samples <em>per each channel</em>.
+Default value is 1024.
+</p>
+</dd>
+<dt> ‘<samp>pad, p</samp>’</dt>
+<dd><p>If set to 1, the filter will pad the last audio frame with zeroes, so
+that the last frame will contain the same number of samples as the
+previous ones. Default value is 1.
+</p></dd>
+</dl>
+
+<p>For example, to set the number of per-frame samples to 1234 and
+disable padding for the last frame, use:
+</p><table><tr><td> </td><td><pre class="example">asetnsamples=n=1234:p=0
+</pre></td></tr></table>
+
+<a name="asetrate"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-asetrate">27.15 asetrate</a></h2>
+
+<p>Set the sample rate without altering the PCM data.
+This will result in a change of speed and pitch.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Set the output sample rate. Default is 44100 Hz.
+</p></dd>
+</dl>
+
+<a name="ashowinfo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ashowinfo">27.16 ashowinfo</a></h2>
+
+<p>Show a line containing various information for each input audio frame.
+The input audio is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation timestamp of the input frame, in time base units; the time base
+depends on the filter input pad, and is usually 1/<var>sample_rate</var>.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>presentation timestamp of the input frame in seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic audio)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>sample format
+</p>
+</dd>
+<dt> ‘<samp>chlayout</samp>’</dt>
+<dd><p>channel layout
+</p>
+</dd>
+<dt> ‘<samp>rate</samp>’</dt>
+<dd><p>sample rate for the audio frame
+</p>
+</dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples (per channel) in the frame
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of the audio data. For planar audio
+the data is treated as if all the planes were concatenated.
+</p>
+</dd>
+<dt> ‘<samp>plane_checksums</samp>’</dt>
+<dd><p>A list of Adler-32 checksums for each data plane.
+</p></dd>
+</dl>
+
+<a name="astats"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-astats">27.17 astats</a></h2>
+
+<p>Display time domain statistical information about the audio channels.
+Statistics are calculated and displayed for each audio channel and,
+where applicable, an overall figure is also given.
+</p>
+<p>The filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>length</samp>’</dt>
+<dd><p>Short window length in seconds, used for peak and trough RMS measurement.
+Default is <code>0.05</code> (50 miliseconds). Allowed range is <code>[0.1 - 10]</code>.
+</p></dd>
+</dl>
+
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>DC offset</samp>’</dt>
+<dd><p>Mean amplitude displacement from zero.
+</p>
+</dd>
+<dt> ‘<samp>Min level</samp>’</dt>
+<dd><p>Minimal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Max level</samp>’</dt>
+<dd><p>Maximal sample level.
+</p>
+</dd>
+<dt> ‘<samp>Peak level dB</samp>’</dt>
+<dt> ‘<samp>RMS level dB</samp>’</dt>
+<dd><p>Standard peak and RMS level measured in dBFS.
+</p>
+</dd>
+<dt> ‘<samp>RMS peak dB</samp>’</dt>
+<dt> ‘<samp>RMS trough dB</samp>’</dt>
+<dd><p>Peak and trough values for RMS level measured over a short window.
+</p>
+</dd>
+<dt> ‘<samp>Crest factor</samp>’</dt>
+<dd><p>Standard ratio of peak to RMS level (note: not in dB).
+</p>
+</dd>
+<dt> ‘<samp>Flat factor</samp>’</dt>
+<dd><p>Flatness (i.e. consecutive samples with the same value) of the signal at its peak levels
+(i.e. either <var>Min level</var> or <var>Max level</var>).
+</p>
+</dd>
+<dt> ‘<samp>Peak count</samp>’</dt>
+<dd><p>Number of occasions (not the number of samples) that the signal attained either
+<var>Min level</var> or <var>Max level</var>.
+</p></dd>
+</dl>
+
+<a name="astreamsync"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-astreamsync">27.18 astreamsync</a></h2>
+
+<p>Forward two audio streams and control the order the buffers are forwarded.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the 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:
+</p>
+<dl compact="compact">
+<dt> <var>b1 b2</var></dt>
+<dd><p>number of buffers forwarded so far on each stream
+</p></dd>
+<dt> <var>s1 s2</var></dt>
+<dd><p>number of samples forwarded so far on each stream
+</p></dd>
+<dt> <var>t1 t2</var></dt>
+<dd><p>current timestamp of each stream
+</p></dd>
+</dl>
+
+<p>The default value is <code>t1-t2</code>, which means to always forward the stream
+that has a smaller timestamp.
+</p></dd>
+</dl>
+
+<a name="Examples-57"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-57">27.18.1 Examples</a></h3>
+
+<p>Stress-test <code>amerge</code> by randomly sending buffers on the wrong
+input, while avoiding too much of a desynchronization:
+</p><table><tr><td> </td><td><pre class="example">amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
+[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
+[a2] [b2] amerge
+</pre></td></tr></table>
+
+<a name="asyncts"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-asyncts">27.19 asyncts</a></h2>
+
+<p>Synchronize audio data with timestamps by squeezing/stretching it and/or
+dropping samples/adding silence when needed.
+</p>
+<p>This filter is not built by default, please use <a href="#aresample">aresample</a> to do squeezing/stretching.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>compensate</samp>’</dt>
+<dd><p>Enable stretching/squeezing the data to make it match the timestamps. Disabled
+by default. When disabled, time gaps are covered with silence.
+</p>
+</dd>
+<dt> ‘<samp>min_delta</samp>’</dt>
+<dd><p>Minimum difference between timestamps and audio data (in seconds) to trigger
+adding/dropping samples. Default value is 0.1. If you get non-perfect sync with
+this filter, try setting this parameter to 0.
+</p>
+</dd>
+<dt> ‘<samp>max_comp</samp>’</dt>
+<dd><p>Maximum compensation in samples per second. Relevant only with compensate=1.
+Default value 500.
+</p>
+</dd>
+<dt> ‘<samp>first_pts</samp>’</dt>
+<dd><p>Assume the first pts should be this value. The time base is 1 / sample rate.
+This allows for padding/trimming at the start of stream. By default, no
+assumption is made about the first frame’s expected pts, so no padding or
+trimming is done. For example, this could be set to 0 to pad the beginning with
+silence if an audio stream starts after the video stream or to trim any samples
+with a negative pts due to encoder delay.
+</p>
+</dd>
+</dl>
+
+<a name="atempo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-atempo">27.20 atempo</a></h2>
+
+<p>Adjust audio tempo.
+</p>
+<p>The filter accepts exactly one parameter, the audio tempo. If not
+specified then the filter will assume nominal 1.0 tempo. Tempo must
+be in the [0.5, 2.0] range.
+</p>
+<a name="Examples-84"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-84">27.20.1 Examples</a></h3>
+
+<ul>
+<li>
+Slow down audio to 80% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=0.8
+</pre></td></tr></table>
+
+</li><li>
+To speed up audio to 125% tempo:
+<table><tr><td> </td><td><pre class="example">atempo=1.25
+</pre></td></tr></table>
+</li></ul>
+
+<a name="atrim"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-atrim">27.21 atrim</a></h2>
+
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the audio sample
+with the timestamp <var>start</var> will be the first sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first audio sample that will be dropped, i.e. the
+audio sample immediately preceding the one with the timestamp <var>end</var> will be
+the last sample in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in samples
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in samples instead
+of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_sample</samp>’</dt>
+<dd><p>Number of the first sample that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _sample options simply count the
+samples that pass through the filter. So start/end_pts and start/end_sample will
+give different results when the timestamps are wrong, inexact or do not start at
+zero. Also note that this filter does not modify the timestamps. If you wish
+that the output timestamps start at zero, insert the asetpts filter after the
+atrim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all samples that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple atrim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first 1000 samples
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -af atrim=end_sample=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="bandpass"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-bandpass">27.22 bandpass</a></h2>
+
+<p>Apply a two-pole Butterworth band-pass filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width width.
+The <var>csg</var> option selects a constant skirt gain (peak gain = Q)
+instead of the default: constant 0dB peak gain.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>csg</samp>’</dt>
+<dd><p>Constant skirt gain if set to 1. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bandreject"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-bandreject">27.23 bandreject</a></h2>
+
+<p>Apply a two-pole Butterworth band-reject filter with central
+frequency <var>frequency</var>, and (3dB-point) band-width <var>width</var>.
+The filter roll off at 6dB per octave (20dB per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency. Default is <code>3000</code>.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p></dd>
+</dl>
+
+<a name="bass"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-bass">27.24 bass</a></h2>
+
+<p>Boost or cut the bass (lower) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at 0 Hz. Its useful range is about -20
+(for a large cut) to +20 (for a large boost).
+Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>100</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="biquad"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-biquad">27.25 biquad</a></h2>
+
+<p>Apply a biquad IIR filter with the given coefficients.
+Where <var>b0</var>, <var>b1</var>, <var>b2</var> and <var>a0</var>, <var>a1</var>, <var>a2</var>
+are the numerator and denominator coefficients respectively.
+</p>
+<a name="channelmap"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-channelmap">27.26 channelmap</a></h2>
+
+<p>Remap input channels to new locations.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the output stream.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from input to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>in_channel</var>-<var>out_channel</var></code> or
+<var>in_channel</var> form. <var>in_channel</var> can be either the name of the input
+channel (e.g. FL for front left) or its index in the input channel layout.
+<var>out_channel</var> is the name of the output channel or its index in the output
+channel layout. If <var>out_channel</var> is not given then it is implicitly an
+index, starting with zero and increasing by one for each mapping.
+</p></dd>
+</dl>
+
+<p>If no mapping is present, the filter will implicitly map input channels to
+output channels preserving index.
+</p>
+<p>For example, assuming a 5.1+downmix input MOV file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
+</pre></td></tr></table>
+<p>will create an output WAV file tagged as stereo from the downmix channels of
+the input.
+</p>
+<p>To fix a 5.1 WAV improperly encoded in AAC’s native channel order
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
+</pre></td></tr></table>
+
+<a name="channelsplit"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-channelsplit">27.27 channelsplit</a></h2>
+
+<p>Split each channel in input audio stream into a separate output stream.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Channel layout of the input stream. Default is "stereo".
+</p></dd>
+</dl>
+
+<p>For example, assuming a stereo input MP3 file
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
+</pre></td></tr></table>
+<p>will create an output Matroska file with two audio streams, one containing only
+the left channel and the other the right channel.
+</p>
+<p>To split a 5.1 WAV file into per-channel files
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.wav -filter_complex
+'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
+-map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
+front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
+side_right.wav
+</pre></td></tr></table>
+
+<a name="compand"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-compand">27.28 compand</a></h2>
+<p>Compress or expand audio dynamic range.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>attacks</samp>’</dt>
+<dt> ‘<samp>decays</samp>’</dt>
+<dd><p>Set list of times in seconds for each channel over which the instantaneous level
+of the input signal is averaged to determine its volume. <var>attacks</var> refers to
+increase of volume and <var>decays</var> refers to decrease of volume. For most
+situations, the attack time (response to the audio getting louder) should be
+shorter than the decay time because the human ear is more sensitive to sudden
+loud audio than sudden soft audio. A typical value for attack is 0.3 seconds and
+a typical value for decay is 0.8 seconds.
+</p>
+</dd>
+<dt> ‘<samp>points</samp>’</dt>
+<dd><p>Set list of points for the transfer function, specified in dB relative to the
+maximum possible signal amplitude. Each key points list must be defined using
+the following syntax: <code>x0/y0|x1/y1|x2/y2|....</code> or
+<code>x0/y0 x1/y1 x2/y2 ....</code>
+</p>
+<p>The input values must be in strictly increasing order but the transfer function
+does not have to be monotonically rising. The point <code>0/0</code> is assumed but
+may be overridden (by <code>0/out-dBn</code>). Typical values for the transfer
+function are <code>-70/-70|-60/-20</code>.
+</p>
+</dd>
+<dt> ‘<samp>soft-knee</samp>’</dt>
+<dd><p>Set the curve radius in dB for all joints. Defaults to 0.01.
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>Set additional gain in dB to be applied at all points on the transfer function.
+This allows easy adjustment of the overall gain. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set initial volume in dB to be assumed for each channel when filtering starts.
+This permits the user to supply a nominal level initially, so that, for
+example, a very large gain is not applied to initial signal levels before the
+companding has begun to operate. A typical value for audio which is initially
+quiet is -90 dB. Defaults to 0.
+</p>
+</dd>
+<dt> ‘<samp>delay</samp>’</dt>
+<dd><p>Set delay in seconds. The input audio is analyzed immediately, but audio is
+delayed before being fed to the volume adjuster. Specifying a delay
+approximately equal to the attack/decay times allows the filter to effectively
+operate in predictive rather than reactive mode. Defaults to 0.
+</p>
+</dd>
+</dl>
+
+<a name="Examples"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples">27.28.1 Examples</a></h3>
+
+<ul>
+<li>
+Make music with both quiet and loud passages suitable for listening in a noisy
+environment:
+<table><tr><td> </td><td><pre class="example">compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
+</pre></td></tr></table>
+
+</li><li>
+Noise gate for when the noise is at a lower level than the signal:
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
+</pre></td></tr></table>
+
+</li><li>
+Here is another noise gate, this time for when the noise is at a higher level
+than the signal (making it, in some ways, similar to squelch):
+<table><tr><td> </td><td><pre class="example">compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="earwax"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-earwax">27.29 earwax</a></h2>
+
+<p>Make audio easier to listen to on headphones.
+</p>
+<p>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).
+</p>
+<p>Ported from SoX.
+</p>
+<a name="equalizer"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-equalizer">27.30 equalizer</a></h2>
+
+<p>Apply a two-pole peaking equalisation (EQ) filter. With this
+filter, the signal-level at and around a selected frequency can
+be increased or decreased, whilst (unlike bandpass and bandreject
+filters) that at all other frequencies is unchanged.
+</p>
+<p>In order to produce complex equalisation curves, this filter can
+be given several times, each with a different central frequency.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency in Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+</p>
+</dd>
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Set the required gain or attenuation in dB.
+Beware of clipping when using a positive gain.
+</p></dd>
+</dl>
+
+<a name="Examples-34"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-34">27.30.1 Examples</a></h3>
+<ul>
+<li>
+Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=h:width=200:g=-10
+</pre></td></tr></table>
+
+</li><li>
+Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
+<table><tr><td> </td><td><pre class="example">equalizer=f=1000:width_type=q:width=1:g=2,equalizer=f=100:width_type=q:width=2:g=-5
+</pre></td></tr></table>
+</li></ul>
+
+<a name="highpass"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-highpass">27.31 highpass</a></h2>
+
+<p>Apply a high-pass filter with 3dB point frequency.
+The filter can be either single-pole, or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 3000.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="join"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-join">27.32 join</a></h2>
+
+<p>Join multiple input streams into one multi-channel stream.
+</p>
+<p>The filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>inputs</samp>’</dt>
+<dd><p>Number of input streams. Defaults to 2.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>Desired output channel layout. Defaults to stereo.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Map channels from inputs to output. The argument is a ’|’-separated list of
+mappings, each in the <code><var>input_idx</var>.<var>in_channel</var>-<var>out_channel</var></code>
+form. <var>input_idx</var> is the 0-based index of the input stream. <var>in_channel</var>
+can be either the name of the input channel (e.g. FL for front left) or its
+index in the specified input stream. <var>out_channel</var> is the name of the output
+channel.
+</p></dd>
+</dl>
+
+<p>The filter will attempt to guess the mappings when those are not specified
+explicitly. It does so by first trying to find an unused matching input channel
+and if that fails it picks the first unused input channel.
+</p>
+<p>E.g. to join 3 inputs (with properly set channel layouts)
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
+</pre></td></tr></table>
+
+<p>To build a 5.1 output from 6 single-channel streams:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
+'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
+out
+</pre></td></tr></table>
+
+<a name="ladspa"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ladspa">27.33 ladspa</a></h2>
+
+<p>Load a LADSPA (Linux Audio Developer’s Simple Plugin API) plugin.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-ladspa</code>.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file, f</samp>’</dt>
+<dd><p>Specifies the name of LADSPA plugin library to load. If the environment
+variable <code>LADSPA_PATH</code> is defined, the LADSPA plugin is searched in
+each one of the directories specified by the colon separated list in
+<code>LADSPA_PATH</code>, otherwise in the standard LADSPA paths, which are in
+this order: ‘<tt>HOME/.ladspa/lib/</tt>’, ‘<tt>/usr/local/lib/ladspa/</tt>’,
+‘<tt>/usr/lib/ladspa/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>plugin, p</samp>’</dt>
+<dd><p>Specifies the plugin within the library. Some libraries contain only
+one plugin, but others contain many of them. If this is not set filter
+will list all available plugins within the specified library.
+</p>
+</dd>
+<dt> ‘<samp>controls, c</samp>’</dt>
+<dd><p>Set the ’|’ separated list of controls which are zero or more floating point
+values that determine the behavior of the loaded plugin (for example delay,
+threshold or gain).
+Controls need to be defined using the following syntax:
+c0=<var>value0</var>|c1=<var>value1</var>|c2=<var>value2</var>|..., where
+<var>valuei</var> is the value set on the <var>i</var>-th control.
+If ‘<samp>controls</samp>’ is set to <code>help</code>, all available controls and
+their valid ranges are printed.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100. Only used if plugin have
+zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame, default
+is 1024. Only used if plugin have zero inputs.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> for the accepted format, also check the "Time duration"
+section in the ffmpeg-utils manual.
+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.
+Only used if plugin have zero inputs.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-8"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-8">27.33.1 Examples</a></h3>
+
+<ul>
+<li>
+List all available plugins within amp (LADSPA example plugin) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=amp
+</pre></td></tr></table>
+
+</li><li>
+List all available controls and their valid ranges for <code>vcf_notch</code>
+plugin from <code>VCF</code> library:
+<table><tr><td> </td><td><pre class="example">ladspa=f=vcf:p=vcf_notch:c=help
+</pre></td></tr></table>
+
+</li><li>
+Simulate low quality audio equipment using <code>Computer Music Toolkit</code> (CMT)
+plugin library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
+</pre></td></tr></table>
+
+</li><li>
+Add reverberation to the audio using TAP-plugins
+(Tom’s Audio Processing plugins):
+<table><tr><td> </td><td><pre class="example">ladspa=file=tap_reverb:tap_reverb
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise, with 0.2 amplitude:
+<table><tr><td> </td><td><pre class="example">ladspa=file=cmt:noise_source_white:c=c0=.2
+</pre></td></tr></table>
+
+</li><li>
+Generate 20 bpm clicks using plugin <code>C* Click - Metronome</code> from the
+<code>C* Audio Plugin Suite</code> (CAPS) library:
+<table><tr><td> </td><td><pre class="example">ladspa=file=caps:Click:c=c1=20'
+</pre></td></tr></table>
+
+</li><li>
+Apply <code>C* Eq10X2 - Stereo 10-band equaliser</code> effect:
+<table><tr><td> </td><td><pre class="example">ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands-3"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands-3">27.33.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>cN</samp>’</dt>
+<dd><p>Modify the <var>N</var>-th control value.
+</p>
+<p>If the specified value is not valid, it is ignored and prior one is kept.
+</p></dd>
+</dl>
+
+<a name="lowpass"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-lowpass">27.34 lowpass</a></h2>
+
+<p>Apply a low-pass filter with 3dB point frequency.
+The filter can be either single-pole or double-pole (the default).
+The filter roll off at 6dB per pole per octave (20dB per pole per decade).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set frequency in Hz. Default is 500.
+</p>
+</dd>
+<dt> ‘<samp>poles, p</samp>’</dt>
+<dd><p>Set number of poles. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Specify the band-width of a filter in width_type units.
+Applies only to double-pole filter.
+The default is 0.707q and gives a Butterworth response.
+</p></dd>
+</dl>
+
+<a name="pan"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pan">27.35 pan</a></h2>
+
+<p>Mix channels with specific gain levels. The filter accepts the output
+channel layout followed by a set of channels definitions.
+</p>
+<p>This filter is also designed to remap efficiently the channels of an audio
+stream.
+</p>
+<p>The filter accepts parameters of the form:
+"<var>l</var>:<var>outdef</var>:<var>outdef</var>:..."
+</p>
+<dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>output channel layout or number of channels
+</p>
+</dd>
+<dt> ‘<samp>outdef</samp>’</dt>
+<dd><p>output channel specification, of the form:
+"<var>out_name</var>=[<var>gain</var>*]<var>in_name</var>[+[<var>gain</var>*]<var>in_name</var>...]"
+</p>
+</dd>
+<dt> ‘<samp>out_name</samp>’</dt>
+<dd><p>output channel to define, either a channel name (FL, FR, etc.) or a channel
+number (c0, c1, etc.)
+</p>
+</dd>
+<dt> ‘<samp>gain</samp>’</dt>
+<dd><p>multiplicative coefficient for the channel, 1 leaving the volume unchanged
+</p>
+</dd>
+<dt> ‘<samp>in_name</samp>’</dt>
+<dd><p>input channel to use, see out_name for details; it is not possible to mix
+named and numbered input channels
+</p></dd>
+</dl>
+
+<p>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.
+</p>
+<a name="Mixing-examples"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Mixing-examples">27.35.1 Mixing examples</a></h3>
+
+<p>For example, if you want to down-mix from stereo to mono, but with a bigger
+factor for the left channel:
+</p><table><tr><td> </td><td><pre class="example">pan=1:c0=0.9*c0+0.1*c1
+</pre></td></tr></table>
+
+<p>A customized down-mix to stereo that works automatically for 3-, 4-, 5- and
+7-channels surround:
+</p><table><tr><td> </td><td><pre class="example">pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
+</pre></td></tr></table>
+
+<p>Note that <code>ffmpeg</code> integrates a default down-mix (and up-mix) system
+that should be preferred (see "-ac" option) unless you have very specific
+needs.
+</p>
+<a name="Remapping-examples"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Remapping-examples">27.35.2 Remapping examples</a></h3>
+
+<p>The channel remapping will be effective if, and only if:
+</p>
+<ul>
+<li> gain coefficients are zeroes or ones,
+</li><li> only one input per channel output,
+</li></ul>
+
+<p>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.
+</p>
+<p>For example, if you have a 5.1 source and want a stereo audio stream by
+dropping the extra channels:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FL : c1=FR"
+</pre></td></tr></table>
+
+<p>Given the same source, you can also switch front left and front right channels
+and keep the input channel layout:
+</p><table><tr><td> </td><td><pre class="example">pan="5.1: c0=c1 : c1=c0 : c2=c2 : c3=c3 : c4=c4 : c5=c5"
+</pre></td></tr></table>
+
+<p>If the input is a stereo audio stream, you can mute the front left channel (and
+still keep the stereo channel layout) with:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo:c1=c1"
+</pre></td></tr></table>
+
+<p>Still with a stereo audio stream input, you can copy the right channel in both
+front left and right:
+</p><table><tr><td> </td><td><pre class="example">pan="stereo: c0=FR : c1=FR"
+</pre></td></tr></table>
+
+<a name="replaygain"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-replaygain">27.36 replaygain</a></h2>
+
+<p>ReplayGain scanner filter. This filter takes an audio stream as an input and
+outputs it unchanged.
+At end of filtering it displays <code>track_gain</code> and <code>track_peak</code>.
+</p>
+<a name="resample"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-resample">27.37 resample</a></h2>
+
+<p>Convert the audio sample format, sample rate and channel layout. This filter is
+not meant to be used directly.
+</p>
+<a name="silencedetect"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-silencedetect">27.38 silencedetect</a></h2>
+
+<p>Detect silence in an audio stream.
+</p>
+<p>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.
+</p>
+<p>The printed times and duration are expressed in seconds.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set silence duration until notification (default is 2 seconds).
+</p>
+</dd>
+<dt> ‘<samp>noise, n</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<a name="Examples-18"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-18">27.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Detect 5 seconds of silence with -50dB noise tolerance:
+<table><tr><td> </td><td><pre class="example">silencedetect=n=-50dB:d=5
+</pre></td></tr></table>
+
+</li><li>
+Complete example with <code>ffmpeg</code> to detect silence with 0.0001 noise
+tolerance in ‘<tt>silence.mp3</tt>’:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="treble"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-treble">27.39 treble</a></h2>
+
+<p>Boost or cut treble (upper) frequencies of the audio using a two-pole
+shelving filter with a response similar to that of a standard
+hi-fi’s tone-controls. This is also known as shelving equalisation (EQ).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>gain, g</samp>’</dt>
+<dd><p>Give the gain at whichever is the lower of ~22 kHz and the
+Nyquist frequency. Its useful range is about -20 (for a large cut)
+to +20 (for a large boost). Beware of clipping when using a positive gain.
+</p>
+</dd>
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the filter’s central frequency and so can be used
+to extend or reduce the frequency range to be boosted or cut.
+The default value is <code>3000</code> Hz.
+</p>
+</dd>
+<dt> ‘<samp>width_type</samp>’</dt>
+<dd><p>Set method to specify band-width of filter.
+</p><dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Hz
+</p></dd>
+<dt> ‘<samp>q</samp>’</dt>
+<dd><p>Q-Factor
+</p></dd>
+<dt> ‘<samp>o</samp>’</dt>
+<dd><p>octave
+</p></dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>slope
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dd><p>Determine how steep is the filter’s shelf transition.
+</p></dd>
+</dl>
+
+<a name="volume"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-volume">27.40 volume</a></h2>
+
+<p>Adjust the input audio volume.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Set audio volume expression.
+</p>
+<p>Output values are clipped to the maximum value.
+</p>
+<p>The output audio volume is given by the relation:
+</p><table><tr><td> </td><td><pre class="example"><var>output_volume</var> = <var>volume</var> * <var>input_volume</var>
+</pre></td></tr></table>
+
+<p>Default value for <var>volume</var> is "1.0".
+</p>
+</dd>
+<dt> ‘<samp>precision</samp>’</dt>
+<dd><p>Set the mathematical precision.
+</p>
+<p>This determines which input sample formats will be allowed, which affects the
+precision of the volume scaling.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fixed</samp>’</dt>
+<dd><p>8-bit fixed-point; limits input sample format to U8, S16, and S32.
+</p></dd>
+<dt> ‘<samp>float</samp>’</dt>
+<dd><p>32-bit floating-point; limits input sample format to FLT. (default)
+</p></dd>
+<dt> ‘<samp>double</samp>’</dt>
+<dd><p>64-bit floating-point; limits input sample format to DBL.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the volume expression is evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>once</samp>’</dt>
+<dd><p>only evaluate expression once during the filter initialization, or
+when the ‘<samp>volume</samp>’ command is sent
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expression for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>once</samp>’.
+</p></dd>
+</dl>
+
+<p>The volume expression can contain the following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame number (starting at zero)
+</p></dd>
+<dt> ‘<samp>nb_channels</samp>’</dt>
+<dd><p>number of channels
+</p></dd>
+<dt> ‘<samp>nb_consumed_samples</samp>’</dt>
+<dd><p>number of samples consumed by the filter
+</p></dd>
+<dt> ‘<samp>nb_samples</samp>’</dt>
+<dd><p>number of samples in the current frame
+</p></dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>original frame position in the file
+</p></dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>frame PTS
+</p></dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>sample rate
+</p></dd>
+<dt> ‘<samp>startpts</samp>’</dt>
+<dd><p>PTS at start of stream
+</p></dd>
+<dt> ‘<samp>startt</samp>’</dt>
+<dd><p>time at start of stream
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>frame time
+</p></dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>timestamp timebase
+</p></dd>
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>last set volume value
+</p></dd>
+</dl>
+
+<p>Note that when ‘<samp>eval</samp>’ is set to ‘<samp>once</samp>’ only the
+<var>sample_rate</var> and <var>tb</var> variables are available, all other
+variables will evaluate to NAN.
+</p>
+<a name="Commands-4"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands-4">27.40.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>volume</samp>’</dt>
+<dd><p>Modify the volume expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-36"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-36">27.40.2 Examples</a></h3>
+
+<ul>
+<li>
+Halve the input audio volume:
+<table><tr><td> </td><td><pre class="example">volume=volume=0.5
+volume=volume=1/2
+volume=volume=-6.0206dB
+</pre></td></tr></table>
+
+<p>In all the above example the named key for ‘<samp>volume</samp>’ can be
+omitted, for example like in:
+</p><table><tr><td> </td><td><pre class="example">volume=0.5
+</pre></td></tr></table>
+
+</li><li>
+Increase input audio power by 6 decibels using fixed-point precision:
+<table><tr><td> </td><td><pre class="example">volume=volume=6dB:precision=fixed
+</pre></td></tr></table>
+
+</li><li>
+Fade volume after time 10 with an annihilation period of 5 seconds:
+<table><tr><td> </td><td><pre class="example">volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
+</pre></td></tr></table>
+</li></ul>
+
+<a name="volumedetect"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-volumedetect">27.41 volumedetect</a></h2>
+
+<p>Detect the volume of the input video.
+</p>
+<p>The filter has no parameters. The input is not modified. Statistics about
+the volume will be printed in the log when the input stream end is reached.
+</p>
+<p>In particular it will show the mean volume (root mean square), maximum
+volume (on a per-sample basis), and the beginning of a histogram of the
+registered volume values (from the maximum value to a cumulated 1/1000 of
+the samples).
+</p>
+<p>All volumes are in decibels relative to the maximum PCM value.
+</p>
+<a name="Examples-7"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-7">27.41.1 Examples</a></h3>
+
+<p>Here is an excerpt of the output:
+</p><table><tr><td> </td><td><pre class="example">[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB
+[Parsed_volumedetect_0 0xa23120] max_volume: -4 dB
+[Parsed_volumedetect_0 0xa23120] histogram_4db: 6
+[Parsed_volumedetect_0 0xa23120] histogram_5db: 62
+[Parsed_volumedetect_0 0xa23120] histogram_6db: 286
+[Parsed_volumedetect_0 0xa23120] histogram_7db: 1042
+[Parsed_volumedetect_0 0xa23120] histogram_8db: 2551
+[Parsed_volumedetect_0 0xa23120] histogram_9db: 4609
+[Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
+</pre></td></tr></table>
+
+<p>It means that:
+</p><ul>
+<li>
+The mean square energy is approximately -27 dB, or 10^-2.7.
+</li><li>
+The largest sample is at -4 dB, or more precisely between -4 dB and -5 dB.
+</li><li>
+There are 6 samples at -4 dB, 62 at -5 dB, 286 at -6 dB, etc.
+</li></ul>
+
+<p>In other words, raising the volume by +4 dB does not cause any clipping,
+raising it by +5 dB causes clipping for 6 samples, etc.
+</p>
+
+<a name="Audio-Sources"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Audio-Sources">28. Audio Sources</a></h1>
+
+<p>Below is a description of the currently available audio sources.
+</p>
+<a name="abuffer"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-abuffer">28.1 abuffer</a></h2>
+
+<p>Buffer audio frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/asrc_abuffer.h</tt>’.
+</p>
+<p>It accepts the following named parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Timebase which will be used for timestamps of submitted frames. It must be
+either a floating-point number or in <var>numerator</var>/<var>denominator</var> form.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate</samp>’</dt>
+<dd><p>The sample rate of the incoming audio buffers.
+</p>
+</dd>
+<dt> ‘<samp>sample_fmt</samp>’</dt>
+<dd><p>The sample format of the incoming audio buffers.
+Either a sample format name or its corresponging integer representation from
+the enum AVSampleFormat in ‘<tt>libavutil/samplefmt.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channel_layout</samp>’</dt>
+<dd><p>The channel layout of the incoming audio buffers.
+Either a channel layout name from channel_layout_map in
+‘<tt>libavutil/channel_layout.c</tt>’ or its corresponding integer representation
+from the AV_CH_LAYOUT_* macros in ‘<tt>libavutil/channel_layout.h</tt>’
+</p>
+</dd>
+<dt> ‘<samp>channels</samp>’</dt>
+<dd><p>The number of channels of the incoming audio buffers.
+If both <var>channels</var> and <var>channel_layout</var> are specified, then they
+must be consistent.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-23"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-23">28.1.1 Examples</a></h3>
+
+<table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
+</pre></td></tr></table>
+
+<p>will instruct the source to accept planar 16bit signed stereo at 44100Hz.
+Since the sample format with name "s16p" corresponds to the number
+6 and the "stereo" channel layout corresponds to the value 0x3, this is
+equivalent to:
+</p><table><tr><td> </td><td><pre class="example">abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
+</pre></td></tr></table>
+
+<a name="aevalsrc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-aevalsrc">28.2 aevalsrc</a></h2>
+
+<p>Generate an audio signal specified by an expression.
+</p>
+<p>This source accepts in input one or more expressions (one for each
+channel), which are evaluated and used to generate a corresponding
+audio signal.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>exprs</samp>’</dt>
+<dd><p>Set the ’|’-separated expressions list for each separate channel. In case the
+‘<samp>channel_layout</samp>’ option is not specified, the selected channel layout
+depends on the number of provided expressions. Otherwise the last
+specified expression is applied to the remaining output channels.
+</p>
+</dd>
+<dt> ‘<samp>channel_layout, c</samp>’</dt>
+<dd><p>Set the channel layout. The number of channels in the specified layout
+must be equal to the number of specified expressions.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the minimum duration of the sourced audio. See the function
+<code>av_parse_time()</code> 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.
+</p>
+<p>If not specified, or the expressed duration is negative, the audio is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per channel per each output frame,
+default to 1024.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, s</samp>’</dt>
+<dd><p>Specify the sample rate, default to 44100.
+</p></dd>
+</dl>
+
+<p>Each expression in <var>exprs</var> can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>number of the evaluated sample, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time of the evaluated sample expressed in seconds, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>sample rate
+</p>
+</dd>
+</dl>
+
+<a name="Examples-20"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-20">28.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate silence:
+<table><tr><td> </td><td><pre class="example">aevalsrc=0
+</pre></td></tr></table>
+
+</li><li>
+Generate a sin signal with frequency of 440 Hz, set sample rate to
+8000 Hz:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(440*2*PI*t):s=8000"
+</pre></td></tr></table>
+
+</li><li>
+Generate a two channels signal, specify the channel layout (Front
+Center + Back Center) explicitly:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
+</pre></td></tr></table>
+
+</li><li>
+Generate white noise:
+<table><tr><td> </td><td><pre class="example">aevalsrc="-2+random(0)"
+</pre></td></tr></table>
+
+</li><li>
+Generate an amplitude modulated signal:
+<table><tr><td> </td><td><pre class="example">aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
+</pre></td></tr></table>
+
+</li><li>
+Generate 2.5 Hz binaural beats on a 360 Hz carrier:
+<table><tr><td> </td><td><pre class="example">aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="anullsrc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-anullsrc">28.3 anullsrc</a></h2>
+
+<p>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).
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>channel_layout, cl</samp>’</dt>
+<dd>
+<p>Specify the channel layout, and can be either an integer or a string
+representing a channel layout. The default value of <var>channel_layout</var>
+is "stereo".
+</p>
+<p>Check the channel_layout_map definition in
+‘<tt>libavutil/channel_layout.c</tt>’ for the mapping between strings and
+channel layout values.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, and defaults to 44100.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the number of samples per requested frames.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-67"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-67">28.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the sample rate to 48000 Hz and the channel layout to AV_CH_LAYOUT_MONO.
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=4
+</pre></td></tr></table>
+
+</li><li>
+Do the same operation with a more obvious syntax:
+<table><tr><td> </td><td><pre class="example">anullsrc=r=48000:cl=mono
+</pre></td></tr></table>
+</li></ul>
+
+<p>All the parameters need to be explicitly defined.
+</p>
+<a name="flite"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-flite">28.4 flite</a></h2>
+
+<p>Synthesize a voice utterance using the libflite library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libflite</code>.
+</p>
+<p>Note that the flite library is not thread-safe.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>list_voices</samp>’</dt>
+<dd><p>If set to 1, list the names of the available voices and exit
+immediately. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_samples, n</samp>’</dt>
+<dd><p>Set the maximum number of samples per frame. Default value is 512.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>Set the filename containing the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>Set the text to speak.
+</p>
+</dd>
+<dt> ‘<samp>voice, v</samp>’</dt>
+<dd><p>Set the voice to use for the speech synthesis. Default value is
+<code>kal</code>. See also the <var>list_voices</var> option.
+</p></dd>
+</dl>
+
+<a name="Examples-27"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-27">28.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Read from file ‘<tt>speech.txt</tt>’, and synthetize the text using the
+standard flite voice:
+<table><tr><td> </td><td><pre class="example">flite=textfile=speech.txt
+</pre></td></tr></table>
+
+</li><li>
+Read the specified text selecting the <code>slt</code> voice:
+<table><tr><td> </td><td><pre class="example">flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Input text to ffmpeg:
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
+</pre></td></tr></table>
+
+</li><li>
+Make ‘<tt>ffplay</tt>’ speak the specified text, using <code>flite</code> and
+the <code>lavfi</code> device:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information about libflite, check:
+<a href="http://www.speech.cs.cmu.edu/flite/">http://www.speech.cs.cmu.edu/flite/</a>
+</p>
+<a name="sine"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sine">28.5 sine</a></h2>
+
+<p>Generate an audio signal made of a sine wave with amplitude 1/8.
+</p>
+<p>The audio signal is bit-exact.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>frequency, f</samp>’</dt>
+<dd><p>Set the carrier frequency. Default is 440 Hz.
+</p>
+</dd>
+<dt> ‘<samp>beep_factor, b</samp>’</dt>
+<dd><p>Enable a periodic beep every second with frequency <var>beep_factor</var> times
+the carrier frequency. Default is 0, meaning the beep is disabled.
+</p>
+</dd>
+<dt> ‘<samp>sample_rate, r</samp>’</dt>
+<dd><p>Specify the sample rate, default is 44100.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Specify the duration of the generated audio stream.
+</p>
+</dd>
+<dt> ‘<samp>samples_per_frame</samp>’</dt>
+<dd><p>Set the number of samples per output frame, default is 1024.
+</p></dd>
+</dl>
+
+<a name="Examples-80"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-80">28.5.1 Examples</a></h3>
+
+<ul>
+<li>
+Generate a simple 440 Hz sine wave:
+<table><tr><td> </td><td><pre class="example">sine
+</pre></td></tr></table>
+
+</li><li>
+Generate a 220 Hz sine wave with a 880 Hz beep each second, for 5 seconds:
+<table><tr><td> </td><td><pre class="example">sine=220:4:d=5
+sine=f=220:b=4:d=5
+sine=frequency=220:beep_factor=4:duration=5
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="Audio-Sinks"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Audio-Sinks">29. Audio Sinks</a></h1>
+
+<p>Below is a description of the currently available audio sinks.
+</p>
+<a name="abuffersink"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-abuffersink">29.1 abuffersink</a></h2>
+
+<p>Buffer audio frames, and make them available to the end of filter chain.
+</p>
+<p>This sink is mainly intended for programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVABufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="anullsink"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-anullsink">29.2 anullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Video-Filters"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Video-Filters">30. Video Filters</a></h1>
+
+<p>When you configure your FFmpeg build, you can disable any of the
+existing filters using <code>--disable-filters</code>.
+The configure output will show the video filters included in your
+build.
+</p>
+<p>Below is a description of the currently available video filters.
+</p>
+<a name="alphaextract"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-alphaextract">30.1 alphaextract</a></h2>
+
+<p>Extract the alpha component from the input as a grayscale video. This
+is especially useful with the <var>alphamerge</var> filter.
+</p>
+<a name="alphamerge"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-alphamerge">30.2 alphamerge</a></h2>
+
+<p>Add or replace the alpha component of the primary input with the
+grayscale value of a second input. This is intended for use with
+<var>alphaextract</var> to allow the transmission or storage of frame
+sequences that have alpha in a format that doesn’t support an alpha
+channel.
+</p>
+<p>For example, to reconstruct full frames from a normal YUV-encoded video
+and a separate video created with <var>alphaextract</var>, you might use:
+</p><table><tr><td> </td><td><pre class="example">movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
+</pre></td></tr></table>
+
+<p>Since this filter is designed for reconstruction, it operates on frame
+sequences without considering timestamps, and terminates when either
+input reaches end of stream. This will cause problems if your encoding
+pipeline drops frames. If you’re trying to apply an image as an
+overlay to a video stream, consider the <var>overlay</var> filter instead.
+</p>
+<a name="ass"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ass">30.3 ass</a></h2>
+
+<p>Same as the <a href="#subtitles">subtitles</a> filter, except that it doesn’t require libavcodec
+and libavformat to work. On the other hand, it is limited to ASS (Advanced
+Substation Alpha) subtitles files.
+</p>
+<a name="bbox"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-bbox">30.4 bbox</a></h2>
+
+<p>Compute the bounding box for the non-black pixels in the input frame
+luminance plane.
+</p>
+<p>This filter computes the bounding box containing all the pixels with a
+luminance value greater than the minimum allowed value.
+The parameters describing the bounding box are printed on the filter
+log.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>min_val</samp>’</dt>
+<dd><p>Set the minimal luminance value. Default is <code>16</code>.
+</p></dd>
+</dl>
+
+<a name="blackdetect"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-blackdetect">30.5 blackdetect</a></h2>
+
+<p>Detect video intervals that are (almost) completely black. Can be
+useful to detect chapter transitions, commercials, or invalid
+recordings. Output lines contains the time for the start, end and
+duration of the detected black interval expressed in seconds.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>black_min_duration, d</samp>’</dt>
+<dd><p>Set the minimum detected black duration expressed in seconds. It must
+be a non-negative floating point number.
+</p>
+<p>Default value is 2.0.
+</p>
+</dd>
+<dt> ‘<samp>picture_black_ratio_th, pic_th</samp>’</dt>
+<dd><p>Set the threshold for considering a picture "black".
+Express the minimum value for the ratio:
+</p><table><tr><td> </td><td><pre class="example"><var>nb_black_pixels</var> / <var>nb_pixels</var>
+</pre></td></tr></table>
+
+<p>for which a picture is considered black.
+Default value is 0.98.
+</p>
+</dd>
+<dt> ‘<samp>pixel_black_th, pix_th</samp>’</dt>
+<dd><p>Set the threshold for considering a pixel "black".
+</p>
+<p>The threshold expresses the maximum pixel luminance value for which a
+pixel is considered "black". The provided value is scaled according to
+the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>absolute_threshold</var> = <var>luminance_minimum_value</var> + <var>pixel_black_th</var> * <var>luminance_range_size</var>
+</pre></td></tr></table>
+
+<p><var>luminance_range_size</var> and <var>luminance_minimum_value</var> depend on
+the input video format, the range is [0-255] for YUV full-range
+formats and [16-235] for YUV non full-range formats.
+</p>
+<p>Default value is 0.10.
+</p></dd>
+</dl>
+
+<p>The following example sets the maximum pixel threshold to the minimum
+value, and detects only black intervals of 2 or more seconds:
+</p><table><tr><td> </td><td><pre class="example">blackdetect=d=2:pix_th=0.00
+</pre></td></tr></table>
+
+<a name="blackframe"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-blackframe">30.6 blackframe</a></h2>
+
+<p>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.
+</p>
+<p>In order to display the output lines, you need to set the loglevel at
+least to the AV_LOG_INFO value.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>amount</samp>’</dt>
+<dd><p>Set the percentage of the pixels that have to be below the threshold, defaults
+to <code>98</code>.
+</p>
+</dd>
+<dt> ‘<samp>threshold, thresh</samp>’</dt>
+<dd><p>Set the threshold below which a pixel value is considered black, defaults to
+<code>32</code>.
+</p>
+</dd>
+</dl>
+
+<a name="blend"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-blend">30.7 blend</a></h2>
+
+<p>Blend two video frames into each other.
+</p>
+<p>It takes two input streams and outputs one stream, the first input is the
+"top" layer and second input is "bottom" layer.
+Output terminates when shortest input terminates.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c0_mode</samp>’</dt>
+<dt> ‘<samp>c1_mode</samp>’</dt>
+<dt> ‘<samp>c2_mode</samp>’</dt>
+<dt> ‘<samp>c3_mode</samp>’</dt>
+<dt> ‘<samp>all_mode</samp>’</dt>
+<dd><p>Set blend mode for specific pixel component or all pixel components in case
+of <var>all_mode</var>. Default value is <code>normal</code>.
+</p>
+<p>Available values for component modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>addition</samp>’</dt>
+<dt> ‘<samp>and</samp>’</dt>
+<dt> ‘<samp>average</samp>’</dt>
+<dt> ‘<samp>burn</samp>’</dt>
+<dt> ‘<samp>darken</samp>’</dt>
+<dt> ‘<samp>difference</samp>’</dt>
+<dt> ‘<samp>divide</samp>’</dt>
+<dt> ‘<samp>dodge</samp>’</dt>
+<dt> ‘<samp>exclusion</samp>’</dt>
+<dt> ‘<samp>hardlight</samp>’</dt>
+<dt> ‘<samp>lighten</samp>’</dt>
+<dt> ‘<samp>multiply</samp>’</dt>
+<dt> ‘<samp>negation</samp>’</dt>
+<dt> ‘<samp>normal</samp>’</dt>
+<dt> ‘<samp>or</samp>’</dt>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dt> ‘<samp>phoenix</samp>’</dt>
+<dt> ‘<samp>pinlight</samp>’</dt>
+<dt> ‘<samp>reflect</samp>’</dt>
+<dt> ‘<samp>screen</samp>’</dt>
+<dt> ‘<samp>softlight</samp>’</dt>
+<dt> ‘<samp>subtract</samp>’</dt>
+<dt> ‘<samp>vividlight</samp>’</dt>
+<dt> ‘<samp>xor</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>c0_opacity</samp>’</dt>
+<dt> ‘<samp>c1_opacity</samp>’</dt>
+<dt> ‘<samp>c2_opacity</samp>’</dt>
+<dt> ‘<samp>c3_opacity</samp>’</dt>
+<dt> ‘<samp>all_opacity</samp>’</dt>
+<dd><p>Set blend opacity for specific pixel component or all pixel components in case
+of <var>all_opacity</var>. Only used in combination with pixel component blend modes.
+</p>
+</dd>
+<dt> ‘<samp>c0_expr</samp>’</dt>
+<dt> ‘<samp>c1_expr</samp>’</dt>
+<dt> ‘<samp>c2_expr</samp>’</dt>
+<dt> ‘<samp>c3_expr</samp>’</dt>
+<dt> ‘<samp>all_expr</samp>’</dt>
+<dd><p>Set blend expression for specific pixel component or all pixel components in case
+of <var>all_expr</var>. Note that related mode options will be ignored if those are set.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>the coordinates of the current sample
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of currently filtered plane
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>TOP, A</samp>’</dt>
+<dd><p>Value of pixel component at current location for first video frame (top layer).
+</p>
+</dd>
+<dt> ‘<samp>BOTTOM, B</samp>’</dt>
+<dd><p>Value of pixel component at current location for second video frame (bottom layer).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last bottom frame after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the bottom layer is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-52"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-52">30.7.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply transition from bottom layer to top layer in first 10 seconds:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
+</pre></td></tr></table>
+
+</li><li>
+Apply 1x1 checkerboard effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(N*SW+X,W),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover down effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(Y-N*SH,0),A,B)'
+</pre></td></tr></table>
+
+</li><li>
+Apply uncover up-left effect:
+<table><tr><td> </td><td><pre class="example">blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="boxblur"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-boxblur">30.8 boxblur</a></h2>
+
+<p>Apply boxblur algorithm to the input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+</dl>
+
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dt> ‘<samp>alpha_radius, ar</samp>’</dt>
+<dd><p>Set an expression for the box radius in pixels used for blurring the
+corresponding input plane.
+</p>
+<p>The radius value must be a non-negative number, and must not be
+greater than the value of the expression <code>min(w,h)/2</code> for the
+luma and alpha planes, and of <code>min(cw,ch)/2</code> for the chroma
+planes.
+</p>
+<p>Default value for ‘<samp>luma_radius</samp>’ is "2". If not specified,
+‘<samp>chroma_radius</samp>’ and ‘<samp>alpha_radius</samp>’ default to the
+corresponding value set for ‘<samp>luma_radius</samp>’.
+</p>
+<p>The expressions can contain the following constants:
+</p><dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>cw</samp>’</dt>
+<dt> ‘<samp>ch</samp>’</dt>
+<dd><p>the input chroma image width and height in pixels
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>luma_power, lp</samp>’</dt>
+<dt> ‘<samp>chroma_power, cp</samp>’</dt>
+<dt> ‘<samp>alpha_power, ap</samp>’</dt>
+<dd><p>Specify how many times the boxblur filter is applied to the
+corresponding plane.
+</p>
+<p>Default value for ‘<samp>luma_power</samp>’ is 2. If not specified,
+‘<samp>chroma_power</samp>’ and ‘<samp>alpha_power</samp>’ default to the
+corresponding value set for ‘<samp>luma_power</samp>’.
+</p>
+<p>A value of 0 will disable the effect.
+</p></dd>
+</dl>
+
+<a name="Examples-41"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-41">30.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply a boxblur filter with luma, chroma, and alpha radius
+set to 2:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=2:luma_power=1
+boxblur=2:1
+</pre></td></tr></table>
+
+</li><li>
+Set luma radius to 2, alpha and chroma radius to 0:
+<table><tr><td> </td><td><pre class="example">boxblur=2:1:cr=0:ar=0
+</pre></td></tr></table>
+
+</li><li>
+Set luma and chroma radius to a fraction of the video dimension:
+<table><tr><td> </td><td><pre class="example">boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorbalance"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-colorbalance">30.9 colorbalance</a></h2>
+<p>Modify intensity of primary colors (red, green and blue) of input frames.
+</p>
+<p>The filter allows an input frame to be adjusted in the shadows, midtones or highlights
+regions for the red-cyan, green-magenta or blue-yellow balance.
+</p>
+<p>A positive adjustment value shifts the balance towards the primary color, a negative
+value towards the complementary color.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rs</samp>’</dt>
+<dt> ‘<samp>gs</samp>’</dt>
+<dt> ‘<samp>bs</samp>’</dt>
+<dd><p>Adjust red, green and blue shadows (darkest pixels).
+</p>
+</dd>
+<dt> ‘<samp>rm</samp>’</dt>
+<dt> ‘<samp>gm</samp>’</dt>
+<dt> ‘<samp>bm</samp>’</dt>
+<dd><p>Adjust red, green and blue midtones (medium pixels).
+</p>
+</dd>
+<dt> ‘<samp>rh</samp>’</dt>
+<dt> ‘<samp>gh</samp>’</dt>
+<dt> ‘<samp>bh</samp>’</dt>
+<dd><p>Adjust red, green and blue highlights (brightest pixels).
+</p>
+<p>Allowed ranges for options are <code>[-1.0, 1.0]</code>. Defaults are <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-81"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-81">30.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Add red color cast to shadows:
+<table><tr><td> </td><td><pre class="example">colorbalance=rs=.3
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colorchannelmixer"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-colorchannelmixer">30.10 colorchannelmixer</a></h2>
+
+<p>Adjust video input frames by re-mixing color channels.
+</p>
+<p>This filter modifies a color channel by adding the values associated to
+the other channels of the same pixels. For example if the value to
+modify is red, the output value will be:
+</p><table><tr><td> </td><td><pre class="example"><var>red</var>=<var>red</var>*<var>rr</var> + <var>blue</var>*<var>rb</var> + <var>green</var>*<var>rg</var> + <var>alpha</var>*<var>ra</var>
+</pre></td></tr></table>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rr</samp>’</dt>
+<dt> ‘<samp>rg</samp>’</dt>
+<dt> ‘<samp>rb</samp>’</dt>
+<dt> ‘<samp>ra</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output red channel.
+Default is <code>1</code> for <var>rr</var>, and <code>0</code> for <var>rg</var>, <var>rb</var> and <var>ra</var>.
+</p>
+</dd>
+<dt> ‘<samp>gr</samp>’</dt>
+<dt> ‘<samp>gg</samp>’</dt>
+<dt> ‘<samp>gb</samp>’</dt>
+<dt> ‘<samp>ga</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output green channel.
+Default is <code>1</code> for <var>gg</var>, and <code>0</code> for <var>gr</var>, <var>gb</var> and <var>ga</var>.
+</p>
+</dd>
+<dt> ‘<samp>br</samp>’</dt>
+<dt> ‘<samp>bg</samp>’</dt>
+<dt> ‘<samp>bb</samp>’</dt>
+<dt> ‘<samp>ba</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output blue channel.
+Default is <code>1</code> for <var>bb</var>, and <code>0</code> for <var>br</var>, <var>bg</var> and <var>ba</var>.
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dt> ‘<samp>ag</samp>’</dt>
+<dt> ‘<samp>ab</samp>’</dt>
+<dt> ‘<samp>aa</samp>’</dt>
+<dd><p>Adjust contribution of input red, green, blue and alpha channels for output alpha channel.
+Default is <code>1</code> for <var>aa</var>, and <code>0</code> for <var>ar</var>, <var>ag</var> and <var>ab</var>.
+</p>
+<p>Allowed ranges for options are <code>[-2.0, 2.0]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-5"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-5">30.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert source to grayscale:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
+</pre></td></tr></table>
+</li><li>
+Simulate sepia tones:
+<table><tr><td> </td><td><pre class="example">colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
+</pre></td></tr></table>
+</li></ul>
+
+<a name="colormatrix"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-colormatrix">30.11 colormatrix</a></h2>
+
+<p>Convert color matrix.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>src</samp>’</dt>
+<dt> ‘<samp>dst</samp>’</dt>
+<dd><p>Specify the source and destination color matrix. Both values must be
+specified.
+</p>
+<p>The accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>BT.709
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>BT.601
+</p>
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>SMPTE-240M
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>FCC
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>For example to convert from BT.601 to SMPTE-240M, use the command:
+</p><table><tr><td> </td><td><pre class="example">colormatrix=bt601:smpte240m
+</pre></td></tr></table>
+
+<a name="copy"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-copy">30.12 copy</a></h2>
+
+<p>Copy the input source unchanged to the output. Mainly useful for
+testing purposes.
+</p>
+<a name="crop"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-crop">30.13 crop</a></h2>
+
+<p>Crop the input video to given dimensions.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w, out_w</samp>’</dt>
+<dd><p>Width of the output video. It defaults to <code>iw</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>h, out_h</samp>’</dt>
+<dd><p>Height of the output video. It defaults to <code>ih</code>.
+This expression is evaluated only once during the filter
+configuration.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dd><p>Horizontal position, in the input video, of the left edge of the output video.
+It defaults to <code>(in_w-out_w)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Vertical position, in the input video, of the top edge of the output video.
+It defaults to <code>(in_h-out_h)/2</code>.
+This expression is evaluated per-frame.
+</p>
+</dd>
+<dt> ‘<samp>keep_aspect</samp>’</dt>
+<dd><p>If set to 1 will force the output display aspect ratio
+to be the same of the input, by changing the output sample aspect
+ratio. It defaults to 0.
+</p></dd>
+</dl>
+
+<p>The <var>out_w</var>, <var>out_h</var>, <var>x</var>, <var>y</var> parameters are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output (cropped) width and height
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>The expression for <var>out_w</var> may depend on the value of <var>out_h</var>,
+and the expression for <var>out_h</var> may depend on <var>out_w</var>, but they
+cannot depend on <var>x</var> and <var>y</var>, as <var>x</var> and <var>y</var> are
+evaluated after <var>out_w</var> and <var>out_h</var>.
+</p>
+<p>The <var>x</var> and <var>y</var> 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.
+</p>
+<p>The expression for <var>x</var> may depend on <var>y</var>, and the expression
+for <var>y</var> may depend on <var>x</var>.
+</p>
+<a name="Examples-60"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-60">30.13.1 Examples</a></h3>
+
+<ul>
+<li>
+Crop area with size 100x100 at position (12,34).
+<table><tr><td> </td><td><pre class="example">crop=100:100:12:34
+</pre></td></tr></table>
+
+<p>Using named options, the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">crop=w=100:h=100:x=12:y=34
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 100x100:
+<table><tr><td> </td><td><pre class="example">crop=100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop the central input area with size 2/3 of the input video:
+<table><tr><td> </td><td><pre class="example">crop=2/3*in_w:2/3*in_h
+</pre></td></tr></table>
+
+</li><li>
+Crop the input video central square:
+<table><tr><td> </td><td><pre class="example">crop=out_w=in_h
+crop=in_h
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">crop=in_w-100:in_h-100:100:100
+</pre></td></tr></table>
+
+</li><li>
+Crop 10 pixels from the left and right borders, and 20 pixels from
+the top and bottom borders
+<table><tr><td> </td><td><pre class="example">crop=in_w-2*10:in_h-2*20
+</pre></td></tr></table>
+
+</li><li>
+Keep only the bottom right quarter of the input image:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:in_w/2:in_h/2
+</pre></td></tr></table>
+
+</li><li>
+Crop height for getting Greek harmony:
+<table><tr><td> </td><td><pre class="example">crop=in_w:1/PHI*in_w
+</pre></td></tr></table>
+
+</li><li>
+Appply trembling effect:
+<table><tr><td> </td><td><pre class="example">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)
+</pre></td></tr></table>
+
+</li><li>
+Apply erratic camera effect depending on timestamp:
+<table><tr><td> </td><td><pre class="example">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)"
+</pre></td></tr></table>
+
+</li><li>
+Set x depending on the value of y:
+<table><tr><td> </td><td><pre class="example">crop=in_w/2:in_h/2:y:10+10*sin(n/10)
+</pre></td></tr></table>
+</li></ul>
+
+<a name="cropdetect"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-cropdetect">30.14 cropdetect</a></h2>
+
+<p>Auto-detect crop size.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>limit</samp>’</dt>
+<dd><p>Set higher black value threshold, which can be optionally specified
+from nothing (0) to everything (255). An intensity value greater
+to the set value is considered non-black. Default value is 24.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Set the value for which the width/height should be divisible by. 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. Default value is 16.
+</p>
+</dd>
+<dt> ‘<samp>reset_count, reset</samp>’</dt>
+<dd><p>Set the 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. Default value is 0.
+</p>
+<p>This can be useful when channel logos distort the video area. 0
+indicates never reset and return the largest area encountered during
+playback.
+</p></dd>
+</dl>
+
+<p><a name="curves"></a>
+</p><a name="curves-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-curves-1">30.15 curves</a></h2>
+
+<p>Apply color adjustments using curves.
+</p>
+<p>This filter is similar to the Adobe Photoshop and GIMP curves tools. Each
+component (red, green and blue) has its values defined by <var>N</var> key points
+tied from each other using a smooth curve. The x-axis represents the pixel
+values from the input frame, and the y-axis the new pixel values to be set for
+the output frame.
+</p>
+<p>By default, a component curve is defined by the two points <var>(0;0)</var> and
+<var>(1;1)</var>. This creates a straight line where each original pixel value is
+"adjusted" to its own value, which means no change to the image.
+</p>
+<p>The filter allows you to redefine these two points and add some more. A new
+curve (using a natural cubic spline interpolation) will be define to pass
+smoothly through all these new coordinates. The new defined points needs to be
+strictly increasing over the x-axis, and their <var>x</var> and <var>y</var> values must
+be in the <var>[0;1]</var> interval. If the computed curves happened to go outside
+the vector spaces, the values will be clipped accordingly.
+</p>
+<p>If there is no key point defined in <code>x=0</code>, the filter will automatically
+insert a <var>(0;0)</var> point. In the same way, if there is no key point defined
+in <code>x=1</code>, the filter will automatically insert a <var>(1;1)</var> point.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>preset</samp>’</dt>
+<dd><p>Select one of the available color presets. This option can be used in addition
+to the ‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ parameters; in this case, the later
+options takes priority on the preset values.
+Available presets are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dt> ‘<samp>color_negative</samp>’</dt>
+<dt> ‘<samp>cross_process</samp>’</dt>
+<dt> ‘<samp>darker</samp>’</dt>
+<dt> ‘<samp>increase_contrast</samp>’</dt>
+<dt> ‘<samp>lighter</samp>’</dt>
+<dt> ‘<samp>linear_contrast</samp>’</dt>
+<dt> ‘<samp>medium_contrast</samp>’</dt>
+<dt> ‘<samp>negative</samp>’</dt>
+<dt> ‘<samp>strong_contrast</samp>’</dt>
+<dt> ‘<samp>vintage</samp>’</dt>
+</dl>
+<p>Default is <code>none</code>.
+</p></dd>
+<dt> ‘<samp>master, m</samp>’</dt>
+<dd><p>Set the master key points. These points will define a second pass mapping. It
+is sometimes called a "luminance" or "value" mapping. It can be used with
+‘<samp>r</samp>’, ‘<samp>g</samp>’, ‘<samp>b</samp>’ or ‘<samp>all</samp>’ since it acts like a
+post-processing LUT.
+</p></dd>
+<dt> ‘<samp>red, r</samp>’</dt>
+<dd><p>Set the key points for the red component.
+</p></dd>
+<dt> ‘<samp>green, g</samp>’</dt>
+<dd><p>Set the key points for the green component.
+</p></dd>
+<dt> ‘<samp>blue, b</samp>’</dt>
+<dd><p>Set the key points for the blue component.
+</p></dd>
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Set the key points for all components (not including master).
+Can be used in addition to the other key points component
+options. In this case, the unset component(s) will fallback on this
+‘<samp>all</samp>’ setting.
+</p></dd>
+<dt> ‘<samp>psfile</samp>’</dt>
+<dd><p>Specify a Photoshop curves file (<code>.asv</code>) to import the settings from.
+</p></dd>
+</dl>
+
+<p>To avoid some filtergraph syntax conflicts, each key points list need to be
+defined using the following syntax: <code>x0/y0 x1/y1 x2/y2 ...</code>.
+</p>
+<a name="Examples-51"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-51">30.15.1 Examples</a></h3>
+
+<ul>
+<li>
+Increase slightly the middle level of blue:
+<table><tr><td> </td><td><pre class="example">curves=blue='0.5/0.58'
+</pre></td></tr></table>
+
+</li><li>
+Vintage effect:
+<table><tr><td> </td><td><pre class="example">curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
+</pre></td></tr></table>
+<p>Here we obtain the following coordinates for each components:
+</p><dl compact="compact">
+<dt> <var>red</var></dt>
+<dd><p><code>(0;0.11) (0.42;0.51) (1;0.95)</code>
+</p></dd>
+<dt> <var>green</var></dt>
+<dd><p><code>(0;0) (0.50;0.48) (1;1)</code>
+</p></dd>
+<dt> <var>blue</var></dt>
+<dd><p><code>(0;0.22) (0.49;0.44) (1;0.80)</code>
+</p></dd>
+</dl>
+
+</li><li>
+The previous example can also be achieved with the associated built-in preset:
+<table><tr><td> </td><td><pre class="example">curves=preset=vintage
+</pre></td></tr></table>
+
+</li><li>
+Or simply:
+<table><tr><td> </td><td><pre class="example">curves=vintage
+</pre></td></tr></table>
+
+</li><li>
+Use a Photoshop preset and redefine the points of the green component:
+<table><tr><td> </td><td><pre class="example">curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="dctdnoiz"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-dctdnoiz">30.16 dctdnoiz</a></h2>
+
+<p>Denoise frames using 2D DCT (frequency domain filtering).
+</p>
+<p>This filter is not designed for real time and can be extremely slow.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sigma, s</samp>’</dt>
+<dd><p>Set the noise sigma constant.
+</p>
+<p>This <var>sigma</var> defines a hard threshold of <code>3 * sigma</code>; every DCT
+coefficient (absolute value) below this threshold with be dropped.
+</p>
+<p>If you need a more advanced filtering, see ‘<samp>expr</samp>’.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>overlap</samp>’</dt>
+<dd><p>Set number overlapping pixels for each block. Each block is of size
+<code>16x16</code>. Since the filter can be slow, you may want to reduce this value,
+at the cost of a less effective filter and the risk of various artefacts.
+</p>
+<p>If the overlapping value doesn’t allow to process the whole input width or
+height, a warning will be displayed and according borders won’t be denoised.
+</p>
+<p>Default value is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set the coefficient factor expression.
+</p>
+<p>For each coefficient of a DCT block, this expression will be evaluated as a
+multiplier value for the coefficient.
+</p>
+<p>If this is option is set, the ‘<samp>sigma</samp>’ option will be ignored.
+</p>
+<p>The absolute value of the coefficient can be accessed through the <var>c</var>
+variable.
+</p></dd>
+</dl>
+
+<a name="Examples-10"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-10">30.16.1 Examples</a></h3>
+
+<p>Apply a denoise with a ‘<samp>sigma</samp>’ of <code>4.5</code>:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=4.5
+</pre></td></tr></table>
+
+<p>The same operation can be achieved using the expression system:
+</p><table><tr><td> </td><td><pre class="example">dctdnoiz=e='gte(c, 4.5*3)'
+</pre></td></tr></table>
+
+<p><a name="decimate"></a>
+</p><a name="decimate-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-decimate-1">30.17 decimate</a></h2>
+
+<p>Drop duplicated frames at regular intervals.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Set the number of frames from which one will be dropped. Setting this to
+<var>N</var> means one frame in every batch of <var>N</var> frames will be dropped.
+Default is <code>5</code>.
+</p>
+</dd>
+<dt> ‘<samp>dupthresh</samp>’</dt>
+<dd><p>Set the threshold for duplicate detection. If the difference metric for a frame
+is less than or equal to this value, then it is declared as duplicate. Default
+is <code>1.1</code>
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set scene change threshold. Default is <code>15</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Set the size of the x and y-axis blocks used during metric calculations.
+Larger blocks give better noise suppression, but also give worse detection of
+small movements. Must be a power of two. Default is <code>32</code>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark main input as a pre-processed input and activate clean source input
+stream. This allows the input to be pre-processed with various filters to help
+the metrics calculation while keeping the frame selection lossless. When set to
+<code>1</code>, the first stream is for the pre-processed input, and the second
+stream is the clean source from where the kept frames are chosen. Default is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Set whether or not chroma is considered in the metric calculations. Default is
+<code>1</code>.
+</p></dd>
+</dl>
+
+<a name="dejudder"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-dejudder">30.18 dejudder</a></h2>
+
+<p>Remove judder produced by partially interlaced telecined content.
+</p>
+<p>Judder can be introduced, for instance, by <a href="#pullup">pullup</a> filter. If the original
+source was partially telecined content then the output of <code>pullup,dejudder</code>
+will have a variable frame rate. May change the recorded frame rate of the
+container. Aside from that change, this filter will not affect constant frame
+rate video.
+</p>
+<p>The option available in this filter is:
+</p><dl compact="compact">
+<dt> ‘<samp>cycle</samp>’</dt>
+<dd><p>Specify the length of the window over which the judder repeats.
+</p>
+<p>Accepts any interger greater than 1. Useful values are:
+</p><dl compact="compact">
+<dt> ‘<samp>4</samp>’</dt>
+<dd><p>If the original was telecined from 24 to 30 fps (Film to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>5</samp>’</dt>
+<dd><p>If the original was telecined from 25 to 30 fps (PAL to NTSC).
+</p>
+</dd>
+<dt> ‘<samp>20</samp>’</dt>
+<dd><p>If a mixture of the two.
+</p></dd>
+</dl>
+
+<p>The default is ‘<samp>4</samp>’.
+</p></dd>
+</dl>
+
+<a name="delogo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-delogo">30.19 delogo</a></h2>
+
+<p>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).
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify the top left corner coordinates of the logo. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the width and height of the logo to clear. They must be
+specified.
+</p>
+</dd>
+<dt> ‘<samp>band, t</samp>’</dt>
+<dd><p>Specify the thickness of the fuzzy edge of the rectangle (added to
+<var>w</var> and <var>h</var>). The default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>When set to 1, a green rectangle is drawn on the screen to simplify
+finding the right <var>x</var>, <var>y</var>, <var>w</var>, and <var>h</var> parameters.
+The default value is 0.
+</p>
+<p>The rectangle is drawn on the outermost pixels which will be (partly)
+replaced with interpolated values. The values of the next pixels
+immediately outside this rectangle in each direction will be used to
+compute the interpolated pixel values inside the rectangle.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-21"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-21">30.19.1 Examples</a></h3>
+
+<ul>
+<li>
+Set a rectangle covering the area with top left corner coordinates 0,0
+and size 100x77, setting a band of size 10:
+<table><tr><td> </td><td><pre class="example">delogo=x=0:y=0:w=100:h=77:band=10
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="deshake"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-deshake">30.20 deshake</a></h2>
+
+<p>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.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This is useful when simultaneous movement of subjects within the frame
+might be confused for camera motion by the motion vector search.
+</p>
+<p>If any or all of <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> 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.
+</p>
+<p>Default - search the whole frame.
+</p>
+</dd>
+<dt> ‘<samp>rx</samp>’</dt>
+<dt> ‘<samp>ry</samp>’</dt>
+<dd><p>Specify the maximum extent of movement in x and y directions in the
+range 0-64 pixels. Default 16.
+</p>
+</dd>
+<dt> ‘<samp>edge</samp>’</dt>
+<dd><p>Specify how to generate pixels to fill blanks at the edge of the
+frame. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>blank, 0</samp>’</dt>
+<dd><p>Fill zeroes at blank locations
+</p></dd>
+<dt> ‘<samp>original, 1</samp>’</dt>
+<dd><p>Original image at blank locations
+</p></dd>
+<dt> ‘<samp>clamp, 2</samp>’</dt>
+<dd><p>Extruded edge value at blank locations
+</p></dd>
+<dt> ‘<samp>mirror, 3</samp>’</dt>
+<dd><p>Mirrored edge at blank locations
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>mirror</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>blocksize</samp>’</dt>
+<dd><p>Specify the blocksize to use for motion search. Range 4-128 pixels,
+default 8.
+</p>
+</dd>
+<dt> ‘<samp>contrast</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>search</samp>’</dt>
+<dd><p>Specify the search strategy. Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>exhaustive, 0</samp>’</dt>
+<dd><p>Set exhaustive search
+</p></dd>
+<dt> ‘<samp>less, 1</samp>’</dt>
+<dd><p>Set less exhaustive search.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>exhaustive</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>If set then a detailed log of the motion search is written to the
+specified file.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<a name="drawbox"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-drawbox">30.21 drawbox</a></h2>
+
+<p>Draw a colored box on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the top left corner coordinates of the box. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the box, if 0 they are interpreted as
+the input width and height. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the box to write. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the box edge color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the box edge. Default value is <code>3</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y offset coordinates where the box is drawn.
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn box.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn box.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-2"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-2">30.21.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a black box around the edge of the input image:
+<table><tr><td> </td><td><pre class="example">drawbox
+</pre></td></tr></table>
+
+</li><li>
+Draw a box with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawbox=10:20:200:60:red@0.5
+</pre></td></tr></table>
+
+<p>The previous example can be specified as:
+</p><table><tr><td> </td><td><pre class="example">drawbox=x=10:y=20:w=200:h=60:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Fill the box with pink color:
+<table><tr><td> </td><td><pre class="example">drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
+</pre></td></tr></table>
+
+</li><li>
+Draw a 2-pixel red 2.40:1 mask:
+<table><tr><td> </td><td><pre class="example">drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
+</pre></td></tr></table>
+</li></ul>
+
+<a name="drawgrid"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-drawgrid">30.22 drawgrid</a></h2>
+
+<p>Draw a grid on the input image.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The expressions which specify the coordinates of some point of grid intersection (meant to configure offset). Both default to 0.
+</p>
+</dd>
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>The expressions which specify the width and height of the grid cell, if 0 they are interpreted as the
+input width and height, respectively, minus <code>thickness</code>, so image gets
+framed. Default to 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the grid. For the general syntax of this option,
+check the "Color" section in the ffmpeg-utils manual. If the special
+value <code>invert</code> is used, the grid color is the same as the
+video with inverted luma.
+</p>
+</dd>
+<dt> ‘<samp>thickness, t</samp>’</dt>
+<dd><p>The expression which sets the thickness of the grid line. Default value is <code>1</code>.
+</p>
+<p>See below for the list of accepted constants.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var>, <var>y</var>, <var>w</var> and <var>h</var> and <var>t</var> are expressions containing the
+following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>The input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dd><p>The input grid cell width and height.
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>The input sample aspect ratio.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>The x and y coordinates of some point of grid intersection (meant to configure offset).
+</p>
+</dd>
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>The width and height of the drawn cell.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>The thickness of the drawn cell.
+</p>
+<p>These constants allow the <var>x</var>, <var>y</var>, <var>w</var>, <var>h</var> and <var>t</var> expressions to refer to
+each other, so you may for example specify <code>y=x/dar</code> or <code>h=w/dar</code>.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-72"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-72">30.22.1 Examples</a></h3>
+
+<ul>
+<li>
+Draw a grid with cell 100x100 pixels, thickness 2 pixels, with color red and an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=width=100:height=100:thickness=2:color=red@0.5
+</pre></td></tr></table>
+
+</li><li>
+Draw a white 3x3 grid with an opacity of 50%:
+<table><tr><td> </td><td><pre class="example">drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="drawtext"></a>
+</p><a name="drawtext-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-drawtext-1">30.23 drawtext</a></h2>
+
+<p>Draw text string or text from specified file on top of video using the
+libfreetype library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libfreetype</code>.
+</p>
+<a name="Syntax"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Syntax">30.23.1 Syntax</a></h3>
+
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>box</samp>’</dt>
+<dd><p>Used to draw a box around text using background color.
+Value should be either 1 (enable) or 0 (disable).
+The default value of <var>box</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>boxcolor</samp>’</dt>
+<dd><p>The color to be used for drawing box around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>boxcolor</var> is "white".
+</p>
+</dd>
+<dt> ‘<samp>borderw</samp>’</dt>
+<dd><p>Set the width of the border to be drawn around the text using <var>bordercolor</var>.
+The default value of <var>borderw</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>bordercolor</samp>’</dt>
+<dd><p>Set the color to be used for drawing border around text. For the syntax of this
+option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>bordercolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>expansion</samp>’</dt>
+<dd><p>Select how the <var>text</var> is expanded. Can be either <code>none</code>,
+<code>strftime</code> (deprecated) or
+<code>normal</code> (default). See the <a href="#drawtext_005fexpansion">Text expansion</a> section
+below for details.
+</p>
+</dd>
+<dt> ‘<samp>fix_bounds</samp>’</dt>
+<dd><p>If true, check and fix text coords to avoid clipping.
+</p>
+</dd>
+<dt> ‘<samp>fontcolor</samp>’</dt>
+<dd><p>The color to be used for drawing fonts. For the syntax of this option, check
+the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>fontcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>fontfile</samp>’</dt>
+<dd><p>The font file to be used for drawing text. Path must be included.
+This parameter is mandatory.
+</p>
+</dd>
+<dt> ‘<samp>fontsize</samp>’</dt>
+<dd><p>The font size to be used for drawing text.
+The default value of <var>fontsize</var> is 16.
+</p>
+</dd>
+<dt> ‘<samp>ft_load_flags</samp>’</dt>
+<dd><p>Flags to be used for loading the fonts.
+</p>
+<p>The flags map the corresponding flags supported by libfreetype, and are
+a combination of the following values:
+</p><dl compact="compact">
+<dt> <var>default</var></dt>
+<dt> <var>no_scale</var></dt>
+<dt> <var>no_hinting</var></dt>
+<dt> <var>render</var></dt>
+<dt> <var>no_bitmap</var></dt>
+<dt> <var>vertical_layout</var></dt>
+<dt> <var>force_autohint</var></dt>
+<dt> <var>crop_bitmap</var></dt>
+<dt> <var>pedantic</var></dt>
+<dt> <var>ignore_global_advance_width</var></dt>
+<dt> <var>no_recurse</var></dt>
+<dt> <var>ignore_transform</var></dt>
+<dt> <var>monochrome</var></dt>
+<dt> <var>linear_design</var></dt>
+<dt> <var>no_autohint</var></dt>
+</dl>
+
+<p>Default value is "default".
+</p>
+<p>For more information consult the documentation for the FT_LOAD_*
+libfreetype flags.
+</p>
+</dd>
+<dt> ‘<samp>shadowcolor</samp>’</dt>
+<dd><p>The color to be used for drawing a shadow behind the drawn text. For the
+syntax of this option, check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>shadowcolor</var> is "black".
+</p>
+</dd>
+<dt> ‘<samp>shadowx</samp>’</dt>
+<dt> ‘<samp>shadowy</samp>’</dt>
+<dd><p>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".
+</p>
+</dd>
+<dt> ‘<samp>start_number</samp>’</dt>
+<dd><p>The starting frame number for the n/frame_num variable. The default value
+is "0".
+</p>
+</dd>
+<dt> ‘<samp>tabsize</samp>’</dt>
+<dd><p>The size in number of spaces to use for rendering the tab.
+Default value is 4.
+</p>
+</dd>
+<dt> ‘<samp>timecode</samp>’</dt>
+<dd><p>Set the initial timecode representation in "hh:mm:ss[:;.]ff"
+format. It can be used with or without text parameter. <var>timecode_rate</var>
+option must be specified.
+</p>
+</dd>
+<dt> ‘<samp>timecode_rate, rate, r</samp>’</dt>
+<dd><p>Set the timecode frame rate (timecode only).
+</p>
+</dd>
+<dt> ‘<samp>text</samp>’</dt>
+<dd><p>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
+<var>textfile</var>.
+</p>
+</dd>
+<dt> ‘<samp>textfile</samp>’</dt>
+<dd><p>A text file containing text to be drawn. The text must be a sequence
+of UTF-8 encoded characters.
+</p>
+<p>This parameter is mandatory if no text string is specified with the
+parameter <var>text</var>.
+</p>
+<p>If both <var>text</var> and <var>textfile</var> are specified, an error is thrown.
+</p>
+</dd>
+<dt> ‘<samp>reload</samp>’</dt>
+<dd><p>If set to 1, the <var>textfile</var> will be reloaded before each frame.
+Be sure to update it atomically, or it may be read partially, or even fail.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>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.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is "0".
+</p>
+<p>See below for the list of accepted constants and functions.
+</p></dd>
+</dl>
+
+<p>The parameters for <var>x</var> and <var>y</var> are expressions containing the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>line_h, lh</samp>’</dt>
+<dd><p>the height of each text line
+</p>
+</dd>
+<dt> ‘<samp>main_h, h, H</samp>’</dt>
+<dd><p>the input height
+</p>
+</dd>
+<dt> ‘<samp>main_w, w, W</samp>’</dt>
+<dd><p>the input width
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_a, ascent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_d, descent</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_h</samp>’</dt>
+<dd><p>maximum glyph height, that is the maximum height for all the glyphs
+contained in the rendered text, it is equivalent to <var>ascent</var> -
+<var>descent</var>.
+</p>
+</dd>
+<dt> ‘<samp>max_glyph_w</samp>’</dt>
+<dd><p>maximum glyph width, that is the maximum width for all the glyphs
+contained in the rendered text
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>rand(min, max)</samp>’</dt>
+<dd><p>return a random number included between <var>min</var> and <var>max</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>text_h, th</samp>’</dt>
+<dd><p>the height of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>text_w, tw</samp>’</dt>
+<dd><p>the width of the rendered text
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the x and y offset coordinates where the text is drawn.
+</p>
+<p>These parameters allow the <var>x</var> and <var>y</var> expressions to refer
+each other, so you can for example specify <code>y=x/dar</code>.
+</p></dd>
+</dl>
+
+<p>If libavfilter was built with <code>--enable-fontconfig</code>, then
+‘<samp>fontfile</samp>’ can be a fontconfig pattern or omitted.
+</p>
+<p><a name="drawtext_005fexpansion"></a>
+</p><a name="Text-expansion"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Text-expansion">30.23.2 Text expansion</a></h3>
+
+<p>If ‘<samp>expansion</samp>’ is set to <code>strftime</code>,
+the filter recognizes strftime() sequences in the provided text and
+expands them accordingly. Check the documentation of strftime(). This
+feature is deprecated.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>none</code>, the text is printed verbatim.
+</p>
+<p>If ‘<samp>expansion</samp>’ is set to <code>normal</code> (which is the default),
+the following expansion mechanism is used.
+</p>
+<p>The backslash character ’\’, followed by any character, always expands to
+the second character.
+</p>
+<p>Sequence of the form <code>%{...}</code> are expanded. The text between the
+braces is a function name, possibly followed by arguments separated by ’:’.
+If the arguments contain special characters or delimiters (’:’ or ’}’),
+they should be escaped.
+</p>
+<p>Note that they probably must also be escaped as the value for the
+‘<samp>text</samp>’ option in the filter argument string and as the filter
+argument in the filtergraph description, and possibly also for the shell,
+that makes up to four levels of escaping; using a text file avoids these
+problems.
+</p>
+<p>The following functions are available:
+</p>
+<dl compact="compact">
+<dt> <code>expr, e</code></dt>
+<dd><p>The expression evaluation result.
+</p>
+<p>It must take one argument specifying the expression to be evaluated,
+which accepts the same constants and functions as the <var>x</var> and
+<var>y</var> values. Note that not all constants should be used, for
+example the text size is not known when evaluating the expression, so
+the constants <var>text_w</var> and <var>text_h</var> will have an undefined
+value.
+</p>
+</dd>
+<dt> <code>gmtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in UTC.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>localtime</code></dt>
+<dd><p>The time at which the filter is running, expressed in the local time zone.
+It can accept an argument: a strftime() format string.
+</p>
+</dd>
+<dt> <code>metadata</code></dt>
+<dd><p>Frame metadata. It must take one argument specifying metadata key.
+</p>
+</dd>
+<dt> <code>n, frame_num</code></dt>
+<dd><p>The frame number, starting from 0.
+</p>
+</dd>
+<dt> <code>pict_type</code></dt>
+<dd><p>A 1 character description of the current picture type.
+</p>
+</dd>
+<dt> <code>pts</code></dt>
+<dd><p>The timestamp of the current frame, in seconds, with microsecond accuracy.
+</p>
+</dd>
+</dl>
+
+<a name="Examples-40"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-40">30.23.3 Examples</a></h3>
+
+<ul>
+<li>
+Draw "Test Text" with font FreeSerif, using the default values for the
+optional parameters.
+
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
+</pre></td></tr></table>
+
+</li><li>
+Draw ’Test Text’ with font FreeSerif of size 24 at position x=100
+and y=50 (counting from the top-left corner of the screen), text is
+yellow with a red box around it. Both the text and the box have an
+opacity of 20%.
+
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>Note that the double quotes are not necessary if spaces are not used
+within the parameter list.
+</p>
+</li><li>
+Show the text at the center of the video frame:
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
+</pre></td></tr></table>
+
+</li><li>
+Show a text line sliding from right to left in the last row of the video
+frame. The file ‘<tt>LONG_LINE</tt>’ is assumed to contain a single line
+with no newlines.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
+</pre></td></tr></table>
+
+</li><li>
+Show the content of file ‘<tt>CREDITS</tt>’ off the bottom of the frame and scroll up.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
+</pre></td></tr></table>
+
+</li><li>
+Draw a single green letter "g", at the center of the input video.
+The glyph baseline is placed at half screen height.
+<table><tr><td> </td><td><pre class="example">drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
+</pre></td></tr></table>
+
+</li><li>
+Show text for 1 second every 3 seconds:
+<table><tr><td> </td><td><pre class="example">drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
+</pre></td></tr></table>
+
+</li><li>
+Use fontconfig to set the font. Note that the colons need to be escaped.
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
+</pre></td></tr></table>
+
+</li><li>
+Print the date of a real-time encoding (see strftime(3)):
+<table><tr><td> </td><td><pre class="example">drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
+</pre></td></tr></table>
+
+</li></ul>
+
+<p>For more information about libfreetype, check:
+<a href="http://www.freetype.org/">http://www.freetype.org/</a>.
+</p>
+<p>For more information about fontconfig, check:
+<a href="http://freedesktop.org/software/fontconfig/fontconfig-user.html">http://freedesktop.org/software/fontconfig/fontconfig-user.html</a>.
+</p>
+<a name="edgedetect"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-edgedetect">30.24 edgedetect</a></h2>
+
+<p>Detect and draw edges. The filter uses the Canny Edge Detection algorithm.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low</samp>’</dt>
+<dt> ‘<samp>high</samp>’</dt>
+<dd><p>Set low and high threshold values used by the Canny thresholding
+algorithm.
+</p>
+<p>The high threshold selects the "strong" edge pixels, which are then
+connected through 8-connectivity with the "weak" edge pixels selected
+by the low threshold.
+</p>
+<p><var>low</var> and <var>high</var> threshold values must be chosen in the range
+[0,1], and <var>low</var> should be lesser or equal to <var>high</var>.
+</p>
+<p>Default value for <var>low</var> is <code>20/255</code>, and default value for <var>high</var>
+is <code>50/255</code>.
+</p></dd>
+</dl>
+
+<p>Example:
+</p><table><tr><td> </td><td><pre class="example">edgedetect=low=0.1:high=0.4
+</pre></td></tr></table>
+
+<a name="extractplanes"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-extractplanes">30.25 extractplanes</a></h2>
+
+<p>Extract color channel components from input video stream into
+separate grayscale video streams.
+</p>
+<p>The filter accepts the following option:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>planes</samp>’</dt>
+<dd><p>Set plane(s) to extract.
+</p>
+<p>Available values for planes are:
+</p><dl compact="compact">
+<dt> ‘<samp>y</samp>’</dt>
+<dt> ‘<samp>u</samp>’</dt>
+<dt> ‘<samp>v</samp>’</dt>
+<dt> ‘<samp>a</samp>’</dt>
+<dt> ‘<samp>r</samp>’</dt>
+<dt> ‘<samp>g</samp>’</dt>
+<dt> ‘<samp>b</samp>’</dt>
+</dl>
+
+<p>Choosing planes not available in the input will result in an error.
+That means you cannot select <code>r</code>, <code>g</code>, <code>b</code> planes
+with <code>y</code>, <code>u</code>, <code>v</code> planes at same time.
+</p></dd>
+</dl>
+
+<a name="Examples-16"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-16">30.25.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract luma, u and v color channel component from input video frame
+into 3 grayscale outputs:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
+</pre></td></tr></table>
+</li></ul>
+
+<a name="elbg"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-elbg">30.26 elbg</a></h2>
+
+<p>Apply a posterize effect using the ELBG (Enhanced LBG) algorithm.
+</p>
+<p>For each input image, the filter will compute the optimal mapping from
+the input to the output given the codebook length, that is the number
+of distinct output colors.
+</p>
+<p>This filter accepts the following options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>codebook_length, l</samp>’</dt>
+<dd><p>Set codebook length. The value must be a positive integer, and
+represents the number of distinct output colors. Default value is 256.
+</p>
+</dd>
+<dt> ‘<samp>nb_steps, n</samp>’</dt>
+<dd><p>Set the maximum number of iterations to apply for computing the optimal
+mapping. The higher the value the better the result and the higher the
+computation time. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>seed, s</samp>’</dt>
+<dd><p>Set a random seed, 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.
+</p></dd>
+</dl>
+
+<a name="fade"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-fade">30.27 fade</a></h2>
+
+<p>Apply fade-in/out effect to input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type, t</samp>’</dt>
+<dd><p>The effect type – can be either "in" for fade-in, or "out" for a fade-out
+effect.
+Default is <code>in</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_frame, s</samp>’</dt>
+<dd><p>Specify the number of the start frame for starting to apply the fade
+effect. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames, n</samp>’</dt>
+<dd><p>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 filled with the
+selected ‘<samp>color</samp>’.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>alpha</samp>’</dt>
+<dd><p>If set to 1, fade only alpha channel, if one exists on the input.
+Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>start_time, st</samp>’</dt>
+<dd><p>Specify the timestamp (in seconds) of the frame to start to apply the fade
+effect. If both start_frame and start_time are specified, the fade will start at
+whichever comes last. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>The number of seconds 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 filled with the
+selected ‘<samp>color</samp>’.
+If both duration and nb_frames are specified, duration is used. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the fade. Default is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-43"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-43">30.27.1 Examples</a></h3>
+
+<ul>
+<li>
+Fade in first 30 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:30
+</pre></td></tr></table>
+
+<p>The command above is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">fade=t=in:s=0:n=30
+</pre></td></tr></table>
+
+</li><li>
+Fade out last 45 frames of a 200-frame video:
+<table><tr><td> </td><td><pre class="example">fade=out:155:45
+fade=type=out:start_frame=155:nb_frames=45
+</pre></td></tr></table>
+
+</li><li>
+Fade in first 25 frames and fade out last 25 frames of a 1000-frame video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25, fade=out:975:25
+</pre></td></tr></table>
+
+</li><li>
+Make first 5 frames yellow, then fade in from frame 5-24:
+<table><tr><td> </td><td><pre class="example">fade=in:5:20:color=yellow
+</pre></td></tr></table>
+
+</li><li>
+Fade in alpha over first 25 frames of video:
+<table><tr><td> </td><td><pre class="example">fade=in:0:25:alpha=1
+</pre></td></tr></table>
+
+</li><li>
+Make first 5.5 seconds black, then fade in for 0.5 seconds:
+<table><tr><td> </td><td><pre class="example">fade=t=in:st=5.5:d=0.5
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="field"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-field">30.28 field</a></h2>
+
+<p>Extract a single field from an interlaced image using stride
+arithmetic to avoid wasting CPU time. The output frames are marked as
+non-interlaced.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>Specify whether to extract the top (if the value is <code>0</code> or
+<code>top</code>) or the bottom field (if the value is <code>1</code> or
+<code>bottom</code>).
+</p></dd>
+</dl>
+
+<a name="fieldmatch"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-fieldmatch">30.29 fieldmatch</a></h2>
+
+<p>Field matching filter for inverse telecine. It is meant to reconstruct the
+progressive frames from a telecined stream. The filter does not drop duplicated
+frames, so to achieve a complete inverse telecine <code>fieldmatch</code> needs to be
+followed by a decimation filter such as <a href="#decimate">decimate</a> in the filtergraph.
+</p>
+<p>The separation of the field matching and the decimation is notably motivated by
+the possibility of inserting a de-interlacing filter fallback between the two.
+If the source has mixed telecined and real interlaced content,
+<code>fieldmatch</code> will not be able to match fields for the interlaced parts.
+But these remaining combed frames will be marked as interlaced, and thus can be
+de-interlaced by a later filter such as <a href="#yadif">yadif</a> before decimation.
+</p>
+<p>In addition to the various configuration options, <code>fieldmatch</code> can take an
+optional second stream, activated through the ‘<samp>ppsrc</samp>’ option. If
+enabled, the frames reconstruction will be based on the fields and frames from
+this second stream. This allows the first input to be pre-processed in order to
+help the various algorithms of the filter, while keeping the output lossless
+(assuming the fields are matched properly). Typically, a field-aware denoiser,
+or brightness/contrast adjustments can help.
+</p>
+<p>Note that this filter uses the same algorithms as TIVTC/TFM (AviSynth project)
+and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from
+which <code>fieldmatch</code> is based on. While the semantic and usage are very
+close, some behaviour and options names can differ.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Specify the assumed field order of the input stream. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Auto detect parity (use FFmpeg’s internal parity value).
+</p></dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Assume bottom field first.
+</p></dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Assume top field first.
+</p></dd>
+</dl>
+
+<p>Note that it is sometimes recommended not to trust the parity announced by the
+stream.
+</p>
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the matching mode or strategy to use. ‘<samp>pc</samp>’ mode is the safest in the
+sense that it won’t risk creating jerkiness due to duplicate frames when
+possible, but if there are bad edits or blended fields it will end up
+outputting combed frames when a good match might actually exist. On the other
+hand, ‘<samp>pcn_ub</samp>’ mode is the most risky in terms of creating jerkiness,
+but will almost always find a good frame if there is one. The other values are
+all somewhere in between ‘<samp>pc</samp>’ and ‘<samp>pcn_ub</samp>’ in terms of risking
+jerkiness and creating duplicate frames versus finding good matches in sections
+with bad edits, orphaned fields, blended fields, etc.
+</p>
+<p>More details about p/c/n/u/b are available in <a href="#p_002fc_002fn_002fu_002fb-meaning">p/c/n/u/b meaning</a> section.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>pc</samp>’</dt>
+<dd><p>2-way matching (p/c)
+</p></dd>
+<dt> ‘<samp>pc_n</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match if still combed (p/c + n)
+</p></dd>
+<dt> ‘<samp>pc_u</samp>’</dt>
+<dd><p>2-way matching, and trying 3rd match (same order) if still combed (p/c + u)
+</p></dd>
+<dt> ‘<samp>pc_n_ub</samp>’</dt>
+<dd><p>2-way matching, trying 3rd match if still combed, and trying 4th/5th matches if
+still combed (p/c + n + u/b)
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>3-way matching (p/c/n)
+</p></dd>
+<dt> ‘<samp>pcn_ub</samp>’</dt>
+<dd><p>3-way matching, and trying 4th/5th matches if all 3 of the original matches are
+detected as combed (p/c/n + u/b)
+</p></dd>
+</dl>
+
+<p>The parenthesis at the end indicate the matches that would be used for that
+mode assuming ‘<samp>order</samp>’=<var>tff</var> (and ‘<samp>field</samp>’ on <var>auto</var> or
+<var>top</var>).
+</p>
+<p>In terms of speed ‘<samp>pc</samp>’ mode is by far the fastest and ‘<samp>pcn_ub</samp>’ is
+the slowest.
+</p>
+<p>Default value is <var>pc_n</var>.
+</p>
+</dd>
+<dt> ‘<samp>ppsrc</samp>’</dt>
+<dd><p>Mark the main input stream as a pre-processed input, and enable the secondary
+input stream as the clean source to pick the fields from. See the filter
+introduction for more details. It is similar to the ‘<samp>clip2</samp>’ feature from
+VFM/TFM.
+</p>
+<p>Default value is <code>0</code> (disabled).
+</p>
+</dd>
+<dt> ‘<samp>field</samp>’</dt>
+<dd><p>Set the field to match from. It is recommended to set this to the same value as
+‘<samp>order</samp>’ unless you experience matching failures with that setting. In
+certain circumstances changing the field that is used to match from can have a
+large impact on matching performance. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Automatic (same value as ‘<samp>order</samp>’).
+</p></dd>
+<dt> ‘<samp>bottom</samp>’</dt>
+<dd><p>Match from the bottom field.
+</p></dd>
+<dt> ‘<samp>top</samp>’</dt>
+<dd><p>Match from the top field.
+</p></dd>
+</dl>
+
+<p>Default value is <var>auto</var>.
+</p>
+</dd>
+<dt> ‘<samp>mchroma</samp>’</dt>
+<dd><p>Set whether or not chroma is included during the match comparisons. In most
+cases it is recommended to leave this enabled. You should set this to <code>0</code>
+only if your clip has bad chroma problems such as heavy rainbowing or other
+artifacts. Setting this to <code>0</code> could also be used to speed things up at
+the cost of some accuracy.
+</p>
+<p>Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dd><p>These define an exclusion band which excludes the lines between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ from being included in the field matching decision. An exclusion
+band can be used to ignore subtitles, a logo, or other things that may
+interfere with the matching. ‘<samp>y0</samp>’ sets the starting scan line and
+‘<samp>y1</samp>’ sets the ending line; all lines in between ‘<samp>y0</samp>’ and
+‘<samp>y1</samp>’ (including ‘<samp>y0</samp>’ and ‘<samp>y1</samp>’) will be ignored. Setting
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ to the same value will disable the feature.
+‘<samp>y0</samp>’ and ‘<samp>y1</samp>’ defaults to <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>scthresh</samp>’</dt>
+<dd><p>Set the scene change detection threshold as a percentage of maximum change on
+the luma plane. Good values are in the <code>[8.0, 14.0]</code> range. Scene change
+detection is only relevant in case ‘<samp>combmatch</samp>’=<var>sc</var>. The range for
+‘<samp>scthresh</samp>’ is <code>[0.0, 100.0]</code>.
+</p>
+<p>Default value is <code>12.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>combmatch</samp>’</dt>
+<dd><p>When ‘<samp>combatch</samp>’ is not <var>none</var>, <code>fieldmatch</code> will take into
+account the combed scores of matches when deciding what match to use as the
+final match. Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No final matching based on combed scores.
+</p></dd>
+<dt> ‘<samp>sc</samp>’</dt>
+<dd><p>Combed scores are only used when a scene change is detected.
+</p></dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Use combed scores all the time.
+</p></dd>
+</dl>
+
+<p>Default is <var>sc</var>.
+</p>
+</dd>
+<dt> ‘<samp>combdbg</samp>’</dt>
+<dd><p>Force <code>fieldmatch</code> to calculate the combed metrics for certain matches and
+print them. This setting is known as ‘<samp>micout</samp>’ in TFM/VFM vocabulary.
+Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No forced calculation.
+</p></dd>
+<dt> ‘<samp>pcn</samp>’</dt>
+<dd><p>Force p/c/n calculations.
+</p></dd>
+<dt> ‘<samp>pcnub</samp>’</dt>
+<dd><p>Force p/c/n/u/b calculations.
+</p></dd>
+</dl>
+
+<p>Default value is <var>none</var>.
+</p>
+</dd>
+<dt> ‘<samp>cthresh</samp>’</dt>
+<dd><p>This is the area combing threshold used for combed frame detection. This
+essentially controls how "strong" or "visible" combing must be to be detected.
+Larger values mean combing must be more visible and smaller values mean combing
+can be less visible or strong and still be detected. Valid settings are from
+<code>-1</code> (every pixel will be detected as combed) to <code>255</code> (no pixel will
+be detected as combed). This is basically a pixel difference value. A good
+range is <code>[8, 12]</code>.
+</p>
+<p>Default value is <code>9</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma</samp>’</dt>
+<dd><p>Sets whether or not chroma is considered in the combed frame decision. Only
+disable this if your source has chroma problems (rainbowing, etc.) that are
+causing problems for the combed frame detection with chroma enabled. Actually,
+using ‘<samp>chroma</samp>’=<var>0</var> is usually more reliable, except for the case
+where there is chroma only combing in the source.
+</p>
+<p>Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>blockx</samp>’</dt>
+<dt> ‘<samp>blocky</samp>’</dt>
+<dd><p>Respectively set the x-axis and y-axis size of the window used during combed
+frame detection. This has to do with the size of the area in which
+‘<samp>combpel</samp>’ pixels are required to be detected as combed for a frame to be
+declared combed. See the ‘<samp>combpel</samp>’ parameter description for more info.
+Possible values are any number that is a power of 2 starting at 4 and going up
+to 512.
+</p>
+<p>Default value is <code>16</code>.
+</p>
+</dd>
+<dt> ‘<samp>combpel</samp>’</dt>
+<dd><p>The number of combed pixels inside any of the ‘<samp>blocky</samp>’ by
+‘<samp>blockx</samp>’ size blocks on the frame for the frame to be detected as
+combed. While ‘<samp>cthresh</samp>’ controls how "visible" the combing must be, this
+setting controls "how much" combing there must be in any localized area (a
+window defined by the ‘<samp>blockx</samp>’ and ‘<samp>blocky</samp>’ settings) on the
+frame. Minimum value is <code>0</code> and maximum is <code>blocky x blockx</code> (at
+which point no frames will ever be detected as combed). This setting is known
+as ‘<samp>MI</samp>’ in TFM/VFM vocabulary.
+</p>
+<p>Default value is <code>80</code>.
+</p></dd>
+</dl>
+
+<p><a name="p_002fc_002fn_002fu_002fb-meaning"></a>
+</p><a name="p_002fc_002fn_002fu_002fb-meaning-1"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-p_002fc_002fn_002fu_002fb-meaning-1">30.29.1 p/c/n/u/b meaning</a></h3>
+
+<a name="p_002fc_002fn"></a>
+<h4 class="subsubsection"><a href="ffprobe-all.html#toc-p_002fc_002fn">30.29.1.1 p/c/n</a></h4>
+
+<p>We assume the following telecined stream:
+</p>
+<table><tr><td> </td><td><pre class="example">Top fields: 1 2 2 3 4
+Bottom fields: 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>The numbers correspond to the progressive frame the fields relate to. Here, the
+first two frames are progressive, the 3rd and 4th are combed, and so on.
+</p>
+<p>When <code>fieldmatch</code> is configured to run a matching from bottom
+(‘<samp>field</samp>’=<var>bottom</var>) this is how this input stream get transformed:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4
+ B 1 2 3 4 4 <-- matching reference
+
+Matches: c c n n c
+
+Output stream:
+ T 1 2 3 4 4
+ B 1 2 3 4 4
+</pre></td></tr></table>
+
+<p>As a result of the field matching, we can see that some frames get duplicated.
+To perform a complete inverse telecine, you need to rely on a decimation filter
+after this operation. See for instance the <a href="#decimate">decimate</a> filter.
+</p>
+<p>The same operation now matching from top fields (‘<samp>field</samp>’=<var>top</var>)
+looks like this:
+</p>
+<table><tr><td> </td><td><pre class="example">Input stream:
+ T 1 2 2 3 4 <-- matching reference
+ B 1 2 3 4 4
+
+Matches: c c p p c
+
+Output stream:
+ T 1 2 2 3 4
+ B 1 2 2 3 4
+</pre></td></tr></table>
+
+<p>In these examples, we can see what <var>p</var>, <var>c</var> and <var>n</var> mean;
+basically, they refer to the frame and field of the opposite parity:
+</p>
+<ul>
+<li> <var>p</var> matches the field of the opposite parity in the previous frame
+</li><li> <var>c</var> matches the field of the opposite parity in the current frame
+</li><li> <var>n</var> matches the field of the opposite parity in the next frame
+</li></ul>
+
+<a name="u_002fb"></a>
+<h4 class="subsubsection"><a href="ffprobe-all.html#toc-u_002fb">30.29.1.2 u/b</a></h4>
+
+<p>The <var>u</var> and <var>b</var> matching are a bit special in the sense that they match
+from the opposite parity flag. In the following examples, we assume that we are
+currently matching the 2nd frame (Top:2, bottom:2). According to the match, a
+’x’ is placed above and below each matched fields.
+</p>
+<p>With bottom matching (‘<samp>field</samp>’=<var>bottom</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 1 2 2 2
+ 2 2 2 1 3
+</pre></td></tr></table>
+
+<p>With top matching (‘<samp>field</samp>’=<var>top</var>):
+</p><table><tr><td> </td><td><pre class="example">Match: c p n b u
+
+ x x x x x
+ Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
+ Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
+ x x x x x
+
+Output frames:
+ 2 2 2 1 2
+ 2 1 3 2 2
+</pre></td></tr></table>
+
+<a name="Examples-66"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-66">30.29.2 Examples</a></h3>
+
+<p>Simple IVTC of a top field first telecined stream:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=none, decimate
+</pre></td></tr></table>
+
+<p>Advanced IVTC, with fallback on <a href="#yadif">yadif</a> for still combed frames:
+</p><table><tr><td> </td><td><pre class="example">fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
+</pre></td></tr></table>
+
+<a name="fieldorder"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-fieldorder">30.30 fieldorder</a></h2>
+
+<p>Transform the field order of the input video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Output field order. Valid values are <var>tff</var> for top field first or <var>bff</var>
+for bottom field first.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>tff</samp>’.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter is very useful when converting to or from PAL DV material,
+which is bottom field first.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
+</pre></td></tr></table>
+
+<a name="fifo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-fifo">30.31 fifo</a></h2>
+
+<p>Buffer input images and send them when they are requested.
+</p>
+<p>This filter is mainly useful when auto-inserted by the libavfilter
+framework.
+</p>
+<p>The filter does not take parameters.
+</p>
+<p><a name="format"></a>
+</p><a name="format-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-format-1">30.32 format</a></h2>
+
+<p>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.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-59"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-59">30.32.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert the input video to the format <var>yuv420p</var>
+<table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p
+</pre></td></tr></table>
+
+<p>Convert the input video to any of the formats in the list
+</p><table><tr><td> </td><td><pre class="example">format=pix_fmts=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="fps"></a>
+</p><a name="fps-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-fps-1">30.33 fps</a></h2>
+
+<p>Convert the video to specified constant frame rate by duplicating or dropping
+frames as necessary.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>fps</samp>’</dt>
+<dd><p>Desired output frame rate. The default is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>round</samp>’</dt>
+<dd><p>Rounding method.
+</p>
+<p>Possible values are:
+</p><dl compact="compact">
+<dt> ‘<samp>zero</samp>’</dt>
+<dd><p>zero round towards 0
+</p></dd>
+<dt> ‘<samp>inf</samp>’</dt>
+<dd><p>round away from 0
+</p></dd>
+<dt> ‘<samp>down</samp>’</dt>
+<dd><p>round towards -infinity
+</p></dd>
+<dt> ‘<samp>up</samp>’</dt>
+<dd><p>round towards +infinity
+</p></dd>
+<dt> ‘<samp>near</samp>’</dt>
+<dd><p>round to nearest
+</p></dd>
+</dl>
+<p>The default is <code>near</code>.
+</p>
+</dd>
+<dt> ‘<samp>start_time</samp>’</dt>
+<dd><p>Assume the first PTS should be the given value, in seconds. This allows for
+padding/trimming at the start of stream. By default, no assumption is made
+about the first frame’s expected PTS, so no padding or trimming is done.
+For example, this could be set to 0 to pad the beginning with duplicates of
+the first frame if a video stream starts after the audio stream or to trim any
+frames with a negative PTS.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>fps</var>[:<var>round</var>].
+</p>
+<p>See also the <a href="#setpts">setpts</a> filter.
+</p>
+<a name="Examples-74"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-74">30.33.1 Examples</a></h3>
+
+<ul>
+<li>
+A typical usage in order to set the fps to 25:
+<table><tr><td> </td><td><pre class="example">fps=fps=25
+</pre></td></tr></table>
+
+</li><li>
+Sets the fps to 24, using abbreviation and rounding method to round to nearest:
+<table><tr><td> </td><td><pre class="example">fps=fps=film:round=near
+</pre></td></tr></table>
+</li></ul>
+
+<a name="framepack"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-framepack">30.34 framepack</a></h2>
+
+<p>Pack two different video streams into a stereoscopic video, setting proper
+metadata on supported codecs. The two views should have the same size and
+framerate and processing will stop when the shorter video ends. Please note
+that you may conveniently adjust view properties with the <a href="#scale">scale</a> and
+<a href="#fps">fps</a> filters.
+</p>
+<p>This filter accepts the following named parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Desired packing format. Supported values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sbs</samp>’</dt>
+<dd><p>Views are next to each other (default).
+</p>
+</dd>
+<dt> ‘<samp>tab</samp>’</dt>
+<dd><p>Views are on top of each other.
+</p>
+</dd>
+<dt> ‘<samp>lines</samp>’</dt>
+<dd><p>Views are packed by line.
+</p>
+</dd>
+<dt> ‘<samp>columns</samp>’</dt>
+<dd><p>Views are eacked by column.
+</p>
+</dd>
+<dt> ‘<samp>frameseq</samp>’</dt>
+<dd><p>Views are temporally interleaved.
+</p>
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<p>Some examples follow:
+</p>
+<table><tr><td> </td><td><pre class="example"># Convert left and right views into a frame sequential video.
+ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT
+
+# Convert views into a side-by-side video with the same output resolution as the input.
+ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
+</pre></td></tr></table>
+
+<a name="framestep"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-framestep">30.35 framestep</a></h2>
+
+<p>Select one frame every N-th frame.
+</p>
+<p>This filter accepts the following option:
+</p><dl compact="compact">
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Select frame after every <code>step</code> frames.
+Allowed values are positive integers higher than 0. Default value is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><a name="frei0r"></a>
+</p><a name="frei0r-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-frei0r-1">30.36 frei0r</a></h2>
+
+<p>Apply a frei0r effect to the input video.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r effect to load. If the environment variable
+<code>FREI0R_PATH</code> is defined, the frei0r effect is searched in each one of the
+directories specified by the colon separated list in <code>FREIOR_PATH</code>,
+otherwise in the standard frei0r paths, which are in this order:
+‘<tt>HOME/.frei0r-1/lib/</tt>’, ‘<tt>/usr/local/lib/frei0r-1/</tt>’,
+‘<tt>/usr/lib/frei0r-1/</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r effect.
+</p>
+</dd>
+</dl>
+
+<p>A frei0r effect parameter can be a boolean (whose values are specified
+with "y" and "n"), a double, a color (specified by the syntax
+<var>R</var>/<var>G</var>/<var>B</var>, (<var>R</var>, <var>G</var>, and <var>B</var> being float
+numbers from 0.0 to 1.0) or by a color description specified in the "Color"
+section in the ffmpeg-utils manual), a position (specified by the syntax <var>X</var>/<var>Y</var>,
+<var>X</var> and <var>Y</var> being float numbers) and a string.
+</p>
+<p>The number and kind of parameters depend on the loaded effect. If an
+effect parameter is not specified the default value is set.
+</p>
+<a name="Examples-68"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-68">30.36.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the distort0r effect, set the first two double parameters:
+<table><tr><td> </td><td><pre class="example">frei0r=filter_name=distort0r:filter_params=0.5|0.01
+</pre></td></tr></table>
+
+</li><li>
+Apply the colordistance effect, take a color as first parameter:
+<table><tr><td> </td><td><pre class="example">frei0r=colordistance:0.2/0.3/0.4
+frei0r=colordistance:violet
+frei0r=colordistance:0x112233
+</pre></td></tr></table>
+
+</li><li>
+Apply the perspective effect, specify the top left and top right image
+positions:
+<table><tr><td> </td><td><pre class="example">frei0r=perspective:0.2/0.2|0.8/0.2
+</pre></td></tr></table>
+</li></ul>
+
+<p>For more information see:
+<a href="http://frei0r.dyne.org">http://frei0r.dyne.org</a>
+</p>
+<a name="geq"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-geq">30.37 geq</a></h2>
+
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>lum_expr, lum</samp>’</dt>
+<dd><p>Set the luminance expression.
+</p></dd>
+<dt> ‘<samp>cb_expr, cb</samp>’</dt>
+<dd><p>Set the chrominance blue expression.
+</p></dd>
+<dt> ‘<samp>cr_expr, cr</samp>’</dt>
+<dd><p>Set the chrominance red expression.
+</p></dd>
+<dt> ‘<samp>alpha_expr, a</samp>’</dt>
+<dd><p>Set the alpha expression.
+</p></dd>
+<dt> ‘<samp>red_expr, r</samp>’</dt>
+<dd><p>Set the red expression.
+</p></dd>
+<dt> ‘<samp>green_expr, g</samp>’</dt>
+<dd><p>Set the green expression.
+</p></dd>
+<dt> ‘<samp>blue_expr, b</samp>’</dt>
+<dd><p>Set the blue expression.
+</p></dd>
+</dl>
+
+<p>The colorspace is selected according to the specified options. If one
+of the ‘<samp>lum_expr</samp>’, ‘<samp>cb_expr</samp>’, or ‘<samp>cr_expr</samp>’
+options is specified, the filter will automatically select a YCbCr
+colorspace. If one of the ‘<samp>red_expr</samp>’, ‘<samp>green_expr</samp>’, or
+‘<samp>blue_expr</samp>’ options is specified, it will select an RGB
+colorspace.
+</p>
+<p>If one of the chrominance expression is not defined, it falls back on the other
+one. If no alpha expression is specified it will evaluate to opaque value.
+If none of chrominance expressions are specified, they will evaluate
+to the luminance expression.
+</p>
+<p>The expressions can use the following variables and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>The sequential number of the filtered frame, starting from <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>X</samp>’</dt>
+<dt> ‘<samp>Y</samp>’</dt>
+<dd><p>The coordinates of the current sample.
+</p>
+</dd>
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>The width and height of the image.
+</p>
+</dd>
+<dt> ‘<samp>SW</samp>’</dt>
+<dt> ‘<samp>SH</samp>’</dt>
+<dd><p>Width and height scale depending on the currently filtered plane. It is the
+ratio between the corresponding luma plane number of pixels and the current
+plane ones. E.g. for YUV4:2:0 the values are <code>1,1</code> for the luma plane, and
+<code>0.5,0.5</code> for chroma planes.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Time of the current frame, expressed in seconds.
+</p>
+</dd>
+<dt> ‘<samp>p(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the current
+plane.
+</p>
+</dd>
+<dt> ‘<samp>lum(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the luminance
+plane.
+</p>
+</dd>
+<dt> ‘<samp>cb(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+blue-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>cr(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red-difference chroma plane. Return 0 if there is no such plane.
+</p>
+</dd>
+<dt> ‘<samp>r(x, y)</samp>’</dt>
+<dt> ‘<samp>g(x, y)</samp>’</dt>
+<dt> ‘<samp>b(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the
+red/green/blue component. Return 0 if there is no such component.
+</p>
+</dd>
+<dt> ‘<samp>alpha(x, y)</samp>’</dt>
+<dd><p>Return the value of the pixel at location (<var>x</var>,<var>y</var>) of the alpha
+plane. Return 0 if there is no such plane.
+</p></dd>
+</dl>
+
+<p>For functions, if <var>x</var> and <var>y</var> are outside the area, the value will be
+automatically clipped to the closer edge.
+</p>
+<a name="Examples-17"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-17">30.37.1 Examples</a></h3>
+
+<ul>
+<li>
+Flip the image horizontally:
+<table><tr><td> </td><td><pre class="example">geq=p(W-X\,Y)
+</pre></td></tr></table>
+
+</li><li>
+Generate a bidimensional sine wave, with angle <code>PI/3</code> and a
+wavelength of 100 pixels:
+<table><tr><td> </td><td><pre class="example">geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a fancy enigmatic moving light:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
+</pre></td></tr></table>
+
+</li><li>
+Generate a quick emboss effect:
+<table><tr><td> </td><td><pre class="example">format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
+</pre></td></tr></table>
+
+</li><li>
+Modify RGB components depending on pixel position:
+<table><tr><td> </td><td><pre class="example">geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="gradfun"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-gradfun">30.38 gradfun</a></h2>
+
+<p>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.
+</p>
+<p>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.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>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
+64, default value is 1.2, out-of-range values will be clipped to the valid
+range.
+</p>
+</dd>
+<dt> ‘<samp>radius</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+</dl>
+
+<p>Alternatively, the options can be specified as a flat string:
+<var>strength</var>[:<var>radius</var>]
+</p>
+<a name="Examples-33"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-33">30.38.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply the filter with a <code>3.5</code> strength and radius of <code>8</code>:
+<table><tr><td> </td><td><pre class="example">gradfun=3.5:8
+</pre></td></tr></table>
+
+</li><li>
+Specify radius, omitting the strength (which will fall-back to the default
+value):
+<table><tr><td> </td><td><pre class="example">gradfun=radius=8
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="haldclut"></a>
+</p><a name="haldclut-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-haldclut-1">30.39 haldclut</a></h2>
+
+<p>Apply a Hald CLUT to a video stream.
+</p>
+<p>First input is the video stream to process, and second one is the Hald CLUT.
+The Hald CLUT input can be a simple picture or a complete video stream.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>Force termination when the shortest input terminates. Default is <code>0</code>.
+</p></dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>Continue applying the last CLUT after the end of the stream. A value of
+<code>0</code> disable the filter after the last frame of the CLUT is reached.
+Default is <code>1</code>.
+</p></dd>
+</dl>
+
+<p><code>haldclut</code> also has the same interpolation options as <a href="#lut3d">lut3d</a> (both
+filters share the same internals).
+</p>
+<p>More information about the Hald CLUT can be found on Eskil Steenberg’s website
+(Hald CLUT author) at <a href="http://www.quelsolaar.com/technology/clut.html">http://www.quelsolaar.com/technology/clut.html</a>.
+</p>
+<a name="Workflow-examples"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Workflow-examples">30.39.1 Workflow examples</a></h3>
+
+<a name="Hald-CLUT-video-stream"></a>
+<h4 class="subsubsection"><a href="ffprobe-all.html#toc-Hald-CLUT-video-stream">30.39.1.1 Hald CLUT video stream</a></h4>
+
+<p>Generate an identity Hald CLUT stream altered with various effects:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
+</pre></td></tr></table>
+
+<p>Note: make sure you use a lossless codec.
+</p>
+<p>Then use it with <code>haldclut</code> to apply it on some random stream:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
+</pre></td></tr></table>
+
+<p>The Hald CLUT will be applied to the 10 first seconds (duration of
+‘<tt>clut.nut</tt>’), then the latest picture of that CLUT stream will be applied
+to the remaining frames of the <code>mandelbrot</code> stream.
+</p>
+<a name="Hald-CLUT-with-preview"></a>
+<h4 class="subsubsection"><a href="ffprobe-all.html#toc-Hald-CLUT-with-preview">30.39.1.2 Hald CLUT with preview</a></h4>
+
+<p>A Hald CLUT is supposed to be a squared image of <code>Level*Level*Level</code> by
+<code>Level*Level*Level</code> pixels. For a given Hald CLUT, FFmpeg will select the
+biggest possible square starting at the top left of the picture. The remaining
+padding pixels (bottom or right) will be ignored. This area can be used to add
+a preview of the Hald CLUT.
+</p>
+<p>Typically, the following generated Hald CLUT will be supported by the
+<code>haldclut</code> filter:
+</p>
+<table><tr><td> </td><td><pre class="example">ffmpeg -f lavfi -i <a href="#haldclutsrc">haldclutsrc</a>=8 -vf "
+ pad=iw+320 [padded_clut];
+ smptebars=s=320x256, split [a][b];
+ [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
+ [main][b] overlay=W-320" -frames:v 1 clut.png
+</pre></td></tr></table>
+
+<p>It contains the original and a preview of the effect of the CLUT: SMPTE color
+bars are displayed on the right-top, and below the same color bars processed by
+the color changes.
+</p>
+<p>Then, the effect of this Hald CLUT can be visualized with:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
+</pre></td></tr></table>
+
+<a name="hflip"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-hflip">30.40 hflip</a></h2>
+
+<p>Flip the input video horizontally.
+</p>
+<p>For example to horizontally flip the input video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "hflip" out.avi
+</pre></td></tr></table>
+
+<a name="histeq"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-histeq">30.41 histeq</a></h2>
+<p>This filter applies a global color histogram equalization on a
+per-frame basis.
+</p>
+<p>It can be used to correct video that has a compressed range of pixel
+intensities. The filter redistributes the pixel intensities to
+equalize their distribution across the intensity range. It may be
+viewed as an "automatically adjusting contrast filter". This filter is
+useful only for correcting degraded or poorly captured source
+video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>strength</samp>’</dt>
+<dd><p>Determine the amount of equalization to be applied. As the strength
+is reduced, the distribution of pixel intensities more-and-more
+approaches that of the input frame. The value must be a float number
+in the range [0,1] and defaults to 0.200.
+</p>
+</dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>Set the maximum intensity that can generated and scale the output
+values appropriately. The strength should be set as desired and then
+the intensity can be limited if needed to avoid washing-out. The value
+must be a float number in the range [0,1] and defaults to 0.210.
+</p>
+</dd>
+<dt> ‘<samp>antibanding</samp>’</dt>
+<dd><p>Set the antibanding level. If enabled the filter will randomly vary
+the luminance of output pixels by a small amount to avoid banding of
+the histogram. Possible values are <code>none</code>, <code>weak</code> or
+<code>strong</code>. It defaults to <code>none</code>.
+</p></dd>
+</dl>
+
+<a name="histogram"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-histogram">30.42 histogram</a></h2>
+
+<p>Compute and draw a color distribution histogram for the input video.
+</p>
+<p>The computed histogram is a representation of the color component
+distribution in an image.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set histogram mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>levels</samp>’</dt>
+<dd><p>Standard histogram that displays the color components distribution in an
+image. Displays color graph for each color component. Shows distribution of
+the Y, U, V, A or R, G, B components, depending on input format, in the
+current frame. Below each graph a color component scale meter is shown.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Displays chroma values (U/V color placement) in a two dimensional
+graph (which is called a vectorscope). The brighter a pixel in the
+vectorscope, the more pixels of the input frame correspond to that pixel
+(i.e., more pixels have this chroma value). The V component is displayed on
+the horizontal (X) axis, with the leftmost side being V = 0 and the rightmost
+side being V = 255. The U component is displayed on the vertical (Y) axis,
+with the top representing U = 0 and the bottom representing U = 255.
+</p>
+<p>The position of a white pixel in the graph corresponds to the chroma value of
+a pixel of the input clip. The graph can therefore be used to read the hue
+(color flavor) and the saturation (the dominance of the hue in the color). As
+the hue of a color changes, it moves around the square. At the center of the
+square the saturation is zero, which means that the corresponding pixel has no
+color. If the amount of a specific color is increased (while leaving the other
+colors unchanged) the saturation increases, and the indicator moves towards
+the edge of the square.
+</p>
+</dd>
+<dt> ‘<samp>color2</samp>’</dt>
+<dd><p>Chroma values in vectorscope, similar as <code>color</code> but actual chroma values
+are displayed.
+</p>
+</dd>
+<dt> ‘<samp>waveform</samp>’</dt>
+<dd><p>Per row/column color component graph. In row mode, the graph on the left side
+represents color component value 0 and the right side represents value = 255.
+In column mode, the top side represents color component value = 0 and bottom
+side represents value = 255.
+</p></dd>
+</dl>
+<p>Default value is <code>levels</code>.
+</p>
+</dd>
+<dt> ‘<samp>level_height</samp>’</dt>
+<dd><p>Set height of level in <code>levels</code>. Default value is <code>200</code>.
+Allowed range is [50, 2048].
+</p>
+</dd>
+<dt> ‘<samp>scale_height</samp>’</dt>
+<dd><p>Set height of color scale in <code>levels</code>. Default value is <code>12</code>.
+Allowed range is [0, 40].
+</p>
+</dd>
+<dt> ‘<samp>step</samp>’</dt>
+<dd><p>Set step for <code>waveform</code> mode. Smaller values are useful to find out how
+many values of the same luminance are distributed across input rows/columns.
+Default value is <code>10</code>. Allowed range is [1, 255].
+</p>
+</dd>
+<dt> ‘<samp>waveform_mode</samp>’</dt>
+<dd><p>Set mode for <code>waveform</code>. Can be either <code>row</code>, or <code>column</code>.
+Default is <code>row</code>.
+</p>
+</dd>
+<dt> ‘<samp>waveform_mirror</samp>’</dt>
+<dd><p>Set mirroring mode for <code>waveform</code>. <code>0</code> means unmirrored, <code>1</code>
+means mirrored. In mirrored mode, higher values will be represented on the left
+side for <code>row</code> mode and at the top for <code>column</code> mode. Default is
+<code>0</code> (unmirrored).
+</p>
+</dd>
+<dt> ‘<samp>display_mode</samp>’</dt>
+<dd><p>Set display mode for <code>waveform</code> and <code>levels</code>.
+It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>parade</samp>’</dt>
+<dd><p>Display separate graph for the color components side by side in
+<code>row</code> waveform mode or one below the other in <code>column</code> waveform mode
+for <code>waveform</code> histogram mode. For <code>levels</code> histogram mode,
+per color component graphs are placed below each other.
+</p>
+<p>Using this display mode in <code>waveform</code> histogram mode makes it easy to
+spot color casts in the highlights and shadows of an image, by comparing the
+contours of the top and the bottom graphs of each waveform. Since whites,
+grays, and blacks are characterized by exactly equal amounts of red, green,
+and blue, neutral areas of the picture should display three waveforms of
+roughly equal width/height. If not, the correction is easy to perform by
+making level adjustments the three waveforms.
+</p>
+</dd>
+<dt> ‘<samp>overlay</samp>’</dt>
+<dd><p>Presents information identical to that in the <code>parade</code>, except
+that the graphs representing color components are superimposed directly
+over one another.
+</p>
+<p>This display mode in <code>waveform</code> histogram mode makes it easier to spot
+relative differences or similarities in overlapping areas of the color
+components that are supposed to be identical, such as neutral whites, grays,
+or blacks.
+</p></dd>
+</dl>
+<p>Default is <code>parade</code>.
+</p>
+</dd>
+<dt> ‘<samp>levels_mode</samp>’</dt>
+<dd><p>Set mode for <code>levels</code>. Can be either <code>linear</code>, or <code>logarithmic</code>.
+Default is <code>linear</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-4"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-4">30.42.1 Examples</a></h3>
+
+<ul>
+<li>
+Calculate and draw histogram:
+<table><tr><td> </td><td><pre class="example">ffplay -i input -vf histogram
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="hqdn3d"></a>
+</p><a name="hqdn3d-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-hqdn3d-1">30.43 hqdn3d</a></h2>
+
+<p>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.
+</p>
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial luma strength,
+defaults to 4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_spatial</samp>’</dt>
+<dd><p>a non-negative float number which specifies spatial chroma strength,
+defaults to 3.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>luma_tmp</samp>’</dt>
+<dd><p>a float number which specifies luma temporal strength, defaults to
+6.0*<var>luma_spatial</var>/4.0
+</p>
+</dd>
+<dt> ‘<samp>chroma_tmp</samp>’</dt>
+<dd><p>a float number which specifies chroma temporal strength, defaults to
+<var>luma_tmp</var>*<var>chroma_spatial</var>/<var>luma_spatial</var>
+</p></dd>
+</dl>
+
+<a name="hue"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-hue">30.44 hue</a></h2>
+
+<p>Modify the hue and/or the saturation of the input.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>Specify the hue angle as a number of degrees. It accepts an expression,
+and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>Specify the saturation in the [-10,10] range. It accepts an expression and
+defaults to "1".
+</p>
+</dd>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Specify the hue angle as a number of radians. It accepts an
+expression, and defaults to "0".
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Specify the brightness in the [-10,10] range. It accepts an expression and
+defaults to "0".
+</p></dd>
+</dl>
+
+<p>‘<samp>h</samp>’ and ‘<samp>H</samp>’ are mutually exclusive, and can’t be
+specified at the same time.
+</p>
+<p>The ‘<samp>b</samp>’, ‘<samp>h</samp>’, ‘<samp>H</samp>’ and ‘<samp>s</samp>’ option values are
+expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>frame count of the input frame starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>presentation timestamp of the input frame expressed in time base units
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+<a name="Examples-22"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-22">30.44.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the hue to 90 degrees and the saturation to 1.0:
+<table><tr><td> </td><td><pre class="example">hue=h=90:s=1
+</pre></td></tr></table>
+
+</li><li>
+Same command but expressing the hue in radians:
+<table><tr><td> </td><td><pre class="example">hue=H=PI/2:s=1
+</pre></td></tr></table>
+
+</li><li>
+Rotate hue and make the saturation swing between 0
+and 2 over a period of 1 second:
+<table><tr><td> </td><td><pre class="example">hue="H=2*PI*t: s=sin(2*PI*t)+1"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-in effect starting at 0:
+<table><tr><td> </td><td><pre class="example">hue="s=min(t/3\,1)"
+</pre></td></tr></table>
+
+<p>The general fade-in expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=min(0\, max((t-START)/DURATION\, 1))"
+</pre></td></tr></table>
+
+</li><li>
+Apply a 3 seconds saturation fade-out effect starting at 5 seconds:
+<table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (8-t)/3))"
+</pre></td></tr></table>
+
+<p>The general fade-out expression can be written as:
+</p><table><tr><td> </td><td><pre class="example">hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="Commands-2"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands-2">30.44.2 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>b</samp>’</dt>
+<dt> ‘<samp>s</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>Modify the hue and/or the saturation and/or brightness of the input video.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="idet"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-idet">30.45 idet</a></h2>
+
+<p>Detect video interlacing type.
+</p>
+<p>This filter tries to detect if the input is interlaced or progressive,
+top or bottom field first.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>intl_thres</samp>’</dt>
+<dd><p>Set interlacing threshold.
+</p></dd>
+<dt> ‘<samp>prog_thres</samp>’</dt>
+<dd><p>Set progressive threshold.
+</p></dd>
+</dl>
+
+<a name="il"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-il">30.46 il</a></h2>
+
+<p>Deinterleave or interleave fields.
+</p>
+<p>This filter allows one to process interlaced images fields without
+deinterlacing them. Deinterleaving splits the input frame into 2
+fields (so called half pictures). Odd lines are moved to the top
+half of the output image, even lines to the bottom half.
+You can process (filter) them independently and then re-interleave them.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_mode, l</samp>’</dt>
+<dt> ‘<samp>chroma_mode, c</samp>’</dt>
+<dt> ‘<samp>alpha_mode, a</samp>’</dt>
+<dd><p>Available values for <var>luma_mode</var>, <var>chroma_mode</var> and
+<var>alpha_mode</var> are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing.
+</p>
+</dd>
+<dt> ‘<samp>deinterleave, d</samp>’</dt>
+<dd><p>Deinterleave fields, placing one above the other.
+</p>
+</dd>
+<dt> ‘<samp>interleave, i</samp>’</dt>
+<dd><p>Interleave fields. Reverse the effect of deinterleaving.
+</p></dd>
+</dl>
+<p>Default value is <code>none</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_swap, ls</samp>’</dt>
+<dt> ‘<samp>chroma_swap, cs</samp>’</dt>
+<dt> ‘<samp>alpha_swap, as</samp>’</dt>
+<dd><p>Swap luma/chroma/alpha fields. Exchange even & odd lines. Default value is <code>0</code>.
+</p></dd>
+</dl>
+
+<a name="interlace"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-interlace">30.47 interlace</a></h2>
+
+<p>Simple interlacing filter from progressive contents. This interleaves upper (or
+lower) lines from odd frames with lower (or upper) lines from even frames,
+halving the frame rate and preserving image height. A vertical lowpass filter
+is always applied in order to avoid twitter effects and reduce moiré patterns.
+</p>
+<table><tr><td> </td><td><pre class="example"> Original Original New Frame
+ Frame 'j' Frame 'j+1' (tff)
+ ========== =========== ==================
+ Line 0 --------------------> Frame 'j' Line 0
+ Line 1 Line 1 ----> Frame 'j+1' Line 1
+ Line 2 ---------------------> Frame 'j' Line 2
+ Line 3 Line 3 ----> Frame 'j+1' Line 3
+ ... ... ...
+New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on
+</pre></td></tr></table>
+
+<p>It accepts the following optional parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>scan</samp>’</dt>
+<dd><p>determines whether the interlaced frame is taken from the even (tff - default)
+or odd (bff) lines of the progressive frame.
+</p></dd>
+</dl>
+
+<a name="kerndeint"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-kerndeint">30.48 kerndeint</a></h2>
+
+<p>Deinterlace input video by applying Donald Graft’s adaptive kernel
+deinterling. Work on interlaced parts of a video to produce
+progressive frames.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>thresh</samp>’</dt>
+<dd><p>Set the threshold which affects the filter’s tolerance when
+determining if a pixel line must be processed. It must be an integer
+in the range [0,255] and defaults to 10. A value of 0 will result in
+applying the process on every pixels.
+</p>
+</dd>
+<dt> ‘<samp>map</samp>’</dt>
+<dd><p>Paint pixels exceeding the threshold value to white if set to 1.
+Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>order</samp>’</dt>
+<dd><p>Set the fields order. Swap fields if set to 1, leave fields alone if
+0. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>sharp</samp>’</dt>
+<dd><p>Enable additional sharpening if set to 1. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>twoway</samp>’</dt>
+<dd><p>Enable twoway sharpening if set to 1. Default is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-29"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-29">30.48.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply default values:
+<table><tr><td> </td><td><pre class="example">kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
+</pre></td></tr></table>
+
+</li><li>
+Enable additional sharpening:
+<table><tr><td> </td><td><pre class="example">kerndeint=sharp=1
+</pre></td></tr></table>
+
+</li><li>
+Paint processed pixels in white:
+<table><tr><td> </td><td><pre class="example">kerndeint=map=1
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="lut3d"></a>
+</p><a name="lut3d-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-lut3d-1">30.49 lut3d</a></h2>
+
+<p>Apply a 3D LUT to an input video.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>Set the 3D LUT file name.
+</p>
+<p>Currently supported formats:
+</p><dl compact="compact">
+<dt> ‘<samp>3dl</samp>’</dt>
+<dd><p>AfterEffects
+</p></dd>
+<dt> ‘<samp>cube</samp>’</dt>
+<dd><p>Iridas
+</p></dd>
+<dt> ‘<samp>dat</samp>’</dt>
+<dd><p>DaVinci
+</p></dd>
+<dt> ‘<samp>m3d</samp>’</dt>
+<dd><p>Pandora
+</p></dd>
+</dl>
+</dd>
+<dt> ‘<samp>interp</samp>’</dt>
+<dd><p>Select interpolation mode.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nearest</samp>’</dt>
+<dd><p>Use values from the nearest defined point.
+</p></dd>
+<dt> ‘<samp>trilinear</samp>’</dt>
+<dd><p>Interpolate values using the 8 points defining a cube.
+</p></dd>
+<dt> ‘<samp>tetrahedral</samp>’</dt>
+<dd><p>Interpolate values using a tetrahedron.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="lut_002c-lutrgb_002c-lutyuv"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-lut_002c-lutrgb_002c-lutyuv">30.50 lut, lutrgb, lutyuv</a></h2>
+
+<p>Compute a look-up table for binding each pixel component input value
+to an output value, and apply it to input video.
+</p>
+<p><var>lutyuv</var> applies a lookup table to a YUV input video, <var>lutrgb</var>
+to an RGB input video.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>c0</samp>’</dt>
+<dd><p>set first pixel component expression
+</p></dd>
+<dt> ‘<samp>c1</samp>’</dt>
+<dd><p>set second pixel component expression
+</p></dd>
+<dt> ‘<samp>c2</samp>’</dt>
+<dd><p>set third pixel component expression
+</p></dd>
+<dt> ‘<samp>c3</samp>’</dt>
+<dd><p>set fourth pixel component expression, corresponds to the alpha component
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>set red component expression
+</p></dd>
+<dt> ‘<samp>g</samp>’</dt>
+<dd><p>set green component expression
+</p></dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>set blue component expression
+</p></dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>alpha component expression
+</p>
+</dd>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>set Y/luminance component expression
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>set U/Cb component expression
+</p></dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>set V/Cr component expression
+</p></dd>
+</dl>
+
+<p>Each of them specifies the expression to use for computing the lookup table for
+the corresponding pixel component values.
+</p>
+<p>The exact component associated to each of the <var>c*</var> options depends on the
+format in input.
+</p>
+<p>The <var>lut</var> filter requires either YUV or RGB pixel formats in input,
+<var>lutrgb</var> requires RGB pixel formats in input, and <var>lutyuv</var> requires YUV.
+</p>
+<p>The expressions can contain the following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>val</samp>’</dt>
+<dd><p>input value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>clipval</samp>’</dt>
+<dd><p>the input value clipped in the <var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>maxval</samp>’</dt>
+<dd><p>maximum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>minval</samp>’</dt>
+<dd><p>minimum value for the pixel component
+</p>
+</dd>
+<dt> ‘<samp>negval</samp>’</dt>
+<dd><p>the negated value for the pixel component value clipped in the
+<var>minval</var>-<var>maxval</var> range , it corresponds to the expression
+"maxval-clipval+minval"
+</p>
+</dd>
+<dt> ‘<samp>clip(val)</samp>’</dt>
+<dd><p>the computed value in <var>val</var> clipped in the
+<var>minval</var>-<var>maxval</var> range
+</p>
+</dd>
+<dt> ‘<samp>gammaval(gamma)</samp>’</dt>
+<dd><p>the computed gamma correction value of the pixel component value
+clipped in the <var>minval</var>-<var>maxval</var> range, corresponds to the
+expression
+"pow((clipval-minval)/(maxval-minval)\,<var>gamma</var>)*(maxval-minval)+minval"
+</p>
+</dd>
+</dl>
+
+<p>All expressions default to "val".
+</p>
+<a name="Examples-53"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-53">30.50.1 Examples</a></h3>
+
+<ul>
+<li>
+Negate input video:
+<table><tr><td> </td><td><pre class="example">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"
+</pre></td></tr></table>
+
+<p>The above is the same as:
+</p><table><tr><td> </td><td><pre class="example">lutrgb="r=negval:g=negval:b=negval"
+lutyuv="y=negval:u=negval:v=negval"
+</pre></td></tr></table>
+
+</li><li>
+Negate luminance:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=negval
+</pre></td></tr></table>
+
+</li><li>
+Remove chroma components, turns the video into a graytone image:
+<table><tr><td> </td><td><pre class="example">lutyuv="u=128:v=128"
+</pre></td></tr></table>
+
+</li><li>
+Apply a luma burning effect:
+<table><tr><td> </td><td><pre class="example">lutyuv="y=2*val"
+</pre></td></tr></table>
+
+</li><li>
+Remove green and blue components:
+<table><tr><td> </td><td><pre class="example">lutrgb="g=0:b=0"
+</pre></td></tr></table>
+
+</li><li>
+Set a constant alpha channel value on input:
+<table><tr><td> </td><td><pre class="example">format=rgba,lutrgb=a="maxval-minval/2"
+</pre></td></tr></table>
+
+</li><li>
+Correct luminance gamma by a 0.5 factor:
+<table><tr><td> </td><td><pre class="example">lutyuv=y=gammaval(0.5)
+</pre></td></tr></table>
+
+</li><li>
+Discard least significant bits of luma:
+<table><tr><td> </td><td><pre class="example">lutyuv=y='bitand(val, 128+64+32)'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mergeplanes"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mergeplanes">30.51 mergeplanes</a></h2>
+
+<p>Merge color channel components from several video streams.
+</p>
+<p>The filter accepts up to 4 input streams, and merge selected input
+planes to the output video.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mapping</samp>’</dt>
+<dd><p>Set input to output plane mapping. Default is <code>0</code>.
+</p>
+<p>The mappings is specified as a bitmap. It should be specified as a
+hexadecimal number in the form 0xAa[Bb[Cc[Dd]]]. ’Aa’ describes the
+mapping for the first plane of the output stream. ’A’ sets the number of
+the input stream to use (from 0 to 3), and ’a’ the plane number of the
+corresponding input to use (from 0 to 3). The rest of the mappings is
+similar, ’Bb’ describes the mapping for the output stream second
+plane, ’Cc’ describes the mapping for the output stream third plane and
+’Dd’ describes the mapping for the output stream fourth plane.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set output pixel format. Default is <code>yuva444p</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-31"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-31">30.51.1 Examples</a></h3>
+
+<ul>
+<li>
+Merge three gray video streams of same width and height into single video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1][a2]mergeplanes=0x001020:yuv444p
+</pre></td></tr></table>
+
+</li><li>
+Merge 1st yuv444p stream and 2nd gray video stream into yuva444p video stream:
+<table><tr><td> </td><td><pre class="example">[a0][a1]mergeplanes=0x00010210:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap Y and A plane in yuva444p stream:
+<table><tr><td> </td><td><pre class="example">format=yuva444p,mergeplanes=0x03010200:yuva444p
+</pre></td></tr></table>
+
+</li><li>
+Swap U and V plane in yuv420p stream:
+<table><tr><td> </td><td><pre class="example">format=yuv420p,mergeplanes=0x000201:yuv420p
+</pre></td></tr></table>
+
+</li><li>
+Cast a rgb24 clip to yuv444p:
+<table><tr><td> </td><td><pre class="example">format=rgb24,mergeplanes=0x000102:yuv444p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="mcdeint"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mcdeint">30.52 mcdeint</a></h2>
+
+<p>Apply motion-compensation deinterlacing.
+</p>
+<p>It needs one field per frame as input and must thus be used together
+with yadif=1/3 or equivalent.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set the deinterlacing mode.
+</p>
+<p>It accepts one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>fast</samp>’</dt>
+<dt> ‘<samp>medium</samp>’</dt>
+<dt> ‘<samp>slow</samp>’</dt>
+<dd><p>use iterative motion estimation
+</p></dd>
+<dt> ‘<samp>extra_slow</samp>’</dt>
+<dd><p>like ‘<samp>slow</samp>’, but use multiple reference frames.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>fast</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>Set the picture field parity assumed for the input video. It must be
+one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>bff</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Set per-block quantization parameter (QP) used by the internal
+encoder.
+</p>
+<p>Higher values should result in a smoother motion vector field but less
+optimal individual vectors. Default value is 1.
+</p></dd>
+</dl>
+
+<a name="mp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mp">30.53 mp</a></h2>
+
+<p>Apply an MPlayer filter to the input video.
+</p>
+<p>This filter provides a wrapper around some of the filters of
+MPlayer/MEncoder.
+</p>
+<p>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.
+</p>
+<p>The filter accepts the parameters:
+<var>filter_name</var>[:=]<var>filter_params</var>
+</p>
+<p><var>filter_name</var> is the name of a supported MPlayer filter,
+<var>filter_params</var> is a string containing the parameters accepted by
+the named filter.
+</p>
+<p>The list of the currently supported filters follows:
+</p><dl compact="compact">
+<dt> <var>eq2</var></dt>
+<dt> <var>eq</var></dt>
+<dt> <var>fspp</var></dt>
+<dt> <var>ilpack</var></dt>
+<dt> <var>pp7</var></dt>
+<dt> <var>softpulldown</var></dt>
+<dt> <var>uspp</var></dt>
+</dl>
+
+<p>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.
+</p>
+<a name="Examples-38"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-38">30.53.1 Examples</a></h3>
+
+<ul>
+<li>
+Adjust gamma, brightness, contrast:
+<table><tr><td> </td><td><pre class="example">mp=eq2=1.0:2:0.5
+</pre></td></tr></table>
+</li></ul>
+
+<p>See also mplayer(1), <a href="http://www.mplayerhq.hu/">http://www.mplayerhq.hu/</a>.
+</p>
+<a name="mpdecimate"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mpdecimate">30.54 mpdecimate</a></h2>
+
+<p>Drop frames that do not differ greatly from the previous frame in
+order to reduce frame rate.
+</p>
+<p>The main use of this filter is for very-low-bitrate encoding
+(e.g. streaming over dialup modem), but it could in theory be used for
+fixing movies that were inverse-telecined incorrectly.
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum number of consecutive frames which can be dropped (if
+positive), or the minimum interval between dropped frames (if
+negative). If the value is 0, the frame is dropped unregarding the
+number of previous sequentially dropped frames.
+</p>
+<p>Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>hi</samp>’</dt>
+<dt> ‘<samp>lo</samp>’</dt>
+<dt> ‘<samp>frac</samp>’</dt>
+<dd><p>Set the dropping threshold values.
+</p>
+<p>Values for ‘<samp>hi</samp>’ and ‘<samp>lo</samp>’ are for 8x8 pixel blocks and
+represent actual pixel value differences, so a threshold of 64
+corresponds to 1 unit of difference for each pixel, or the same spread
+out differently over the block.
+</p>
+<p>A frame is a candidate for dropping if no 8x8 blocks differ by more
+than a threshold of ‘<samp>hi</samp>’, and if no more than ‘<samp>frac</samp>’ blocks (1
+meaning the whole image) differ by more than a threshold of ‘<samp>lo</samp>’.
+</p>
+<p>Default value for ‘<samp>hi</samp>’ is 64*12, default value for ‘<samp>lo</samp>’ is
+64*5, and default value for ‘<samp>frac</samp>’ is 0.33.
+</p></dd>
+</dl>
+
+
+<a name="negate"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-negate">30.55 negate</a></h2>
+
+<p>Negate input video.
+</p>
+<p>This filter accepts an integer in input, if non-zero it negates the
+alpha component (if available). The default value in input is 0.
+</p>
+<a name="noformat"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-noformat">30.56 noformat</a></h2>
+
+<p>Force libavfilter not to use any of the specified pixel formats for the
+input to the next filter.
+</p>
+<p>This filter accepts the following parameters:
+</p><dl compact="compact">
+<dt> ‘<samp>pix_fmts</samp>’</dt>
+<dd><p>A ’|’-separated list of pixel format names, for example
+"pix_fmts=yuv420p|monow|rgb24".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-15"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-15">30.56.1 Examples</a></h3>
+
+<ul>
+<li>
+Force libavfilter to use a format different from <var>yuv420p</var> for the
+input to the vflip filter:
+<table><tr><td> </td><td><pre class="example">noformat=pix_fmts=yuv420p,vflip
+</pre></td></tr></table>
+
+</li><li>
+Convert the input video to any of the formats not contained in the list:
+<table><tr><td> </td><td><pre class="example">noformat=yuv420p|yuv444p|yuv410p
+</pre></td></tr></table>
+</li></ul>
+
+<a name="noise-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-noise-1">30.57 noise</a></h2>
+
+<p>Add noise on video input frame.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all_seed</samp>’</dt>
+<dt> ‘<samp>c0_seed</samp>’</dt>
+<dt> ‘<samp>c1_seed</samp>’</dt>
+<dt> ‘<samp>c2_seed</samp>’</dt>
+<dt> ‘<samp>c3_seed</samp>’</dt>
+<dd><p>Set noise seed for specific pixel component or all pixel components in case
+of <var>all_seed</var>. Default value is <code>123457</code>.
+</p>
+</dd>
+<dt> ‘<samp>all_strength, alls</samp>’</dt>
+<dt> ‘<samp>c0_strength, c0s</samp>’</dt>
+<dt> ‘<samp>c1_strength, c1s</samp>’</dt>
+<dt> ‘<samp>c2_strength, c2s</samp>’</dt>
+<dt> ‘<samp>c3_strength, c3s</samp>’</dt>
+<dd><p>Set noise strength for specific pixel component or all pixel components in case
+<var>all_strength</var>. Default value is <code>0</code>. Allowed range is [0, 100].
+</p>
+</dd>
+<dt> ‘<samp>all_flags, allf</samp>’</dt>
+<dt> ‘<samp>c0_flags, c0f</samp>’</dt>
+<dt> ‘<samp>c1_flags, c1f</samp>’</dt>
+<dt> ‘<samp>c2_flags, c2f</samp>’</dt>
+<dt> ‘<samp>c3_flags, c3f</samp>’</dt>
+<dd><p>Set pixel component flags or set flags for all components if <var>all_flags</var>.
+Available values for component flags are:
+</p><dl compact="compact">
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>averaged temporal noise (smoother)
+</p></dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>mix random noise with a (semi)regular pattern
+</p></dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>temporal noise (noise pattern changes between frames)
+</p></dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>uniform noise (gaussian otherwise)
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="Examples-69"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-69">30.57.1 Examples</a></h3>
+
+<p>Add temporal and uniform noise to input video:
+</p><table><tr><td> </td><td><pre class="example">noise=alls=20:allf=t+u
+</pre></td></tr></table>
+
+<a name="null"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-null">30.58 null</a></h2>
+
+<p>Pass the video source unchanged to the output.
+</p>
+<a name="ocv"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ocv">30.59 ocv</a></h2>
+
+<p>Apply video transform using libopencv.
+</p>
+<p>To enable this filter install libopencv library and headers and
+configure FFmpeg with <code>--enable-libopencv</code>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name of the libopencv filter to apply.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>The parameters to pass to the libopencv filter. If not specified the default
+values are assumed.
+</p>
+</dd>
+</dl>
+
+<p>Refer to the official libopencv documentation for more precise
+information:
+<a href="http://opencv.willowgarage.com/documentation/c/image_filtering.html">http://opencv.willowgarage.com/documentation/c/image_filtering.html</a>
+</p>
+<p>Follows the list of supported libopencv filters.
+</p>
+<p><a name="dilate"></a>
+</p><a name="dilate-1"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-dilate-1">30.59.1 dilate</a></h3>
+
+<p>Dilate an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvDilate</code>.
+</p>
+<p>It accepts the parameters: <var>struct_el</var>|<var>nb_iterations</var>.
+</p>
+<p><var>struct_el</var> represents a structuring element, and has the syntax:
+<var>cols</var>x<var>rows</var>+<var>anchor_x</var>x<var>anchor_y</var>/<var>shape</var>
+</p>
+<p><var>cols</var> and <var>rows</var> represent the number of columns and rows of
+the structuring element, <var>anchor_x</var> and <var>anchor_y</var> the anchor
+point, and <var>shape</var> the shape for the structuring element, and
+can be one of the values "rect", "cross", "ellipse", "custom".
+</p>
+<p>If the value for <var>shape</var> is "custom", it must be followed by a
+string of the form "=<var>filename</var>". The file with name
+<var>filename</var> is assumed to represent a binary image, with each
+printable character corresponding to a bright pixel. When a custom
+<var>shape</var> is used, <var>cols</var> and <var>rows</var> are ignored, the number
+or columns and rows of the read file are assumed instead.
+</p>
+<p>The default value for <var>struct_el</var> is "3x3+0x0/rect".
+</p>
+<p><var>nb_iterations</var> specifies the number of times the transform is
+applied to the image, and defaults to 1.
+</p>
+<p>Follow some example:
+</p><table><tr><td> </td><td><pre class="example"># use the default values
+ocv=dilate
+
+# dilate using a structuring element with a 5x5 cross, iterate two times
+ocv=filter_name=dilate:filter_params=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=dilate:0x0+2x2/custom=diamond.shape|2
+</pre></td></tr></table>
+
+<a name="erode"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-erode">30.59.2 erode</a></h3>
+
+<p>Erode an image by using a specific structuring element.
+This filter corresponds to the libopencv function <code>cvErode</code>.
+</p>
+<p>The filter accepts the parameters: <var>struct_el</var>:<var>nb_iterations</var>,
+with the same syntax and semantics as the <a href="#dilate">dilate</a> filter.
+</p>
+<a name="smooth"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-smooth">30.59.3 smooth</a></h3>
+
+<p>Smooth the input video.
+</p>
+<p>The filter takes the following parameters:
+<var>type</var>|<var>param1</var>|<var>param2</var>|<var>param3</var>|<var>param4</var>.
+</p>
+<p><var>type</var> 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".
+</p>
+<p><var>param1</var>, <var>param2</var>, <var>param3</var>, and <var>param4</var> are
+parameters whose meanings depend on smooth type. <var>param1</var> and
+<var>param2</var> accept integer positive values or 0, <var>param3</var> and
+<var>param4</var> accept float values.
+</p>
+<p>The default value for <var>param1</var> is 3, the default value for the
+other parameters is 0.
+</p>
+<p>These parameters correspond to the parameters assigned to the
+libopencv function <code>cvSmooth</code>.
+</p>
+<p><a name="overlay"></a>
+</p><a name="overlay-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-overlay-1">30.60 overlay</a></h2>
+
+<p>Overlay one video on top of another.
+</p>
+<p>It takes two inputs and one output, the first input is the "main"
+video on which the second input is overlayed.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Set the expression for the x and y coordinates of the overlayed video
+on the main video. Default value is "0" for both expressions. In case
+the expression is invalid, it is set to a huge value (meaning that the
+overlay will not be displayed within the output visible area).
+</p>
+</dd>
+<dt> ‘<samp>eof_action</samp>’</dt>
+<dd><p>The action to take when EOF is encountered on the secondary input, accepts one
+of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>repeat</samp>’</dt>
+<dd><p>repeat the last frame (the default)
+</p></dd>
+<dt> ‘<samp>endall</samp>’</dt>
+<dd><p>end both streams
+</p></dd>
+<dt> ‘<samp>pass</samp>’</dt>
+<dd><p>pass through the main input
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set when the expressions for ‘<samp>x</samp>’, and ‘<samp>y</samp>’ are evaluated.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>only evaluate expressions once during the filter initialization or
+when a command is processed
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>evaluate expressions for each incoming frame
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>frame</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>shortest</samp>’</dt>
+<dd><p>If set to 1, force the output to terminate when the shortest input
+terminates. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>format</samp>’</dt>
+<dd><p>Set the format for the output video.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>yuv420</samp>’</dt>
+<dd><p>force YUV420 output
+</p>
+</dd>
+<dt> ‘<samp>yuv422</samp>’</dt>
+<dd><p>force YUV422 output
+</p>
+</dd>
+<dt> ‘<samp>yuv444</samp>’</dt>
+<dd><p>force YUV444 output
+</p>
+</dd>
+<dt> ‘<samp>rgb</samp>’</dt>
+<dd><p>force RGB output
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>yuv420</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>rgb <em>(deprecated)</em></samp>’</dt>
+<dd><p>If set to 1, force the filter to accept inputs in the RGB
+color space. Default value is 0. This option is deprecated, use
+‘<samp>format</samp>’ instead.
+</p>
+</dd>
+<dt> ‘<samp>repeatlast</samp>’</dt>
+<dd><p>If set to 1, force the filter to draw the last overlay frame over the
+main input until the end of the stream. A value of 0 disables this
+behavior. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The ‘<samp>x</samp>’, and ‘<samp>y</samp>’ expressions can contain the following
+parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>main_w, W</samp>’</dt>
+<dt> ‘<samp>main_h, H</samp>’</dt>
+<dd><p>main input width and height
+</p>
+</dd>
+<dt> ‘<samp>overlay_w, w</samp>’</dt>
+<dt> ‘<samp>overlay_h, h</samp>’</dt>
+<dd><p>overlay input width and height
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>the computed values for <var>x</var> and <var>y</var>. They are evaluated for
+each new frame.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values of the output
+format. For example for the pixel format "yuv422p" <var>hsub</var> is 2 and
+<var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the input frame, NAN if unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>timestamp expressed in seconds, NAN if the input timestamp is unknown
+</p>
+</dd>
+</dl>
+
+<p>Note that the <var>n</var>, <var>pos</var>, <var>t</var> variables are available only
+when evaluation is done <em>per frame</em>, and will evaluate to NAN
+when ‘<samp>eval</samp>’ is set to ‘<samp>init</samp>’.
+</p>
+<p>Be aware that frames are taken from each input video in timestamp
+order, hence, if their initial timestamps differ, it is a good idea
+to pass the two inputs through a <var>setpts=PTS-STARTPTS</var> filter to
+have them begin in the same zero timestamp, as it does the example for
+the <var>movie</var> filter.
+</p>
+<p>You can chain together more overlays but you should test the
+efficiency of such approach.
+</p>
+<a name="Commands"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands">30.60.1 Commands</a></h3>
+
+<p>This filter supports the following commands:
+</p><dl compact="compact">
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Modify the x and y of the overlay input.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="Examples-63"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-63">30.60.2 Examples</a></h3>
+
+<ul>
+<li>
+Draw the overlay at 10 pixels from the bottom right corner of the main
+video:
+<table><tr><td> </td><td><pre class="example">overlay=main_w-overlay_w-10:main_h-overlay_h-10
+</pre></td></tr></table>
+
+<p>Using named options the example above becomes:
+</p><table><tr><td> </td><td><pre class="example">overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
+</pre></td></tr></table>
+
+</li><li>
+Insert a transparent PNG logo in the bottom left corner of the input,
+using the <code>ffmpeg</code> tool with the <code>-filter_complex</code> option:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Insert 2 different transparent PNG logos (second logo on bottom
+right corner) using the <code>ffmpeg</code> tool:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
+</pre></td></tr></table>
+
+</li><li>
+Add a transparent color layer on top of the main video, <code>WxH</code>
+must specify the size of the main input to the overlay filter:
+<table><tr><td> </td><td><pre class="example">color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
+</pre></td></tr></table>
+
+</li><li>
+Play an original video and a filtered version (here with the deshake
+filter) side by side using the <code>ffplay</code> tool:
+<table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
+</pre></td></tr></table>
+
+<p>The above command is the same as:
+</p><table><tr><td> </td><td><pre class="example">ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
+</pre></td></tr></table>
+
+</li><li>
+Make a sliding overlay appearing from the left to the right top part of the
+screen starting since time 2:
+<table><tr><td> </td><td><pre class="example">overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
+</pre></td></tr></table>
+
+</li><li>
+Compose output by putting two input videos side to side:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i left.avi -i right.avi -filter_complex "
+nullsrc=size=200x100 [background];
+[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
+[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
+[background][left] overlay=shortest=1 [background+left];
+[background+left][right] overlay=shortest=1:x=100 [left+right]
+"
+</pre></td></tr></table>
+
+</li><li>
+mask 10-20 seconds of a video by applying the delogo filter to a section
+<table><tr><td> </td><td><pre class="example">ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
+-vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
+masked.avi
+</pre></td></tr></table>
+
+</li><li>
+Chain several overlays in cascade:
+<table><tr><td> </td><td><pre class="example">nullsrc=s=200x200 [bg];
+testsrc=s=100x100, split=4 [in0][in1][in2][in3];
+[in0] lutrgb=r=0, [bg] overlay=0:0 [mid0];
+[in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1];
+[in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2];
+[in3] null, [mid2] overlay=100:100 [out0]
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="owdenoise"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-owdenoise">30.61 owdenoise</a></h2>
+
+<p>Apply Overcomplete Wavelet denoiser.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>depth</samp>’</dt>
+<dd><p>Set depth.
+</p>
+<p>Larger depth values will denoise lower frequency components more, but
+slow down filtering.
+</p>
+<p>Must be an int in the range 8-16, default is <code>8</code>.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma strength.
+</p>
+<p>Must be a double value in the range 0-1000, default is <code>1.0</code>.
+</p></dd>
+</dl>
+
+<a name="pad"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pad">30.62 pad</a></h2>
+
+<p>Add paddings to the input image, and place the original input at the
+given coordinates <var>x</var>, <var>y</var>.
+</p>
+<p>This filter accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Specify an expression for the size of the output image with the
+paddings added. If the value for <var>width</var> or <var>height</var> is 0, the
+corresponding input size is used for the output.
+</p>
+<p>The <var>width</var> expression can reference the value set by the
+<var>height</var> expression, and vice versa.
+</p>
+<p>The default value of <var>width</var> and <var>height</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>Specify an expression for the offsets where to place the input image
+in the padded area with respect to the top/left border of the output
+image.
+</p>
+<p>The <var>x</var> expression can reference the value set by the <var>y</var>
+expression, and vice versa.
+</p>
+<p>The default value of <var>x</var> and <var>y</var> is 0.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the padded area. For the syntax of this option,
+check the "Color" section in the ffmpeg-utils manual.
+</p>
+<p>The default value of <var>color</var> is "black".
+</p></dd>
+</dl>
+
+<p>The value for the <var>width</var>, <var>height</var>, <var>x</var>, and <var>y</var>
+options are expressions containing the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in_w</samp>’</dt>
+<dt> ‘<samp>in_h</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>iw</samp>’</dt>
+<dt> ‘<samp>ih</samp>’</dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> ‘<samp>out_w</samp>’</dt>
+<dt> ‘<samp>out_h</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>ow</samp>’</dt>
+<dt> ‘<samp>oh</samp>’</dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> ‘<samp>x</samp>’</dt>
+<dt> ‘<samp>y</samp>’</dt>
+<dd><p>x and y offsets as specified by the <var>x</var> and <var>y</var>
+expressions, or NAN if not yet specified
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>iw</var> / <var>ih</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-25"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-25">30.62.1 Examples</a></h3>
+
+<ul>
+<li>
+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:
+<table><tr><td> </td><td><pre class="example">pad=640:480:0:40:violet
+</pre></td></tr></table>
+
+<p>The example above is equivalent to the following command:
+</p><table><tr><td> </td><td><pre class="example">pad=width=640:height=480:x=0:y=40:color=violet
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get an output with dimensions increased by 3/2,
+and put the input video at the center of the padded area:
+<table><tr><td> </td><td><pre class="example">pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+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:
+<table><tr><td> </td><td><pre class="example">pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Pad the input to get a final w/h ratio of 16:9:
+<table><tr><td> </td><td><pre class="example">pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+In case of anamorphic video, in order to set the output display aspect
+correctly, it is necessary to use <var>sar</var> in the expression,
+according to the relation:
+<table><tr><td> </td><td><pre class="example">(ih * X / ih) * sar = output_dar
+X = output_dar / sar
+</pre></td></tr></table>
+
+<p>Thus the previous example needs to be modified to:
+</p><table><tr><td> </td><td><pre class="example">pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
+</pre></td></tr></table>
+
+</li><li>
+Double output size and put the input video in the bottom-right
+corner of the output padded area:
+<table><tr><td> </td><td><pre class="example">pad="2*iw:2*ih:ow-iw:oh-ih"
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perspective"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-perspective">30.63 perspective</a></h2>
+
+<p>Correct perspective of video not recorded perpendicular to the screen.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dt> ‘<samp>x1</samp>’</dt>
+<dt> ‘<samp>y1</samp>’</dt>
+<dt> ‘<samp>x2</samp>’</dt>
+<dt> ‘<samp>y2</samp>’</dt>
+<dt> ‘<samp>x3</samp>’</dt>
+<dt> ‘<samp>y3</samp>’</dt>
+<dd><p>Set coordinates expression for top left, top right, bottom left and bottom right corners.
+Default values are <code>0:0:W:0:0:H:W:H</code> with which perspective will remain unchanged.
+</p>
+<p>The expressions can use the following variables:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>W</samp>’</dt>
+<dt> ‘<samp>H</samp>’</dt>
+<dd><p>the width and height of video frame.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>interpolation</samp>’</dt>
+<dd><p>Set interpolation for perspective correction.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>linear</samp>’</dt>
+<dt> ‘<samp>cubic</samp>’</dt>
+</dl>
+
+<p>Default value is ‘<samp>linear</samp>’.
+</p></dd>
+</dl>
+
+<a name="phase"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-phase">30.64 phase</a></h2>
+
+<p>Delay interlaced video by one field time so that the field order changes.
+</p>
+<p>The intended use is to fix PAL movies that have been captured with the
+opposite field order to the film-to-video transfer.
+</p>
+<p>A description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set phase mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>Capture field order top-first, transfer bottom-first.
+Filter will delay the bottom field.
+</p>
+</dd>
+<dt> ‘<samp>b</samp>’</dt>
+<dd><p>Capture field order bottom-first, transfer top-first.
+Filter will delay the top field.
+</p>
+</dd>
+<dt> ‘<samp>p</samp>’</dt>
+<dd><p>Capture and transfer with the same field order. This mode only exists
+for the documentation of the other options to refer to, but if you
+actually select it, the filter will faithfully do nothing.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Capture field order determined automatically by field flags, transfer
+opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ modes on a frame by frame
+basis using field flags. If no field information is available,
+then this works just like ‘<samp>u</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Capture unknown or varying, transfer opposite.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>b</samp>’ on a frame by frame basis by
+analyzing the images and selecting the alternative that produces best
+match between the fields.
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>Capture top-first, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>B</samp>’</dt>
+<dd><p>Capture bottom-first, transfer unknown or varying.
+Filter selects among ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis.
+</p>
+</dd>
+<dt> ‘<samp>A</samp>’</dt>
+<dd><p>Capture determined by field flags, transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using field flags and
+image analysis. If no field information is available, then this works just
+like ‘<samp>U</samp>’. This is the default mode.
+</p>
+</dd>
+<dt> ‘<samp>U</samp>’</dt>
+<dd><p>Both capture and transfer unknown or varying.
+Filter selects among ‘<samp>t</samp>’, ‘<samp>b</samp>’ and ‘<samp>p</samp>’ using image analysis only.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="pixdesctest"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pixdesctest">30.65 pixdesctest</a></h2>
+
+<p>Pixel format descriptor test filter, mainly useful for internal
+testing. The output video should be equal to the input video.
+</p>
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">format=monow, pixdesctest
+</pre></td></tr></table>
+
+<p>can be used to test the monowhite pixel format descriptor definition.
+</p>
+<a name="pp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pp">30.66 pp</a></h2>
+
+<p>Enable the specified chain of postprocessing subfilters using libpostproc. This
+library should be automatically selected with a GPL build (<code>--enable-gpl</code>).
+Subfilters must be separated by ’/’ and can be disabled by prepending a ’-’.
+Each subfilter and some options have a short and a long name that can be used
+interchangeably, i.e. dr/dering are the same.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>subfilters</samp>’</dt>
+<dd><p>Set postprocessing subfilters string.
+</p></dd>
+</dl>
+
+<p>All subfilters share common options to determine their scope:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a/autoq</samp>’</dt>
+<dd><p>Honor the quality commands for this subfilter.
+</p>
+</dd>
+<dt> ‘<samp>c/chrom</samp>’</dt>
+<dd><p>Do chrominance filtering, too (default).
+</p>
+</dd>
+<dt> ‘<samp>y/nochrom</samp>’</dt>
+<dd><p>Do luminance filtering only (no chrominance).
+</p>
+</dd>
+<dt> ‘<samp>n/noluma</samp>’</dt>
+<dd><p>Do chrominance filtering only (no luminance).
+</p></dd>
+</dl>
+
+<p>These options can be appended after the subfilter name, separated by a ’|’.
+</p>
+<p>Available subfilters are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hb/hdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>vb/vdeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>ha/hadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate horizontal deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>va/vadeblock[|difference[|flatness]]</samp>’</dt>
+<dd><p>Accurate vertical deblocking filter
+</p><dl compact="compact">
+<dt> ‘<samp>difference</samp>’</dt>
+<dd><p>Difference factor where higher values mean more deblocking (default: <code>32</code>).
+</p></dd>
+<dt> ‘<samp>flatness</samp>’</dt>
+<dd><p>Flatness threshold where lower values mean more deblocking (default: <code>39</code>).
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<p>The horizontal and vertical deblocking filters share the difference and
+flatness values so you cannot set different horizontal and vertical
+thresholds.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>h1/x1hdeblock</samp>’</dt>
+<dd><p>Experimental horizontal deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>v1/x1vdeblock</samp>’</dt>
+<dd><p>Experimental vertical deblocking filter
+</p>
+</dd>
+<dt> ‘<samp>dr/dering</samp>’</dt>
+<dd><p>Deringing filter
+</p>
+</dd>
+<dt> ‘<samp>tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>threshold1</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold2</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+<dt> ‘<samp>threshold3</samp>’</dt>
+<dd><p>larger -> stronger filtering
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>al/autolevels[:f/fullyrange], automatic brightness / contrast correction</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>f/fullyrange</samp>’</dt>
+<dd><p>Stretch luminance to <code>0-255</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>lb/linblenddeint</samp>’</dt>
+<dd><p>Linear blend deinterlacing filter that deinterlaces the given block by
+filtering all lines with a <code>(1 2 1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>li/linipoldeint</samp>’</dt>
+<dd><p>Linear interpolating deinterlacing filter that deinterlaces the given block by
+linearly interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>ci/cubicipoldeint</samp>’</dt>
+<dd><p>Cubic interpolating deinterlacing filter deinterlaces the given block by
+cubically interpolating every second line.
+</p>
+</dd>
+<dt> ‘<samp>md/mediandeint</samp>’</dt>
+<dd><p>Median deinterlacing filter that deinterlaces the given block by applying a
+median filter to every second line.
+</p>
+</dd>
+<dt> ‘<samp>fd/ffmpegdeint</samp>’</dt>
+<dd><p>FFmpeg deinterlacing filter that deinterlaces the given block by filtering every
+second line with a <code>(-1 4 2 4 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>l5/lowpass5</samp>’</dt>
+<dd><p>Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
+block by filtering all lines with a <code>(-1 2 6 2 -1)</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>fq/forceQuant[|quantizer]</samp>’</dt>
+<dd><p>Overrides the quantizer table from the input with the constant quantizer you
+specify.
+</p><dl compact="compact">
+<dt> ‘<samp>quantizer</samp>’</dt>
+<dd><p>Quantizer to use
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>de/default</samp>’</dt>
+<dd><p>Default pp filter combination (<code>hb|a,vb|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>fa/fast</samp>’</dt>
+<dd><p>Fast pp filter combination (<code>h1|a,v1|a,dr|a</code>)
+</p>
+</dd>
+<dt> ‘<samp>ac</samp>’</dt>
+<dd><p>High quality pp filter combination (<code>ha|a|128|7,va|a,dr|a</code>)
+</p></dd>
+</dl>
+
+<a name="Examples-50"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-50">30.66.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply horizontal and vertical deblocking, deringing and automatic
+brightness/contrast:
+<table><tr><td> </td><td><pre class="example">pp=hb/vb/dr/al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters without brightness/contrast correction:
+<table><tr><td> </td><td><pre class="example">pp=de/-al
+</pre></td></tr></table>
+
+</li><li>
+Apply default filters and temporal denoiser:
+<table><tr><td> </td><td><pre class="example">pp=default/tmpnoise|1|2|3
+</pre></td></tr></table>
+
+</li><li>
+Apply deblocking on luminance only, and switch vertical deblocking on or off
+automatically depending on available CPU time:
+<table><tr><td> </td><td><pre class="example">pp=hb|y/vb|a
+</pre></td></tr></table>
+</li></ul>
+
+<a name="psnr"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-psnr">30.67 psnr</a></h2>
+
+<p>Obtain the average, maximum and minimum PSNR (Peak Signal to Noise
+Ratio) between two input videos.
+</p>
+<p>This filter takes in input two input videos, the first input is
+considered the "main" source and is passed unchanged to the
+output. The second input is used as a "reference" video for computing
+the PSNR.
+</p>
+<p>Both video inputs must have the same resolution and pixel format for
+this filter to work correctly. Also it assumes that both inputs
+have the same number of frames, which are compared one by one.
+</p>
+<p>The obtained average PSNR is printed through the logging system.
+</p>
+<p>The filter stores the accumulated MSE (mean squared error) of each
+frame, and at the end of the processing it is averaged across all frames
+equally, and the following formula is applied to obtain the PSNR:
+</p>
+<table><tr><td> </td><td><pre class="example">PSNR = 10*log10(MAX^2/MSE)
+</pre></td></tr></table>
+
+<p>Where MAX is the average of the maximum values of each component of the
+image.
+</p>
+<p>The description of the accepted parameters follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>stats_file, f</samp>’</dt>
+<dd><p>If specified the filter will use the named file to save the PSNR of
+each individual frame.
+</p></dd>
+</dl>
+
+<p>The file printed if <var>stats_file</var> is selected, contains a sequence of
+key/value pairs of the form <var>key</var>:<var>value</var> for each compared
+couple of frames.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 1
+</p>
+</dd>
+<dt> ‘<samp>mse_avg</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames, averaged over all the image components.
+</p>
+</dd>
+<dt> ‘<samp>mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a</samp>’</dt>
+<dd><p>Mean Square Error pixel-by-pixel average difference of the compared
+frames for the component specified by the suffix.
+</p>
+</dd>
+<dt> ‘<samp>psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a</samp>’</dt>
+<dd><p>Peak Signal to Noise ratio of the compared frames for the component
+specified by the suffix.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
+[main][ref] psnr="stats_file=stats.log" [out]
+</pre></td></tr></table>
+
+<p>On this example the input file being processed is compared with the
+reference file ‘<tt>ref_movie.mpg</tt>’. The PSNR of each individual frame
+is stored in ‘<tt>stats.log</tt>’.
+</p>
+<p><a name="pullup"></a>
+</p><a name="pullup-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-pullup-1">30.68 pullup</a></h2>
+
+<p>Pulldown reversal (inverse telecine) filter, capable of handling mixed
+hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive
+content.
+</p>
+<p>The pullup filter is designed to take advantage of future context in making
+its decisions. This filter is stateless in the sense that it does not lock
+onto a pattern to follow, but it instead looks forward to the following
+fields in order to identify matches and rebuild progressive frames.
+</p>
+<p>To produce content with an even framerate, insert the fps filter after
+pullup, use <code>fps=24000/1001</code> if the input frame rate is 29.97fps,
+<code>fps=24</code> for 30fps and the (rare) telecined 25fps input.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>jl</samp>’</dt>
+<dt> ‘<samp>jr</samp>’</dt>
+<dt> ‘<samp>jt</samp>’</dt>
+<dt> ‘<samp>jb</samp>’</dt>
+<dd><p>These options set the amount of "junk" to ignore at the left, right, top, and
+bottom of the image, respectively. Left and right are in units of 8 pixels,
+while top and bottom are in units of 2 lines.
+The default is 8 pixels on each side.
+</p>
+</dd>
+<dt> ‘<samp>sb</samp>’</dt>
+<dd><p>Set the strict breaks. Setting this option to 1 will reduce the chances of
+filter generating an occasional mismatched frame, but it may also cause an
+excessive number of frames to be dropped during high motion sequences.
+Conversely, setting it to -1 will make filter match fields more easily.
+This may help processing of video where there is slight blurring between
+the fields, but may also cause there to be interlaced frames in the output.
+Default value is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mp</samp>’</dt>
+<dd><p>Set the metric plane to use. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>l</samp>’</dt>
+<dd><p>Use luma plane.
+</p>
+</dd>
+<dt> ‘<samp>u</samp>’</dt>
+<dd><p>Use chroma blue plane.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Use chroma red plane.
+</p></dd>
+</dl>
+
+<p>This option may be set to use chroma plane instead of the default luma plane
+for doing filter’s computations. This may improve accuracy on very clean
+source material, but more likely will decrease accuracy, especially if there
+is chroma noise (rainbow effect) or any grayscale video.
+The main purpose of setting ‘<samp>mp</samp>’ to a chroma plane is to reduce CPU
+load and make pullup usable in realtime on slow machines.
+</p></dd>
+</dl>
+
+<p>For best results (without duplicated frames in the output file) it is
+necessary to change the output frame rate. For example, to inverse
+telecine NTSC input:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf pullup -r 24000/1001 ...
+</pre></td></tr></table>
+
+<a name="removelogo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-removelogo">30.69 removelogo</a></h2>
+
+<p>Suppress a TV station logo, using an image file to determine which
+pixels comprise the logo. It works by filling in the pixels that
+comprise the logo with neighboring pixels.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filter bitmap file, which can be any image format supported by
+libavformat. The width and height of the image file must match those of the
+video stream being processed.
+</p></dd>
+</dl>
+
+<p>Pixels in the provided bitmap image with a value of zero are not
+considered part of the logo, non-zero pixels are considered part of
+the logo. If you use white (255) for the logo and black (0) for the
+rest, you will be safe. For making the filter bitmap, it is
+recommended to take a screen capture of a black frame with the logo
+visible, and then using a threshold filter followed by the erode
+filter once or twice.
+</p>
+<p>If needed, little splotches can be fixed manually. Remember that if
+logo pixels are not covered, the filter quality will be much
+reduced. Marking too many pixels as part of the logo does not hurt as
+much, but it will increase the amount of blurring needed to cover over
+the image and will destroy more information than necessary, and extra
+pixels will slow things down on a large logo.
+</p>
+<a name="rotate"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-rotate">30.70 rotate</a></h2>
+
+<p>Rotate video by an arbitrary angle expressed in radians.
+</p>
+<p>The filter accepts the following options:
+</p>
+<p>A description of the optional parameters follows.
+</p><dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set an expression for the angle by which to rotate the input video
+clockwise, expressed as a number of radians. A negative value will
+result in a counter-clockwise rotation. By default it is set to "0".
+</p>
+<p>This expression is evaluated for each frame.
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dd><p>Set the output width expression, default value is "iw".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>Set the output height expression, default value is "ih".
+This expression is evaluated just once during configuration.
+</p>
+</dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>Enable bilinear interpolation if set to 1, a value of 0 disables
+it. Default value is 1.
+</p>
+</dd>
+<dt> ‘<samp>fillcolor, c</samp>’</dt>
+<dd><p>Set the color used to fill the output area not covered by the rotated
+image. For the generalsyntax of this option, check the "Color" section in the
+ffmpeg-utils manual. If the special value "none" is selected then no
+background is printed (useful for example if the background is never shown).
+</p>
+<p>Default value is "black".
+</p></dd>
+</dl>
+
+<p>The expressions for the angle and the output size can contain the
+following constants and functions:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0. It is always NAN
+before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>time in seconds of the input frame, it is set to 0 when the filter is
+configured. It is always NAN before the first frame is filtered.
+</p>
+</dd>
+<dt> ‘<samp>hsub</samp>’</dt>
+<dt> ‘<samp>vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> ‘<samp>in_w, iw</samp>’</dt>
+<dt> ‘<samp>in_h, ih</samp>’</dt>
+<dd><p>the input video width and height
+</p>
+</dd>
+<dt> ‘<samp>out_w, ow</samp>’</dt>
+<dt> ‘<samp>out_h, oh</samp>’</dt>
+<dd><p>the output width and height, that is the size of the padded area as
+specified by the <var>width</var> and <var>height</var> expressions
+</p>
+</dd>
+<dt> ‘<samp>rotw(a)</samp>’</dt>
+<dt> ‘<samp>roth(a)</samp>’</dt>
+<dd><p>the minimal width/height required for completely containing the input
+video rotated by <var>a</var> radians.
+</p>
+<p>These are only available when computing the ‘<samp>out_w</samp>’ and
+‘<samp>out_h</samp>’ expressions.
+</p></dd>
+</dl>
+
+<a name="Examples-77"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-77">30.70.1 Examples</a></h3>
+
+<ul>
+<li>
+Rotate the input by PI/6 radians clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by PI/6 radians counter-clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=-PI/6
+</pre></td></tr></table>
+
+</li><li>
+Rotate the input by 45 degrees clockwise:
+<table><tr><td> </td><td><pre class="example">rotate=45*PI/180
+</pre></td></tr></table>
+
+</li><li>
+Apply a constant rotation with period T, starting from an angle of PI/3:
+<table><tr><td> </td><td><pre class="example">rotate=PI/3+2*PI*t/T
+</pre></td></tr></table>
+
+</li><li>
+Make the input video rotation oscillating with a period of T
+seconds and an amplitude of A radians:
+<table><tr><td> </td><td><pre class="example">rotate=A*sin(2*PI/T*t)
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, output size is chosen so that the whole rotating
+input video is always completely contained in the output:
+<table><tr><td> </td><td><pre class="example">rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
+</pre></td></tr></table>
+
+</li><li>
+Rotate the video, reduce the output size so that no background is ever
+shown:
+<table><tr><td> </td><td><pre class="example">rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
+</pre></td></tr></table>
+</li></ul>
+
+<a name="Commands-5"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands-5">30.70.2 Commands</a></h3>
+
+<p>The filter supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>a, angle</samp>’</dt>
+<dd><p>Set the angle expression.
+The command accepts the same syntax of the corresponding option.
+</p>
+<p>If the specified expression is not valid, it is kept at its current
+value.
+</p></dd>
+</dl>
+
+<a name="sab"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sab">30.71 sab</a></h2>
+
+<p>Apply Shape Adaptive Blur.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set luma blur filter strength, must be a value in range 0.1-4.0, default
+value is 1.0. A greater value will result in a more blurred image, and
+in slower processing.
+</p>
+</dd>
+<dt> ‘<samp>luma_pre_filter_radius, lpfr</samp>’</dt>
+<dd><p>Set luma pre-filter radius, must be a value in the 0.1-2.0 range, default
+value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set luma maximum difference between pixels to still be considered, must
+be a value in the 0.1-100.0 range, default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set chroma blur filter strength, must be a value in range 0.1-4.0. A
+greater value will result in a more blurred image, and in slower
+processing.
+</p>
+</dd>
+<dt> ‘<samp>chroma_pre_filter_radius, cpfr</samp>’</dt>
+<dd><p>Set chroma pre-filter radius, must be a value in the 0.1-2.0 range.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set chroma maximum difference between pixels to still be considered,
+must be a value in the 0.1-100.0 range.
+</p></dd>
+</dl>
+
+<p>Each chroma option value, if not explicitly specified, is set to the
+corresponding luma option value.
+</p>
+<p><a name="scale"></a>
+</p><a name="scale-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-scale-1">30.72 scale</a></h2>
+
+<p>Scale (resize) the input video, using the libswscale library.
+</p>
+<p>The scale filter forces the output display aspect ratio to be the same
+of the input, by changing the output sample aspect ratio.
+</p>
+<p>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.
+</p>
+<a name="Options-6"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-6">30.72.1 Options</a></h3>
+<p>The filter accepts the following options, or any of the options
+supported by the libswscale scaler.
+</p>
+<p>See <a href="ffmpeg-scaler.html#scaler_005foptions">(ffmpeg-scaler)scaler_options</a> for
+the complete list of scaler options.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>width, w</samp>’</dt>
+<dt> ‘<samp>height, h</samp>’</dt>
+<dd><p>Set the output video dimension expression. Default value is the input
+dimension.
+</p>
+<p>If the value is 0, the input width is used for the output.
+</p>
+<p>If one of the values is -1, the scale filter will use a value that
+maintains the aspect ratio of the input image, calculated from the
+other specified dimension. If both of them are -1, the input size is
+used
+</p>
+<p>If one of the values is -n with n > 1, the scale filter will also use a value
+that maintains the aspect ratio of the input image, calculated from the other
+specified dimension. After that it will, however, make sure that the calculated
+dimension is divisible by n and adjust the value if necessary.
+</p>
+<p>See below for the list of accepted constants for use in the dimension
+expression.
+</p>
+</dd>
+<dt> ‘<samp>interl</samp>’</dt>
+<dd><p>Set the interlacing mode. It accepts the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>Force interlaced aware scaling.
+</p>
+</dd>
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>Do not apply interlaced scaling.
+</p>
+</dd>
+<dt> ‘<samp>-1</samp>’</dt>
+<dd><p>Select interlaced aware scaling depending on whether the source frames
+are flagged as interlaced or not.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>0</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Set libswscale scaling flags. See
+<a href="ffmpeg-scaler.html#sws_005fflags">(ffmpeg-scaler)sws_flags</a> for the
+complete list of values. If not explicitly specified the filter applies
+the default flags.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>in_color_matrix</samp>’</dt>
+<dt> ‘<samp>out_color_matrix</samp>’</dt>
+<dd><p>Set in/output YCbCr color space type.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder.
+</p>
+<p>If not specified, the color space type depends on the pixel format.
+</p>
+<p>Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>bt709</samp>’</dt>
+<dd><p>Format conforming to International Telecommunication Union (ITU)
+Recommendation BT.709.
+</p>
+</dd>
+<dt> ‘<samp>fcc</samp>’</dt>
+<dd><p>Set color space conforming to the United States Federal Communications
+Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a).
+</p>
+</dd>
+<dt> ‘<samp>bt601</samp>’</dt>
+<dd><p>Set color space conforming to:
+</p>
+<ul>
+<li>
+ITU Radiocommunication Sector (ITU-R) Recommendation BT.601
+
+</li><li>
+ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G
+
+</li><li>
+Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004
+
+</li></ul>
+
+</dd>
+<dt> ‘<samp>smpte240m</samp>’</dt>
+<dd><p>Set color space conforming to SMPTE ST 240:1999.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>in_range</samp>’</dt>
+<dt> ‘<samp>out_range</samp>’</dt>
+<dd><p>Set in/output YCbCr sample range.
+</p>
+<p>This allows the autodetected value to be overridden as well as allows forcing
+a specific value used for the output and encoder. If not specified, the
+range depends on the pixel format. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Choose automatically.
+</p>
+</dd>
+<dt> ‘<samp>jpeg/full/pc</samp>’</dt>
+<dd><p>Set full range (0-255 in case of 8-bit luma).
+</p>
+</dd>
+<dt> ‘<samp>mpeg/tv</samp>’</dt>
+<dd><p>Set "MPEG" range (16-235 in case of 8-bit luma).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>force_original_aspect_ratio</samp>’</dt>
+<dd><p>Enable decreasing or increasing output video width or height if necessary to
+keep the original aspect ratio. Possible values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>disable</samp>’</dt>
+<dd><p>Scale the video as specified and disable this feature.
+</p>
+</dd>
+<dt> ‘<samp>decrease</samp>’</dt>
+<dd><p>The output video dimensions will automatically be decreased if needed.
+</p>
+</dd>
+<dt> ‘<samp>increase</samp>’</dt>
+<dd><p>The output video dimensions will automatically be increased if needed.
+</p>
+</dd>
+</dl>
+
+<p>One useful instance of this option is that when you know a specific device’s
+maximum allowed resolution, you can use this to limit the output video to
+that, while retaining the aspect ratio. For example, device A allows
+1280x720 playback, and your video is 1920x800. Using this option (set it to
+decrease) and specifying 1280x720 to the command line makes the output
+1280x533.
+</p>
+<p>Please note that this is a different thing than specifying -1 for ‘<samp>w</samp>’
+or ‘<samp>h</samp>’, you still need to specify the output resolution for this option
+to work.
+</p>
+</dd>
+</dl>
+
+<p>The values of the ‘<samp>w</samp>’ and ‘<samp>h</samp>’ options are expressions
+containing the following constants:
+</p>
+<dl compact="compact">
+<dt> <var>in_w</var></dt>
+<dt> <var>in_h</var></dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> <var>iw</var></dt>
+<dt> <var>ih</var></dt>
+<dd><p>same as <var>in_w</var> and <var>in_h</var>
+</p>
+</dd>
+<dt> <var>out_w</var></dt>
+<dt> <var>out_h</var></dt>
+<dd><p>the output (scaled) width and height
+</p>
+</dd>
+<dt> <var>ow</var></dt>
+<dt> <var>oh</var></dt>
+<dd><p>same as <var>out_w</var> and <var>out_h</var>
+</p>
+</dd>
+<dt> <var>a</var></dt>
+<dd><p>same as <var>iw</var> / <var>ih</var>
+</p>
+</dd>
+<dt> <var>sar</var></dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> <var>dar</var></dt>
+<dd><p>input display aspect ratio. Calculated from <code>(iw / ih) * sar</code>.
+</p>
+</dd>
+<dt> <var>hsub</var></dt>
+<dt> <var>vsub</var></dt>
+<dd><p>horizontal and vertical input chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p>
+</dd>
+<dt> <var>ohsub</var></dt>
+<dt> <var>ovsub</var></dt>
+<dd><p>horizontal and vertical output chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-83"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-83">30.72.2 Examples</a></h3>
+
+<ul>
+<li>
+Scale the input video to a size of 200x100:
+<table><tr><td> </td><td><pre class="example">scale=w=200:h=100
+</pre></td></tr></table>
+
+<p>This is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">scale=200:100
+</pre></td></tr></table>
+
+<p>or:
+</p><table><tr><td> </td><td><pre class="example">scale=200x100
+</pre></td></tr></table>
+
+</li><li>
+Specify a size abbreviation for the output size:
+<table><tr><td> </td><td><pre class="example">scale=qcif
+</pre></td></tr></table>
+
+<p>which can also be written as:
+</p><table><tr><td> </td><td><pre class="example">scale=size=qcif
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x:
+<table><tr><td> </td><td><pre class="example">scale=w=2*iw:h=2*ih
+</pre></td></tr></table>
+
+</li><li>
+The above is the same as:
+<table><tr><td> </td><td><pre class="example">scale=2*in_w:2*in_h
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to 2x with forced interlaced scaling:
+<table><tr><td> </td><td><pre class="example">scale=2*iw:2*ih:interl=1
+</pre></td></tr></table>
+
+</li><li>
+Scale the input to half size:
+<table><tr><td> </td><td><pre class="example">scale=w=iw/2:h=ih/2
+</pre></td></tr></table>
+
+</li><li>
+Increase the width, and set the height to the same size:
+<table><tr><td> </td><td><pre class="example">scale=3/2*iw:ow
+</pre></td></tr></table>
+
+</li><li>
+Seek for Greek harmony:
+<table><tr><td> </td><td><pre class="example">scale=iw:1/PHI*iw
+scale=ih*PHI:ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the height, and set the width to 3/2 of the height:
+<table><tr><td> </td><td><pre class="example">scale=w=3/2*oh:h=3/5*ih
+</pre></td></tr></table>
+
+</li><li>
+Increase the size, but make the size a multiple of the chroma
+subsample values:
+<table><tr><td> </td><td><pre class="example">scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
+</pre></td></tr></table>
+
+</li><li>
+Increase the width to a maximum of 500 pixels, keep the same input
+aspect ratio:
+<table><tr><td> </td><td><pre class="example">scale=w='min(500\, iw*3/2):h=-1'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="separatefields"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-separatefields">30.73 separatefields</a></h2>
+
+<p>The <code>separatefields</code> takes a frame-based video input and splits
+each frame into its components fields, producing a new half height clip
+with twice the frame rate and twice the frame count.
+</p>
+<p>This filter use field-dominance information in frame to decide which
+of each pair of fields to place first in the output.
+If it gets it wrong use <a href="#setfield">setfield</a> filter before <code>separatefields</code> filter.
+</p>
+<a name="setdar_002c-setsar"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-setdar_002c-setsar">30.74 setdar, setsar</a></h2>
+
+<p>The <code>setdar</code> filter sets the Display Aspect Ratio for the filter
+output video.
+</p>
+<p>This is done by changing the specified Sample (aka Pixel) Aspect
+Ratio, according to the following equation:
+</p><table><tr><td> </td><td><pre class="example"><var>DAR</var> = <var>HORIZONTAL_RESOLUTION</var> / <var>VERTICAL_RESOLUTION</var> * <var>SAR</var>
+</pre></td></tr></table>
+
+<p>Keep in mind that the <code>setdar</code> 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.
+</p>
+<p>The <code>setsar</code> filter sets the Sample (aka Pixel) Aspect Ratio for
+the filter output video.
+</p>
+<p>Note that as a consequence of the application of this filter, the
+output display aspect ratio will change according to the equation
+above.
+</p>
+<p>Keep in mind that the sample aspect ratio set by the <code>setsar</code>
+filter may be changed by later filters in the filterchain, e.g. if
+another "setsar" or a "setdar" filter is applied.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>r, ratio, dar (<code>setdar</code> only), sar (<code>setsar</code> only)</samp>’</dt>
+<dd><p>Set the aspect ratio used by the filter.
+</p>
+<p>The parameter can be a floating point number string, an expression, or
+a string of the form <var>num</var>:<var>den</var>, where <var>num</var> and
+<var>den</var> are the numerator and denominator of the aspect ratio. If
+the parameter is not specified, it is assumed the value "0".
+In case the form "<var>num</var>:<var>den</var>" is used, the <code>:</code> character
+should be escaped.
+</p>
+</dd>
+<dt> ‘<samp>max</samp>’</dt>
+<dd><p>Set the maximum integer value to use for expressing numerator and
+denominator when reducing the expressed aspect ratio to a rational.
+Default value is <code>100</code>.
+</p>
+</dd>
+</dl>
+
+<p>The parameter <var>sar</var> is an expression containing
+the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>E, PI, PHI</samp>’</dt>
+<dd><p>the corresponding mathematical approximated values for e
+(euler number), pi (greek PI), phi (golden ratio)
+</p>
+</dd>
+<dt> ‘<samp>w, h</samp>’</dt>
+<dd><p>the input width and height
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>same as <var>w</var> / <var>h</var>
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>input sample aspect ratio
+</p>
+</dd>
+<dt> ‘<samp>dar</samp>’</dt>
+<dd><p>input display aspect ratio, it is the same as (<var>w</var> / <var>h</var>) * <var>sar</var>
+</p>
+</dd>
+<dt> ‘<samp>hsub, vsub</samp>’</dt>
+<dd><p>horizontal and vertical chroma subsample values. For example for the
+pixel format "yuv422p" <var>hsub</var> is 2 and <var>vsub</var> is 1.
+</p></dd>
+</dl>
+
+<a name="Examples-44"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-44">30.74.1 Examples</a></h3>
+
+<ul>
+<li>
+To change the display aspect ratio to 16:9, specify one of the following:
+<table><tr><td> </td><td><pre class="example">setdar=dar=1.77777
+setdar=dar=16/9
+setdar=dar=1.77777
+</pre></td></tr></table>
+
+</li><li>
+To change the sample aspect ratio to 10:11, specify:
+<table><tr><td> </td><td><pre class="example">setsar=sar=10/11
+</pre></td></tr></table>
+
+</li><li>
+To set a display aspect ratio of 16:9, and specify a maximum integer value of
+1000 in the aspect ratio reduction, use the command:
+<table><tr><td> </td><td><pre class="example">setdar=ratio=16/9:max=1000
+</pre></td></tr></table>
+
+</li></ul>
+
+<p><a name="setfield"></a>
+</p><a name="setfield-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-setfield-1">30.75 setfield</a></h2>
+
+<p>Force field for the output video frame.
+</p>
+<p>The <code>setfield</code> filter marks the interlace type field for the
+output frames. It does not change the input frame, but only sets the
+corresponding property, which affects how the frame is treated by
+following filters (e.g. <code>fieldorder</code> or <code>yadif</code>).
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>auto</samp>’</dt>
+<dd><p>Keep the same field property.
+</p>
+</dd>
+<dt> ‘<samp>bff</samp>’</dt>
+<dd><p>Mark the frame as bottom-field-first.
+</p>
+</dd>
+<dt> ‘<samp>tff</samp>’</dt>
+<dd><p>Mark the frame as top-field-first.
+</p>
+</dd>
+<dt> ‘<samp>prog</samp>’</dt>
+<dd><p>Mark the frame as progressive.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<a name="showinfo"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-showinfo">30.76 showinfo</a></h2>
+
+<p>Show a line containing various information for each input video frame.
+The input video is not modified.
+</p>
+<p>The shown line contains a sequence of key/value pairs of the form
+<var>key</var>:<var>value</var>.
+</p>
+<p>A description of each shown parameter follows:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>sequential number of the input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+time base units. The time base unit depends on the filter input pad.
+</p>
+</dd>
+<dt> ‘<samp>pts_time</samp>’</dt>
+<dd><p>Presentation TimeStamp of the input frame, expressed as a number of
+seconds
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>position of the frame in the input stream, -1 if this information in
+unavailable and/or meaningless (for example in case of synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>fmt</samp>’</dt>
+<dd><p>pixel format name
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>sample aspect ratio of the input frame, expressed in the form
+<var>num</var>/<var>den</var>
+</p>
+</dd>
+<dt> ‘<samp>s</samp>’</dt>
+<dd><p>size of the input frame. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>i</samp>’</dt>
+<dd><p>interlaced mode ("P" for "progressive", "T" for top field first, "B"
+for bottom field first)
+</p>
+</dd>
+<dt> ‘<samp>iskey</samp>’</dt>
+<dd><p>1 if the frame is a key frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>type</samp>’</dt>
+<dd><p>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 <code>AVPictureType</code> enum and of
+the <code>av_get_picture_type_char</code> function defined in
+‘<tt>libavutil/avutil.h</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame
+</p>
+</dd>
+<dt> ‘<samp>plane_checksum</samp>’</dt>
+<dd><p>Adler-32 checksum (printed in hexadecimal) of each plane of the input frame,
+expressed in the form "[<var>c0</var> <var>c1</var> <var>c2</var> <var>c3</var>]"
+</p></dd>
+</dl>
+
+<p><a name="smartblur"></a>
+</p><a name="smartblur-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-smartblur-1">30.77 smartblur</a></h2>
+
+<p>Blur the input video without impacting the outlines.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_radius, lr</samp>’</dt>
+<dd><p>Set the luma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_strength, ls</samp>’</dt>
+<dd><p>Set the luma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>luma_threshold, lt</samp>’</dt>
+<dd><p>Set the luma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_radius, cr</samp>’</dt>
+<dd><p>Set the chroma radius. The option value must be a float number in
+the range [0.1,5.0] that specifies the variance of the gaussian filter
+used to blur the image (slower if larger). Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_strength, cs</samp>’</dt>
+<dd><p>Set the chroma strength. The option value must be a float number
+in the range [-1.0,1.0] that configures the blurring. A value included
+in [0.0,1.0] will blur the image whereas a value included in
+[-1.0,0.0] will sharpen the image. Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_threshold, ct</samp>’</dt>
+<dd><p>Set the chroma threshold used as a coefficient to determine
+whether a pixel should be blurred or not. The option value must be an
+integer in the range [-30,30]. A value of 0 will filter all the image,
+a value included in [0,30] will filter flat areas and a value included
+in [-30,0] will filter edges. Default value is 0.
+</p></dd>
+</dl>
+
+<p>If a chroma option is not explicitly set, the corresponding luma value
+is set.
+</p>
+<a name="stereo3d"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-stereo3d">30.78 stereo3d</a></h2>
+
+<p>Convert between different stereoscopic image formats.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>in</samp>’</dt>
+<dd><p>Set stereoscopic image format of input.
+</p>
+<p>Available values for input image formats are:
+</p><dl compact="compact">
+<dt> ‘<samp>sbsl</samp>’</dt>
+<dd><p>side by side parallel (left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbsr</samp>’</dt>
+<dd><p>side by side crosseye (right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2l</samp>’</dt>
+<dd><p>side by side parallel with half width resolution
+(left eye left, right eye right)
+</p>
+</dd>
+<dt> ‘<samp>sbs2r</samp>’</dt>
+<dd><p>side by side crosseye with half width resolution
+(right eye left, left eye right)
+</p>
+</dd>
+<dt> ‘<samp>abl</samp>’</dt>
+<dd><p>above-below (left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>abr</samp>’</dt>
+<dd><p>above-below (right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2l</samp>’</dt>
+<dd><p>above-below with half height resolution
+(left eye above, right eye below)
+</p>
+</dd>
+<dt> ‘<samp>ab2r</samp>’</dt>
+<dd><p>above-below with half height resolution
+(right eye above, left eye below)
+</p>
+</dd>
+<dt> ‘<samp>al</samp>’</dt>
+<dd><p>alternating frames (left eye first, right eye second)
+</p>
+</dd>
+<dt> ‘<samp>ar</samp>’</dt>
+<dd><p>alternating frames (right eye first, left eye second)
+</p>
+<p>Default value is ‘<samp>sbsl</samp>’.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>out</samp>’</dt>
+<dd><p>Set stereoscopic image format of output.
+</p>
+<p>Available values for output image formats are all the input formats as well as:
+</p><dl compact="compact">
+<dt> ‘<samp>arbg</samp>’</dt>
+<dd><p>anaglyph red/blue gray
+(red filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>argg</samp>’</dt>
+<dd><p>anaglyph red/green gray
+(red filter on left eye, green filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcg</samp>’</dt>
+<dd><p>anaglyph red/cyan gray
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arch</samp>’</dt>
+<dd><p>anaglyph red/cyan half colored
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcc</samp>’</dt>
+<dd><p>anaglyph red/cyan color
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>arcd</samp>’</dt>
+<dd><p>anaglyph red/cyan color optimized with the least squares projection of dubois
+(red filter on left eye, cyan filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmg</samp>’</dt>
+<dd><p>anaglyph green/magenta gray
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmh</samp>’</dt>
+<dd><p>anaglyph green/magenta half colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmc</samp>’</dt>
+<dd><p>anaglyph green/magenta colored
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>agmd</samp>’</dt>
+<dd><p>anaglyph green/magenta color optimized with the least squares projection of dubois
+(green filter on left eye, magenta filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybg</samp>’</dt>
+<dd><p>anaglyph yellow/blue gray
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybh</samp>’</dt>
+<dd><p>anaglyph yellow/blue half colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybc</samp>’</dt>
+<dd><p>anaglyph yellow/blue colored
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>aybd</samp>’</dt>
+<dd><p>anaglyph yellow/blue color optimized with the least squares projection of dubois
+(yellow filter on left eye, blue filter on right eye)
+</p>
+</dd>
+<dt> ‘<samp>irl</samp>’</dt>
+<dd><p>interleaved rows (left eye has top row, right eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>irr</samp>’</dt>
+<dd><p>interleaved rows (right eye has top row, left eye starts on next row)
+</p>
+</dd>
+<dt> ‘<samp>ml</samp>’</dt>
+<dd><p>mono output (left eye only)
+</p>
+</dd>
+<dt> ‘<samp>mr</samp>’</dt>
+<dd><p>mono output (right eye only)
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>arcd</samp>’.
+</p></dd>
+</dl>
+
+<a name="Examples-1"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-1">30.78.1 Examples</a></h3>
+
+<ul>
+<li>
+Convert input video from side by side parallel to anaglyph yellow/blue dubois:
+<table><tr><td> </td><td><pre class="example">stereo3d=sbsl:aybd
+</pre></td></tr></table>
+
+</li><li>
+Convert input video from above bellow (left eye above, right eye below) to side by side crosseye.
+<table><tr><td> </td><td><pre class="example">stereo3d=abl:sbsr
+</pre></td></tr></table>
+</li></ul>
+
+<a name="spp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-spp">30.79 spp</a></h2>
+
+<p>Apply a simple postprocessing filter that compresses and decompresses the image
+at several (or - in the case of ‘<samp>quality</samp>’ level <code>6</code> - all) shifts
+and average the results.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>quality</samp>’</dt>
+<dd><p>Set quality. This option defines the number of levels for averaging. It accepts
+an integer in the range 0-6. If set to <code>0</code>, the filter will have no
+effect. A value of <code>6</code> means the higher quality. For each increment of
+that value the speed drops by a factor of approximately 2. Default value is
+<code>3</code>.
+</p>
+</dd>
+<dt> ‘<samp>qp</samp>’</dt>
+<dd><p>Force a constant quantization parameter. If not set, the filter will use the QP
+from the video stream (if available).
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set thresholding mode. Available modes are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hard</samp>’</dt>
+<dd><p>Set hard thresholding (default).
+</p></dd>
+<dt> ‘<samp>soft</samp>’</dt>
+<dd><p>Set soft thresholding (better de-ringing effect, but likely blurrier).
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>use_bframe_qp</samp>’</dt>
+<dd><p>Enable the use of the QP from the B-Frames if set to <code>1</code>. Using this
+option may cause flicker since the B-Frames have often larger QP. Default is
+<code>0</code> (not enabled).
+</p></dd>
+</dl>
+
+<p><a name="subtitles"></a>
+</p><a name="subtitles-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-subtitles-1">30.80 subtitles</a></h2>
+
+<p>Draw subtitles on top of input video using the libass library.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libass</code>. This filter also requires a build with libavcodec and
+libavformat to convert the passed subtitles file to ASS (Advanced Substation
+Alpha) subtitles format.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the subtitle file to read. It must be specified.
+</p>
+</dd>
+<dt> ‘<samp>original_size</samp>’</dt>
+<dd><p>Specify the size of the original video, the video for which the ASS file
+was composed. For the syntax of this option, check the "Video size" section in
+the ffmpeg-utils manual. Due to a misdesign in ASS aspect ratio arithmetic,
+this is necessary to correctly scale the fonts if the aspect ratio has been
+changed.
+</p>
+</dd>
+<dt> ‘<samp>charenc</samp>’</dt>
+<dd><p>Set subtitles input character encoding. <code>subtitles</code> filter only. Only
+useful if not UTF-8.
+</p></dd>
+</dl>
+
+<p>If the first key is not specified, it is assumed that the first value
+specifies the ‘<samp>filename</samp>’.
+</p>
+<p>For example, to render the file ‘<tt>sub.srt</tt>’ on top of the input
+video, use the command:
+</p><table><tr><td> </td><td><pre class="example">subtitles=sub.srt
+</pre></td></tr></table>
+
+<p>which is equivalent to:
+</p><table><tr><td> </td><td><pre class="example">subtitles=filename=sub.srt
+</pre></td></tr></table>
+
+<a name="super2xsai"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-super2xsai">30.81 super2xsai</a></h2>
+
+<p>Scale the input by 2x and smooth using the Super2xSaI (Scale and
+Interpolate) pixel art scaling algorithm.
+</p>
+<p>Useful for enlarging pixel art images without reducing sharpness.
+</p>
+<a name="swapuv"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-swapuv">30.82 swapuv</a></h2>
+<p>Swap U & V plane.
+</p>
+<a name="telecine"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-telecine">30.83 telecine</a></h2>
+
+<p>Apply telecine process to the video.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>first_field</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>top, t</samp>’</dt>
+<dd><p>top field first
+</p></dd>
+<dt> ‘<samp>bottom, b</samp>’</dt>
+<dd><p>bottom field first
+The default value is <code>top</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>pattern</samp>’</dt>
+<dd><p>A string of numbers representing the pulldown pattern you wish to apply.
+The default value is <code>23</code>.
+</p></dd>
+</dl>
+
+<table><tr><td> </td><td><pre class="example">Some typical patterns:
+
+NTSC output (30i):
+27.5p: 32222
+24p: 23 (classic)
+24p: 2332 (preferred)
+20p: 33
+18p: 334
+16p: 3444
+
+PAL output (25i):
+27.5p: 12222
+24p: 222222222223 ("Euro pulldown")
+16.67p: 33
+16p: 33333334
+</pre></td></tr></table>
+
+<a name="thumbnail"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-thumbnail">30.84 thumbnail</a></h2>
+<p>Select the most representative frame in a given sequence of consecutive frames.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the frames batch size to analyze; in a set of <var>n</var> frames, the filter
+will pick one of them, and then handle the next batch of <var>n</var> frames until
+the end. Default is <code>100</code>.
+</p></dd>
+</dl>
+
+<p>Since the filter keeps track of the whole frames sequence, a bigger <var>n</var>
+value will result in a higher memory usage, so a high value is not recommended.
+</p>
+<a name="Examples-3"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-3">30.84.1 Examples</a></h3>
+
+<ul>
+<li>
+Extract one picture each 50 frames:
+<table><tr><td> </td><td><pre class="example">thumbnail=50
+</pre></td></tr></table>
+
+</li><li>
+Complete example of a thumbnail creation with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tile"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-tile">30.85 tile</a></h2>
+
+<p>Tile several successive frames together.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>layout</samp>’</dt>
+<dd><p>Set the grid size (i.e. the number of lines and columns). For the syntax of
+this option, check the "Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>nb_frames</samp>’</dt>
+<dd><p>Set the maximum number of frames to render in the given area. It must be less
+than or equal to <var>w</var>x<var>h</var>. The default value is <code>0</code>, meaning all
+the area will be used.
+</p>
+</dd>
+<dt> ‘<samp>margin</samp>’</dt>
+<dd><p>Set the outer border margin in pixels.
+</p>
+</dd>
+<dt> ‘<samp>padding</samp>’</dt>
+<dd><p>Set the inner border thickness (i.e. the number of pixels between frames). For
+more advanced padding options (such as having different values for the edges),
+refer to the pad video filter.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify the color of the unused areaFor the syntax of this option, check the
+"Color" section in the ffmpeg-utils manual. The default value of <var>color</var>
+is "black".
+</p></dd>
+</dl>
+
+<a name="Examples-55"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-55">30.85.1 Examples</a></h3>
+
+<ul>
+<li>
+Produce 8x8 PNG tiles of all keyframes (‘<samp>-skip_frame nokey</samp>’) in a movie:
+<table><tr><td> </td><td><pre class="example">ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
+</pre></td></tr></table>
+<p>The ‘<samp>-vsync 0</samp>’ is necessary to prevent <code>ffmpeg</code> from
+duplicating each output frame to accommodate the originally detected frame
+rate.
+</p>
+</li><li>
+Display <code>5</code> pictures in an area of <code>3x2</code> frames,
+with <code>7</code> pixels between them, and <code>2</code> pixels of initial margin, using
+mixed flat and named options:
+<table><tr><td> </td><td><pre class="example">tile=3x2:nb_frames=5:padding=7:margin=2
+</pre></td></tr></table>
+</li></ul>
+
+<a name="tinterlace"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-tinterlace">30.86 tinterlace</a></h2>
+
+<p>Perform various types of temporal field interlacing.
+</p>
+<p>Frames are counted starting from 1, so the first input frame is
+considered odd.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify the mode of the interlacing. This option can also be specified
+as a value alone. See below for a list of values for this option.
+</p>
+<p>Available values are:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>merge, 0</samp>’</dt>
+<dd><p>Move odd frames into the upper field, even into the lower field,
+generating a double height frame at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_odd, 1</samp>’</dt>
+<dd><p>Only output even frames, odd frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>drop_even, 2</samp>’</dt>
+<dd><p>Only output odd frames, even frames are dropped, generating a frame with
+unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>pad, 3</samp>’</dt>
+<dd><p>Expand each frame to full height, but pad alternate lines with black,
+generating a frame with double height at the same input frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_top, 4</samp>’</dt>
+<dd><p>Interleave the upper field from odd frames with the lower field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interleave_bottom, 5</samp>’</dt>
+<dd><p>Interleave the lower field from odd frames with the upper field from
+even frames, generating a frame with unchanged height at half frame rate.
+</p>
+</dd>
+<dt> ‘<samp>interlacex2, 6</samp>’</dt>
+<dd><p>Double frame rate with unchanged height. Frames are inserted each
+containing the second temporal field from the previous input frame and
+the first temporal field from the next input frame. This mode relies on
+the top_field_first flag. Useful for interlaced video displays with no
+field synchronisation.
+</p></dd>
+</dl>
+
+<p>Numeric values are deprecated but are accepted for backward
+compatibility reasons.
+</p>
+<p>Default mode is <code>merge</code>.
+</p>
+</dd>
+<dt> ‘<samp>flags</samp>’</dt>
+<dd><p>Specify flags influencing the filter process.
+</p>
+<p>Available value for <var>flags</var> is:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>low_pass_filter, vlfp</samp>’</dt>
+<dd><p>Enable vertical low-pass filtering in the filter.
+Vertical low-pass filtering is required when creating an interlaced
+destination from a progressive source which contains high-frequency
+vertical detail. Filtering will reduce interlace ’twitter’ and Moire
+patterning.
+</p>
+<p>Vertical low-pass filtering can only be enabled for ‘<samp>mode</samp>’
+<var>interleave_top</var> and <var>interleave_bottom</var>.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<a name="transpose"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-transpose">30.87 transpose</a></h2>
+
+<p>Transpose rows with columns in the input video and optionally flip it.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>dir</samp>’</dt>
+<dd><p>Specify the transposition direction.
+</p>
+<p>Can assume the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>0, 4, cclock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise and vertically flip (default), that is:
+</p><table><tr><td> </td><td><pre class="example">L.R L.l
+. . -> . .
+l.r R.r
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>1, 5, clock</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R l.L
+. . -> . .
+l.r r.R
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>2, 6, cclock</samp>’</dt>
+<dd><p>Rotate by 90 degrees counterclockwise, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R R.r
+. . -> . .
+l.r L.l
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>3, 7, clock_flip</samp>’</dt>
+<dd><p>Rotate by 90 degrees clockwise and vertically flip, that is:
+</p><table><tr><td> </td><td><pre class="example">L.R r.R
+. . -> . .
+l.r l.L
+</pre></td></tr></table>
+</dd>
+</dl>
+
+<p>For values between 4-7, the transposition is only done if the input
+video geometry is portrait and not landscape. These values are
+deprecated, the <code>passthrough</code> option should be used instead.
+</p>
+<p>Numerical values are deprecated, and should be dropped in favor of
+symbolic constants.
+</p>
+</dd>
+<dt> ‘<samp>passthrough</samp>’</dt>
+<dd><p>Do not apply the transposition if the input geometry matches the one
+specified by the specified value. It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Always apply transposition.
+</p></dd>
+<dt> ‘<samp>portrait</samp>’</dt>
+<dd><p>Preserve portrait geometry (when <var>height</var> >= <var>width</var>).
+</p></dd>
+<dt> ‘<samp>landscape</samp>’</dt>
+<dd><p>Preserve landscape geometry (when <var>width</var> >= <var>height</var>).
+</p></dd>
+</dl>
+
+<p>Default value is <code>none</code>.
+</p></dd>
+</dl>
+
+<p>For example to rotate by 90 degrees clockwise and preserve portrait
+layout:
+</p><table><tr><td> </td><td><pre class="example">transpose=dir=1:passthrough=portrait
+</pre></td></tr></table>
+
+<p>The command above can also be specified as:
+</p><table><tr><td> </td><td><pre class="example">transpose=1:portrait
+</pre></td></tr></table>
+
+<a name="trim"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-trim">30.88 trim</a></h2>
+<p>Trim the input so that the output contains one continuous subpart of the input.
+</p>
+<p>This filter accepts the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>start</samp>’</dt>
+<dd><p>Specify time of the start of the kept section, i.e. the frame with the
+timestamp <var>start</var> will be the first frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>end</samp>’</dt>
+<dd><p>Specify time of the first frame that will be dropped, i.e. the frame
+immediately preceding the one with the timestamp <var>end</var> will be the last
+frame in the output.
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>Same as <var>start</var>, except this option sets the start timestamp in timebase
+units instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Same as <var>end</var>, except this option sets the end timestamp in timebase units
+instead of seconds.
+</p>
+</dd>
+<dt> ‘<samp>duration</samp>’</dt>
+<dd><p>Specify maximum duration of the output.
+</p>
+</dd>
+<dt> ‘<samp>start_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be passed to output.
+</p>
+</dd>
+<dt> ‘<samp>end_frame</samp>’</dt>
+<dd><p>Number of the first frame that should be dropped.
+</p></dd>
+</dl>
+
+<p>‘<samp>start</samp>’, ‘<samp>end</samp>’, ‘<samp>duration</samp>’ are expressed as time
+duration specifications, check the "Time duration" section in the
+ffmpeg-utils manual.
+</p>
+<p>Note that the first two sets of the start/end options and the ‘<samp>duration</samp>’
+option look at the frame timestamp, while the _frame variants simply count the
+frames that pass through the filter. Also note that this filter does not modify
+the timestamps. If you wish that the output timestamps start at zero, insert a
+setpts filter after the trim filter.
+</p>
+<p>If multiple start or end options are set, this filter tries to be greedy and
+keep all the frames that match at least one of the specified constraints. To keep
+only the part that matches all the constraints at once, chain multiple trim
+filters.
+</p>
+<p>The defaults are such that all the input is kept. So it is possible to set e.g.
+just the end values to keep everything before the specified time.
+</p>
+<p>Examples:
+</p><ul>
+<li>
+drop everything except the second minute of input
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=60:120
+</pre></td></tr></table>
+
+</li><li>
+keep only the first second
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -vf trim=duration=1
+</pre></td></tr></table>
+
+</li></ul>
+
+
+<a name="unsharp"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-unsharp">30.89 unsharp</a></h2>
+
+<p>Sharpen or blur the input video.
+</p>
+<p>It accepts the following parameters:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>luma_msize_x, lx</samp>’</dt>
+<dd><p>Set the luma matrix horizontal size. It must be an odd integer between
+3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_msize_y, ly</samp>’</dt>
+<dd><p>Set the luma matrix vertical size. It must be an odd integer between 3
+and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>luma_amount, la</samp>’</dt>
+<dd><p>Set the luma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 1.0.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_x, cx</samp>’</dt>
+<dd><p>Set the chroma matrix horizontal size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_msize_y, cy</samp>’</dt>
+<dd><p>Set the chroma matrix vertical size. It must be an odd integer
+between 3 and 63, default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>chroma_amount, ca</samp>’</dt>
+<dd><p>Set the chroma effect strength. It can be a float number, reasonable
+values lay between -1.5 and 1.5.
+</p>
+<p>Negative values will blur the input video, while positive values will
+sharpen it, a value of zero will disable the effect.
+</p>
+<p>Default value is 0.0.
+</p>
+</dd>
+<dt> ‘<samp>opencl</samp>’</dt>
+<dd><p>If set to 1, specify using OpenCL capabilities, only available if
+FFmpeg was configured with <code>--enable-opencl</code>. Default value is 0.
+</p>
+</dd>
+</dl>
+
+<p>All parameters are optional and default to the equivalent of the
+string ’5:5:1.0:5:5:0.0’.
+</p>
+<a name="Examples-56"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-56">30.89.1 Examples</a></h3>
+
+<ul>
+<li>
+Apply strong luma sharpen effect:
+<table><tr><td> </td><td><pre class="example">unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
+</pre></td></tr></table>
+
+</li><li>
+Apply strong blur of both luma and chroma parameters:
+<table><tr><td> </td><td><pre class="example">unsharp=7:7:-2:7:7:-2
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabdetect"></a>
+</p><a name="vidstabdetect-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-vidstabdetect-1">30.90 vidstabdetect</a></h2>
+
+<p>Analyze video stabilization/deshaking. Perform pass 1 of 2, see
+<a href="#vidstabtransform">vidstabtransform</a> for pass 2.
+</p>
+<p>This filter generates a file with relative translation and rotation
+transform information about subsequent frames, which is then used by
+the <a href="#vidstabtransform">vidstabtransform</a> filter.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>result</samp>’</dt>
+<dd><p>Set the path to the file used to write the transforms information.
+Default value is ‘<tt>transforms.trf</tt>’.
+</p>
+</dd>
+<dt> ‘<samp>shakiness</samp>’</dt>
+<dd><p>Set how shaky the video is and how quick the camera is. It accepts an
+integer in the range 1-10, a value of 1 means little shakiness, a
+value of 10 means strong shakiness. Default value is 5.
+</p>
+</dd>
+<dt> ‘<samp>accuracy</samp>’</dt>
+<dd><p>Set the accuracy of the detection process. It must be a value in the
+range 1-15. A value of 1 means low accuracy, a value of 15 means high
+accuracy. Default value is 15.
+</p>
+</dd>
+<dt> ‘<samp>stepsize</samp>’</dt>
+<dd><p>Set stepsize of the search process. The region around minimum is
+scanned with 1 pixel resolution. Default value is 6.
+</p>
+</dd>
+<dt> ‘<samp>mincontrast</samp>’</dt>
+<dd><p>Set minimum contrast. Below this value a local measurement field is
+discarded. Must be a floating point value in the range 0-1. Default
+value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Set reference frame number for tripod mode.
+</p>
+<p>If enabled, the motion of the frames is compared to a reference frame
+in the filtered stream, identified by the specified number. The idea
+is to compensate all movements in a more-or-less static scene and keep
+the camera view absolutely still.
+</p>
+<p>If set to 0, it is disabled. The frames are counted starting from 1.
+</p>
+</dd>
+<dt> ‘<samp>show</samp>’</dt>
+<dd><p>Show fields and transforms in the resulting frames. It accepts an
+integer in the range 0-2. Default value is 0, which disables any
+visualization.
+</p></dd>
+</dl>
+
+<a name="Examples-46"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-46">30.90.1 Examples</a></h3>
+
+<ul>
+<li>
+Use default values:
+<table><tr><td> </td><td><pre class="example">vidstabdetect
+</pre></td></tr></table>
+
+</li><li>
+Analyze strongly shaky movie and put the results in file
+‘<tt>mytransforms.trf</tt>’:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Visualize the result of internal transformations in the resulting
+video:
+<table><tr><td> </td><td><pre class="example">vidstabdetect=show=1
+</pre></td></tr></table>
+
+</li><li>
+Analyze a video with medium shakiness using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="vidstabtransform"></a>
+</p><a name="vidstabtransform-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-vidstabtransform-1">30.91 vidstabtransform</a></h2>
+
+<p>Video stabilization/deshaking: pass 2 of 2,
+see <a href="#vidstabdetect">vidstabdetect</a> for pass 1.
+</p>
+<p>Read a file with transform information for each frame and
+apply/compensate them. Together with the <a href="#vidstabdetect">vidstabdetect</a>
+filter this can be used to deshake videos. See also
+<a href="http://public.hronopik.de/vid.stab">http://public.hronopik.de/vid.stab</a>. It is important to also use
+the unsharp filter, see below.
+</p>
+<p>To enable compilation of this filter you need to configure FFmpeg with
+<code>--enable-libvidstab</code>.
+</p>
+<a name="Options-10"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Options-10">30.91.1 Options</a></h3>
+
+<dl compact="compact">
+<dt> ‘<samp>input</samp>’</dt>
+<dd><p>Set path to the file used to read the transforms. Default value is
+‘<tt>transforms.trf</tt>’).
+</p>
+</dd>
+<dt> ‘<samp>smoothing</samp>’</dt>
+<dd><p>Set the number of frames (value*2 + 1) used for lowpass filtering the
+camera movements. Default value is 10.
+</p>
+<p>For example a number of 10 means that 21 frames are used (10 in the
+past and 10 in the future) to smoothen the motion in the video. A
+larger values leads to a smoother video, but limits the acceleration
+of the camera (pan/tilt movements). 0 is a special case where a
+static camera is simulated.
+</p>
+</dd>
+<dt> ‘<samp>optalgo</samp>’</dt>
+<dd><p>Set the camera path optimization algorithm.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>gauss</samp>’</dt>
+<dd><p>gaussian kernel low-pass filter on camera motion (default)
+</p></dd>
+<dt> ‘<samp>avg</samp>’</dt>
+<dd><p>averaging on transformations
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>maxshift</samp>’</dt>
+<dd><p>Set maximal number of pixels to translate frames. Default value is -1,
+meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>maxangle</samp>’</dt>
+<dd><p>Set maximal angle in radians (degree*PI/180) to rotate frames. Default
+value is -1, meaning no limit.
+</p>
+</dd>
+<dt> ‘<samp>crop</samp>’</dt>
+<dd><p>Specify how to deal with borders that may be visible due to movement
+compensation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>keep</samp>’</dt>
+<dd><p>keep image information from previous frame (default)
+</p></dd>
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>fill the border black
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>invert</samp>’</dt>
+<dd><p>Invert transforms if set to 1. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>relative</samp>’</dt>
+<dd><p>Consider transforms as relative to previsou frame if set to 1,
+absolute if set to 0. Default value is 0.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set percentage to zoom. A positive value will result in a zoom-in
+effect, a negative value in a zoom-out effect. Default value is 0 (no
+zoom).
+</p>
+</dd>
+<dt> ‘<samp>optzoom</samp>’</dt>
+<dd><p>Set optimal zooming to avoid borders.
+</p>
+<p>Accepted values are:
+</p><dl compact="compact">
+<dt> ‘<samp>0</samp>’</dt>
+<dd><p>disabled
+</p></dd>
+<dt> ‘<samp>1</samp>’</dt>
+<dd><p>optimal static zoom value is determined (only very strong movements
+will lead to visible borders) (default)
+</p></dd>
+<dt> ‘<samp>2</samp>’</dt>
+<dd><p>optimal adaptive zoom value is determined (no borders will be
+visible), see ‘<samp>zoomspeed</samp>’
+</p></dd>
+</dl>
+
+<p>Note that the value given at zoom is added to the one calculated here.
+</p>
+</dd>
+<dt> ‘<samp>zoomspeed</samp>’</dt>
+<dd><p>Set percent to zoom maximally each frame (enabled when
+‘<samp>optzoom</samp>’ is set to 2). Range is from 0 to 5, default value is
+0.25.
+</p>
+</dd>
+<dt> ‘<samp>interpol</samp>’</dt>
+<dd><p>Specify type of interpolation.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>no</samp>’</dt>
+<dd><p>no interpolation
+</p></dd>
+<dt> ‘<samp>linear</samp>’</dt>
+<dd><p>linear only horizontal
+</p></dd>
+<dt> ‘<samp>bilinear</samp>’</dt>
+<dd><p>linear in both directions (default)
+</p></dd>
+<dt> ‘<samp>bicubic</samp>’</dt>
+<dd><p>cubic in both directions (slow)
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>tripod</samp>’</dt>
+<dd><p>Enable virtual tripod mode if set to 1, which is equivalent to
+<code>relative=0:smoothing=0</code>. Default value is 0.
+</p>
+<p>Use also <code>tripod</code> option of <a href="#vidstabdetect">vidstabdetect</a>.
+</p>
+</dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Increase log verbosity if set to 1. Also the detected global motions
+are written to the temporary file ‘<tt>global_motions.trf</tt>’. Default
+value is 0.
+</p></dd>
+</dl>
+
+<a name="Examples-24"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-24">30.91.2 Examples</a></h3>
+
+<ul>
+<li>
+Use <code>ffmpeg</code> for a typical stabilization with default values:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
+</pre></td></tr></table>
+
+<p>Note the use of the unsharp filter which is always recommended.
+</p>
+</li><li>
+Zoom in a bit more and load transform data from a given file:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=zoom=5:input="mytransforms.trf"
+</pre></td></tr></table>
+
+</li><li>
+Smoothen the video even more:
+<table><tr><td> </td><td><pre class="example">vidstabtransform=smoothing=30
+</pre></td></tr></table>
+</li></ul>
+
+<a name="vflip"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-vflip">30.92 vflip</a></h2>
+
+<p>Flip the input video vertically.
+</p>
+<p>For example, to vertically flip a video with <code>ffmpeg</code>:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i in.avi -vf "vflip" out.avi
+</pre></td></tr></table>
+
+<a name="vignette"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-vignette">30.93 vignette</a></h2>
+
+<p>Make or reverse a natural vignetting effect.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>angle, a</samp>’</dt>
+<dd><p>Set lens angle expression as a number of radians.
+</p>
+<p>The value is clipped in the <code>[0,PI/2]</code> range.
+</p>
+<p>Default value: <code>"PI/5"</code>
+</p>
+</dd>
+<dt> ‘<samp>x0</samp>’</dt>
+<dt> ‘<samp>y0</samp>’</dt>
+<dd><p>Set center coordinates expressions. Respectively <code>"w/2"</code> and <code>"h/2"</code>
+by default.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set forward/backward mode.
+</p>
+<p>Available modes are:
+</p><dl compact="compact">
+<dt> ‘<samp>forward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the darker the image becomes.
+</p>
+</dd>
+<dt> ‘<samp>backward</samp>’</dt>
+<dd><p>The larger the distance from the central point, the brighter the image becomes.
+This can be used to reverse a vignette effect, though there is no automatic
+detection to extract the lens ‘<samp>angle</samp>’ and other settings (yet). It can
+also be used to create a burning effect.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>forward</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>eval</samp>’</dt>
+<dd><p>Set evaluation mode for the expressions (‘<samp>angle</samp>’, ‘<samp>x0</samp>’, ‘<samp>y0</samp>’).
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>init</samp>’</dt>
+<dd><p>Evaluate expressions only once during the filter initialization.
+</p>
+</dd>
+<dt> ‘<samp>frame</samp>’</dt>
+<dd><p>Evaluate expressions for each incoming frame. This is way slower than the
+‘<samp>init</samp>’ mode since it requires all the scalers to be re-computed, but it
+allows advanced dynamic expressions.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>init</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>dither</samp>’</dt>
+<dd><p>Set dithering to reduce the circular banding effects. Default is <code>1</code>
+(enabled).
+</p>
+</dd>
+<dt> ‘<samp>aspect</samp>’</dt>
+<dd><p>Set vignette aspect. This setting allows one to adjust the shape of the vignette.
+Setting this value to the SAR of the input will make a rectangular vignetting
+following the dimensions of the video.
+</p>
+<p>Default is <code>1/1</code>.
+</p></dd>
+</dl>
+
+<a name="Expressions"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Expressions">30.93.1 Expressions</a></h3>
+
+<p>The ‘<samp>alpha</samp>’, ‘<samp>x0</samp>’ and ‘<samp>y0</samp>’ expressions can contain the
+following parameters.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>w</samp>’</dt>
+<dt> ‘<samp>h</samp>’</dt>
+<dd><p>input width and height
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the number of input frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) time of the filtered video frame, expressed in
+<var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>r</samp>’</dt>
+<dd><p>frame rate of the input video, NAN if the input frame rate is unknown
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>tb</samp>’</dt>
+<dd><p>time base of the input video
+</p></dd>
+</dl>
+
+
+<a name="Examples-65"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-65">30.93.2 Examples</a></h3>
+
+<ul>
+<li>
+Apply simple strong vignetting effect:
+<table><tr><td> </td><td><pre class="example">vignette=PI/4
+</pre></td></tr></table>
+
+</li><li>
+Make a flickering vignetting:
+<table><tr><td> </td><td><pre class="example">vignette='PI/4+random(1)*PI/50':eval=frame
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="w3fdif"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-w3fdif">30.94 w3fdif</a></h2>
+
+<p>Deinterlace the input video ("w3fdif" stands for "Weston 3 Field
+Deinterlacing Filter").
+</p>
+<p>Based on the process described by Martin Weston for BBC R&D, and
+implemented based on the de-interlace algorithm written by Jim
+Easterbrook for BBC R&D, the Weston 3 field deinterlacing filter
+uses filter coefficients calculated by BBC R&D.
+</p>
+<p>There are two sets of filter coefficients, so called "simple":
+and "complex". Which set of filter coefficients is used can
+be set by passing an optional parameter:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filter</samp>’</dt>
+<dd><p>Set the interlacing filter coefficients. Accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>simple</samp>’</dt>
+<dd><p>Simple filter coefficient set.
+</p></dd>
+<dt> ‘<samp>complex</samp>’</dt>
+<dd><p>More-complex filter coefficient set.
+</p></dd>
+</dl>
+<p>Default value is ‘<samp>complex</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>all</samp>’</dt>
+<dd><p>Deinterlace all frames,
+</p></dd>
+<dt> ‘<samp>interlaced</samp>’</dt>
+<dd><p>Only deinterlace frames marked as interlaced.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>all</samp>’.
+</p></dd>
+</dl>
+
+<p><a name="yadif"></a>
+</p><a name="yadif-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-yadif-1">30.95 yadif</a></h2>
+
+<p>Deinterlace the input video ("yadif" means "yet another deinterlacing
+filter").
+</p>
+<p>This filter accepts the following options:
+</p>
+
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>The interlacing mode to adopt, accepts one of the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, send_frame</samp>’</dt>
+<dd><p>output 1 frame for each frame
+</p></dd>
+<dt> ‘<samp>1, send_field</samp>’</dt>
+<dd><p>output 1 frame for each field
+</p></dd>
+<dt> ‘<samp>2, send_frame_nospatial</samp>’</dt>
+<dd><p>like <code>send_frame</code> but skip spatial interlacing check
+</p></dd>
+<dt> ‘<samp>3, send_field_nospatial</samp>’</dt>
+<dd><p>like <code>send_field</code> but skip spatial interlacing check
+</p></dd>
+</dl>
+
+<p>Default value is <code>send_frame</code>.
+</p>
+</dd>
+<dt> ‘<samp>parity</samp>’</dt>
+<dd><p>The picture field parity assumed for the input interlaced video, accepts one of
+the following values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, tff</samp>’</dt>
+<dd><p>assume top field first
+</p></dd>
+<dt> ‘<samp>1, bff</samp>’</dt>
+<dd><p>assume bottom field first
+</p></dd>
+<dt> ‘<samp>-1, auto</samp>’</dt>
+<dd><p>enable automatic detection
+</p></dd>
+</dl>
+
+<p>Default value is <code>auto</code>.
+If interlacing is unknown or decoder does not export this information,
+top field first will be assumed.
+</p>
+</dd>
+<dt> ‘<samp>deint</samp>’</dt>
+<dd><p>Specify which frames to deinterlace. Accept one of the following
+values:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>0, all</samp>’</dt>
+<dd><p>deinterlace all frames
+</p></dd>
+<dt> ‘<samp>1, interlaced</samp>’</dt>
+<dd><p>only deinterlace frames marked as interlaced
+</p></dd>
+</dl>
+
+<p>Default value is <code>all</code>.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sources"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Video-Sources">31. Video Sources</a></h1>
+
+<p>Below is a description of the currently available video sources.
+</p>
+<a name="buffer"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-buffer">31.1 buffer</a></h2>
+
+<p>Buffer video frames, and make them available to the filter chain.
+</p>
+<p>This source is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/vsrc_buffer.h</tt>’.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video_size</samp>’</dt>
+<dd><p>Specify the size (width and height) of the buffered video frames. For the
+syntax of this option, check the "Video size" section in the ffmpeg-utils
+manual.
+</p>
+</dd>
+<dt> ‘<samp>width</samp>’</dt>
+<dd><p>Input video width.
+</p>
+</dd>
+<dt> ‘<samp>height</samp>’</dt>
+<dd><p>Input video height.
+</p>
+</dd>
+<dt> ‘<samp>pix_fmt</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>time_base</samp>’</dt>
+<dd><p>Specify the timebase assumed by the timestamps of the buffered frames.
+</p>
+</dd>
+<dt> ‘<samp>frame_rate</samp>’</dt>
+<dd><p>Specify the frame rate expected for the video stream.
+</p>
+</dd>
+<dt> ‘<samp>pixel_aspect, sar</samp>’</dt>
+<dd><p>Specify the sample aspect ratio assumed by the video frames.
+</p>
+</dd>
+<dt> ‘<samp>sws_param</samp>’</dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>For example:
+</p><table><tr><td> </td><td><pre class="example">buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
+</pre></td></tr></table>
+
+<p>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 AVPixelFormat definition in ‘<tt>libavutil/pixfmt.h</tt>’),
+this example corresponds to:
+</p><table><tr><td> </td><td><pre class="example">buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
+</pre></td></tr></table>
+
+<p>Alternatively, the options can be specified as a flat string, but this
+syntax is deprecated:
+</p>
+<p><var>width</var>:<var>height</var>:<var>pix_fmt</var>:<var>time_base.num</var>:<var>time_base.den</var>:<var>pixel_aspect.num</var>:<var>pixel_aspect.den</var>[:<var>sws_param</var>]
+</p>
+<a name="cellauto"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-cellauto">31.2 cellauto</a></h2>
+
+<p>Create a pattern generated by an elementary cellular automaton.
+</p>
+<p>The initial state of the cellular automaton can be defined through the
+‘<samp>filename</samp>’, and ‘<samp>pattern</samp>’ options. If such options are
+not specified an initial state is created randomly.
+</p>
+<p>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 ‘<samp>scroll</samp>’ option.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>pattern, p</samp>’</dt>
+<dd><p>Read the initial cellular automaton state, i.e. the starting row, from
+the specified string.
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+<p>This option is ignored when a file or a pattern is specified.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the cellular automaton rule, it is a number ranging from 0 to 255.
+Default value is 110.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ or ‘<samp>pattern</samp>’ is specified, the size is set
+by default to the width of the specified initial state row, and the
+height is set to <var>width</var> * PHI.
+</p>
+<p>If ‘<samp>size</samp>’ is set, it must contain the width of the specified
+pattern string, and the specified pattern will be centered in the
+larger row.
+</p>
+<p>If a filename or a pattern string is not specified, the size value
+defaults to "320x518" (used for a randomly generated initial state).
+</p>
+</dd>
+<dt> ‘<samp>scroll</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>start_full, full</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right row edges together.
+This is the default behavior, for disabling set the value to 0.
+</p></dd>
+</dl>
+
+<a name="Examples-11"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-11">31.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Read the initial state from ‘<tt>pattern</tt>’, and specify an output of
+size 200x400.
+<table><tr><td> </td><td><pre class="example">cellauto=f=pattern:s=200x400
+</pre></td></tr></table>
+
+</li><li>
+Generate a random initial row with a width of 200 cells, with a fill
+ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">cellauto=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Create a pattern generated by rule 18 starting by a single alive cell
+centered on an initial row with width 100:
+<table><tr><td> </td><td><pre class="example">cellauto=p=@:s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li><li>
+Specify a more elaborated initial pattern:
+<table><tr><td> </td><td><pre class="example">cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="mandelbrot"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mandelbrot">31.3 mandelbrot</a></h2>
+
+<p>Generate a Mandelbrot set fractal, and progressively zoom towards the
+point specified with <var>start_x</var> and <var>start_y</var>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>end_pts</samp>’</dt>
+<dd><p>Set the terminal pts value. Default value is 400.
+</p>
+</dd>
+<dt> ‘<samp>end_scale</samp>’</dt>
+<dd><p>Set the terminal scale value.
+Must be a floating point value. Default value is 0.3.
+</p>
+</dd>
+<dt> ‘<samp>inner</samp>’</dt>
+<dd><p>Set the inner coloring mode, that is the algorithm used to draw the
+Mandelbrot fractal internal region.
+</p>
+<p>It shall assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>black</samp>’</dt>
+<dd><p>Set black mode.
+</p></dd>
+<dt> ‘<samp>convergence</samp>’</dt>
+<dd><p>Show time until convergence.
+</p></dd>
+<dt> ‘<samp>mincol</samp>’</dt>
+<dd><p>Set color based on point closest to the origin of the iterations.
+</p></dd>
+<dt> ‘<samp>period</samp>’</dt>
+<dd><p>Set period mode.
+</p></dd>
+</dl>
+
+<p>Default value is <var>mincol</var>.
+</p>
+</dd>
+<dt> ‘<samp>bailout</samp>’</dt>
+<dd><p>Set the bailout value. Default value is 10.0.
+</p>
+</dd>
+<dt> ‘<samp>maxiter</samp>’</dt>
+<dd><p>Set the maximum of iterations performed by the rendering
+algorithm. Default value is 7189.
+</p>
+</dd>
+<dt> ‘<samp>outer</samp>’</dt>
+<dd><p>Set outer coloring mode.
+It shall assume one of following values:
+</p><dl compact="compact">
+<dt> ‘<samp>iteration_count</samp>’</dt>
+<dd><p>Set iteration cound mode.
+</p></dd>
+<dt> ‘<samp>normalized_iteration_count</samp>’</dt>
+<dd><p>set normalized iteration count mode.
+</p></dd>
+</dl>
+<p>Default value is <var>normalized_iteration_count</var>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set frame rate, expressed as number of frames per second. Default
+value is "25".
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set frame size. For the syntax of this option, check the "Video
+size" section in the ffmpeg-utils manual. Default value is "640x480".
+</p>
+</dd>
+<dt> ‘<samp>start_scale</samp>’</dt>
+<dd><p>Set the initial scale value. Default value is 3.0.
+</p>
+</dd>
+<dt> ‘<samp>start_x</samp>’</dt>
+<dd><p>Set the initial x position. Must be a floating point value between
+-100 and 100. Default value is -0.743643887037158704752191506114774.
+</p>
+</dd>
+<dt> ‘<samp>start_y</samp>’</dt>
+<dd><p>Set the initial y position. Must be a floating point value between
+-100 and 100. Default value is -0.131825904205311970493132056385139.
+</p></dd>
+</dl>
+
+<a name="mptestsrc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-mptestsrc">31.4 mptestsrc</a></h2>
+
+<p>Generate various test patterns, as generated by the MPlayer test filter.
+</p>
+<p>The size of the generated video is fixed, and is 256x256.
+This source is useful in particular for testing encoding features.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH:MM:SS[.m...]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>test, t</samp>’</dt>
+<dd>
+<p>Set the number or the name of the test to perform. Supported tests are:
+</p><dl compact="compact">
+<dt> ‘<samp>dc_luma</samp>’</dt>
+<dt> ‘<samp>dc_chroma</samp>’</dt>
+<dt> ‘<samp>freq_luma</samp>’</dt>
+<dt> ‘<samp>freq_chroma</samp>’</dt>
+<dt> ‘<samp>amp_luma</samp>’</dt>
+<dt> ‘<samp>amp_chroma</samp>’</dt>
+<dt> ‘<samp>cbp</samp>’</dt>
+<dt> ‘<samp>mv</samp>’</dt>
+<dt> ‘<samp>ring1</samp>’</dt>
+<dt> ‘<samp>ring2</samp>’</dt>
+<dt> ‘<samp>all</samp>’</dt>
+</dl>
+
+<p>Default value is "all", which will cycle through the list of all tests.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=t=dc_luma
+</pre></td></tr></table>
+
+<p>will generate a "dc_luma" test pattern.
+</p>
+<a name="frei0r_005fsrc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-frei0r_005fsrc">31.5 frei0r_src</a></h2>
+
+<p>Provide a frei0r source.
+</p>
+<p>To enable compilation of this filter you need to install the frei0r
+header and configure FFmpeg with <code>--enable-frei0r</code>.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>The size of the video to generate. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>framerate</samp>’</dt>
+<dd><p>Framerate of the generated video, may be a string of the form
+<var>num</var>/<var>den</var> or a frame rate abbreviation.
+</p>
+</dd>
+<dt> ‘<samp>filter_name</samp>’</dt>
+<dd><p>The name to the frei0r source to load. For more information regarding frei0r and
+how to set the parameters read the section <a href="#frei0r">frei0r</a> in the description of
+the video filters.
+</p>
+</dd>
+<dt> ‘<samp>filter_params</samp>’</dt>
+<dd><p>A ’|’-separated list of parameters to pass to the frei0r source.
+</p>
+</dd>
+</dl>
+
+<p>For example, to generate a frei0r partik0l source with size 200x200
+and frame rate 10 which is overlayed on the overlay filter main input:
+</p><table><tr><td> </td><td><pre class="example">frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
+</pre></td></tr></table>
+
+<a name="life"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-life">31.6 life</a></h2>
+
+<p>Generate a life pattern.
+</p>
+<p>This source is based on a generalization of John Conway’s life game.
+</p>
+<p>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.
+</p>
+<p>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 ‘<samp>rule</samp>’ option allows one to specify
+the rule to adopt.
+</p>
+<p>This source accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>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.
+</p>
+<p>If this option is not specified, the initial grid is generated
+randomly.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the video rate, that is the number of frames generated per second.
+Default is 25.
+</p>
+</dd>
+<dt> ‘<samp>random_fill_ratio, ratio</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>random_seed, seed</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>rule</samp>’</dt>
+<dd><p>Set the life rule.
+</p>
+<p>A rule can be specified with a code of the kind "S<var>NS</var>/B<var>NB</var>",
+where <var>NS</var> and <var>NB</var> are sequences of numbers in the range 0-8,
+<var>NS</var> specifies the number of alive neighbor cells which make a
+live cell stay alive, and <var>NB</var> 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.
+</p>
+<p>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 = <code>(12<<9)+9</code> specifies a stay alive
+rule of 12 and a born rule of 9, which corresponds to "S23/B03".
+</p>
+<p>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.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the size of the output video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual.
+</p>
+<p>If ‘<samp>filename</samp>’ is specified, the size is set by default to the
+same size of the input file. If ‘<samp>size</samp>’ 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.
+</p>
+<p>If a filename is not specified, the size value defaults to "320x240"
+(used for a randomly generated initial grid).
+</p>
+</dd>
+<dt> ‘<samp>stitch</samp>’</dt>
+<dd><p>If set to 1, stitch the left and right grid edges together, and the
+top and bottom edges also. Defaults to 1.
+</p>
+</dd>
+<dt> ‘<samp>mold</samp>’</dt>
+<dd><p>Set cell mold speed. If set, a dead cell will go from ‘<samp>death_color</samp>’ to
+‘<samp>mold_color</samp>’ with a step of ‘<samp>mold</samp>’. ‘<samp>mold</samp>’ can have a
+value from 0 to 255.
+</p>
+</dd>
+<dt> ‘<samp>life_color</samp>’</dt>
+<dd><p>Set the color of living (or new born) cells.
+</p>
+</dd>
+<dt> ‘<samp>death_color</samp>’</dt>
+<dd><p>Set the color of dead cells. If ‘<samp>mold</samp>’ is set, this is the first color
+used to represent a dead cell.
+</p>
+</dd>
+<dt> ‘<samp>mold_color</samp>’</dt>
+<dd><p>Set mold color, for definitely dead and moldy cells.
+</p>
+<p>For the syntax of these 3 color options, check the "Color" section in the
+ffmpeg-utils manual.
+</p></dd>
+</dl>
+
+<a name="Examples-79"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-79">31.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Read a grid from ‘<tt>pattern</tt>’, and center it on a grid of size
+300x300 pixels:
+<table><tr><td> </td><td><pre class="example">life=f=pattern:s=300x300
+</pre></td></tr></table>
+
+</li><li>
+Generate a random grid of size 200x200, with a fill ratio of 2/3:
+<table><tr><td> </td><td><pre class="example">life=ratio=2/3:s=200x200
+</pre></td></tr></table>
+
+</li><li>
+Specify a custom rule for evolving a randomly generated grid:
+<table><tr><td> </td><td><pre class="example">life=rule=S14/B34
+</pre></td></tr></table>
+
+</li><li>
+Full example with slow death effect (mold) using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="color"></a>
+<a name="haldclutsrc"></a>
+<a name="nullsrc"></a>
+<a name="rgbtestsrc"></a>
+<a name="smptebars"></a>
+<a name="smptehdbars"></a>
+<a name="testsrc"></a>
+</p><a name="color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-color_002c-haldclutsrc_002c-nullsrc_002c-rgbtestsrc_002c-smptebars_002c-smptehdbars_002c-testsrc">31.7 color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc</a></h2>
+
+<p>The <code>color</code> source provides an uniformly colored input.
+</p>
+<p>The <code>haldclutsrc</code> source provides an identity Hald CLUT. See also
+<a href="#haldclut">haldclut</a> filter.
+</p>
+<p>The <code>nullsrc</code> 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.
+</p>
+<p>The <code>rgbtestsrc</code> 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.
+</p>
+<p>The <code>smptebars</code> source generates a color bars pattern, based on
+the SMPTE Engineering Guideline EG 1-1990.
+</p>
+<p>The <code>smptehdbars</code> source generates a color bars pattern, based on
+the SMPTE RP 219-2002.
+</p>
+<p>The <code>testsrc</code> source generates a test video pattern, showing a
+color pattern, a scrolling gradient and a timestamp. This is mainly
+intended for testing purposes.
+</p>
+<p>The sources accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>color, c</samp>’</dt>
+<dd><p>Specify the color of the source, only available in the <code>color</code>
+source. For the syntax of this option, check the "Color" section in the
+ffmpeg-utils manual.
+</p>
+</dd>
+<dt> ‘<samp>level</samp>’</dt>
+<dd><p>Specify the level of the Hald CLUT, only available in the <code>haldclutsrc</code>
+source. A level of <code>N</code> generates a picture of <code>N*N*N</code> by <code>N*N*N</code>
+pixels to be used as identity matrix for 3D lookup tables. Each component is
+coded on a <code>1/(N*N)</code> scale.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the size of the sourced video. For the syntax of this option, check the
+"Video size" section in the ffmpeg-utils manual. The default value is
+"320x240".
+</p>
+<p>This option is not available with the <code>haldclutsrc</code> filter.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>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
+<var>frame_rate_num</var>/<var>frame_rate_den</var>, an integer number, a float
+number or a valid video frame rate abbreviation. The default value is
+"25".
+</p>
+</dd>
+<dt> ‘<samp>sar</samp>’</dt>
+<dd><p>Set the sample aspect ratio of the sourced video.
+</p>
+</dd>
+<dt> ‘<samp>duration, d</samp>’</dt>
+<dd><p>Set the video duration of the sourced video. The accepted syntax is:
+</p><table><tr><td> </td><td><pre class="example">[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+</pre></td></tr></table>
+<p>See also the function <code>av_parse_time()</code>.
+</p>
+<p>If not specified, or the expressed duration is negative, the video is
+supposed to be generated forever.
+</p>
+</dd>
+<dt> ‘<samp>decimals, n</samp>’</dt>
+<dd><p>Set the number of decimals to show in the timestamp, only available in the
+<code>testsrc</code> source.
+</p>
+<p>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.
+</p></dd>
+</dl>
+
+<p>For example the following:
+</p><table><tr><td> </td><td><pre class="example">testsrc=duration=5.3:size=qcif:rate=10
+</pre></td></tr></table>
+
+<p>will generate a video with a duration of 5.3 seconds, with size
+176x144 and a frame rate of 10 frames per second.
+</p>
+<p>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.
+</p><table><tr><td> </td><td><pre class="example">color=c=red@0.2:s=qcif:r=10
+</pre></td></tr></table>
+
+<p>If the input content is to be ignored, <code>nullsrc</code> can be used. The
+following command generates noise in the luminance plane by employing
+the <code>geq</code> filter:
+</p><table><tr><td> </td><td><pre class="example">nullsrc=s=256x256, geq=random(1)*255:128:128
+</pre></td></tr></table>
+
+<a name="Commands-1"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands-1">31.7.1 Commands</a></h3>
+
+<p>The <code>color</code> source supports the following commands:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>c, color</samp>’</dt>
+<dd><p>Set the color of the created image. Accepts the same syntax of the
+corresponding ‘<samp>color</samp>’ option.
+</p></dd>
+</dl>
+
+
+<a name="Video-Sinks"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Video-Sinks">32. Video Sinks</a></h1>
+
+<p>Below is a description of the currently available video sinks.
+</p>
+<a name="buffersink"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-buffersink">32.1 buffersink</a></h2>
+
+<p>Buffer video frames, and make them available to the end of the filter
+graph.
+</p>
+<p>This sink is mainly intended for a programmatic use, in particular
+through the interface defined in ‘<tt>libavfilter/buffersink.h</tt>’
+or the options system.
+</p>
+<p>It accepts a pointer to an AVBufferSinkContext structure, which
+defines the incoming buffers’ formats, to be passed as the opaque
+parameter to <code>avfilter_init_filter</code> for initialization.
+</p>
+<a name="nullsink"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-nullsink">32.2 nullsink</a></h2>
+
+<p>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.
+</p>
+
+<a name="Multimedia-Filters"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Multimedia-Filters">33. Multimedia Filters</a></h1>
+
+<p>Below is a description of the currently available multimedia filters.
+</p>
+<a name="avectorscope"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-avectorscope">33.1 avectorscope</a></h2>
+
+<p>Convert input audio to a video output, representing the audio vector
+scope.
+</p>
+<p>The filter is used to measure the difference between channels of stereo
+audio stream. A monoaural signal, consisting of identical left and right
+signal, results in straight vertical line. Any stereo separation is visible
+as a deviation from this line, creating a Lissajous figure.
+If the straight (or deviation from it) but horizontal line appears this
+indicates that the left and right channels are out of phase.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode, m</samp>’</dt>
+<dd><p>Set the vectorscope mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>lissajous</samp>’</dt>
+<dd><p>Lissajous rotated by 45 degrees.
+</p>
+</dd>
+<dt> ‘<samp>lissajous_xy</samp>’</dt>
+<dd><p>Same as above but not rotated.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>lissajous</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Set the video size for the output. For the syntax of this option, check the "Video size"
+section in the ffmpeg-utils manual. Default value is <code>400x400</code>.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the output frame rate. Default value is <code>25</code>.
+</p>
+</dd>
+<dt> ‘<samp>rc</samp>’</dt>
+<dt> ‘<samp>gc</samp>’</dt>
+<dt> ‘<samp>bc</samp>’</dt>
+<dd><p>Specify the red, green and blue contrast. Default values are <code>40</code>, <code>160</code> and <code>80</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>rf</samp>’</dt>
+<dt> ‘<samp>gf</samp>’</dt>
+<dt> ‘<samp>bf</samp>’</dt>
+<dd><p>Specify the red, green and blue fade. Default values are <code>15</code>, <code>10</code> and <code>5</code>.
+Allowed range is <code>[0, 255]</code>.
+</p>
+</dd>
+<dt> ‘<samp>zoom</samp>’</dt>
+<dd><p>Set the zoom factor. Default value is <code>1</code>. Allowed range is <code>[1, 10]</code>.
+</p></dd>
+</dl>
+
+<a name="Examples-48"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-48">33.1.1 Examples</a></h3>
+
+<ul>
+<li>
+Complete example using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="concat-3"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-concat-3">33.2 concat</a></h2>
+
+<p>Concatenate audio and video streams, joining them together one after the
+other.
+</p>
+<p>The filter works on segments of synchronized video and audio streams. All
+segments must have the same number of streams of each type, and that will
+also be the number of streams at output.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of segments. Default is 2.
+</p>
+</dd>
+<dt> ‘<samp>v</samp>’</dt>
+<dd><p>Set the number of output video streams, that is also the number of video
+streams in each segment. Default is 1.
+</p>
+</dd>
+<dt> ‘<samp>a</samp>’</dt>
+<dd><p>Set the number of output audio streams, that is also the number of video
+streams in each segment. Default is 0.
+</p>
+</dd>
+<dt> ‘<samp>unsafe</samp>’</dt>
+<dd><p>Activate unsafe mode: do not fail if segments have a different format.
+</p>
+</dd>
+</dl>
+
+<p>The filter has <var>v</var>+<var>a</var> outputs: first <var>v</var> video outputs, then
+<var>a</var> audio outputs.
+</p>
+<p>There are <var>n</var>x(<var>v</var>+<var>a</var>) inputs: first the inputs for the first
+segment, in the same order as the outputs, then the inputs for the second
+segment, etc.
+</p>
+<p>Related streams do not always have exactly the same duration, for various
+reasons including codec frame size or sloppy authoring. For that reason,
+related synchronized streams (e.g. a video and its audio track) should be
+concatenated at once. The concat filter will use the duration of the longest
+stream in each segment (except the last one), and if necessary pad shorter
+audio streams with silence.
+</p>
+<p>For this filter to work correctly, all segments must start at timestamp 0.
+</p>
+<p>All corresponding streams must have the same parameters in all segments; the
+filtering system will automatically select a common pixel format for video
+streams, and a common sample format, sample rate and channel layout for
+audio streams, but other settings, such as resolution, must be converted
+explicitly by the user.
+</p>
+<p>Different frame rates are acceptable but will result in variable frame rate
+at output; be sure to configure the output file to handle it.
+</p>
+<a name="Examples-82"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-82">33.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Concatenate an opening, an episode and an ending, all in bilingual version
+(video in stream 0, audio in streams 1 and 2):
+<table><tr><td> </td><td><pre class="example">ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
+ '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
+ concat=n=3:v=1:a=2 [v] [a1] [a2]' \
+ -map '[v]' -map '[a1]' -map '[a2]' output.mkv
+</pre></td></tr></table>
+
+</li><li>
+Concatenate two parts, handling audio and video separately, using the
+(a)movie sources, and adjusting the resolution:
+<table><tr><td> </td><td><pre class="example">movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
+movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
+[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
+</pre></td></tr></table>
+<p>Note that a desync will happen at the stitch if the audio and video streams
+do not have exactly the same duration in the first file.
+</p>
+</li></ul>
+
+<a name="ebur128"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-ebur128">33.3 ebur128</a></h2>
+
+<p>EBU R128 scanner filter. This filter takes an audio stream as input and outputs
+it unchanged. By default, it logs a message at a frequency of 10Hz with the
+Momentary loudness (identified by <code>M</code>), Short-term loudness (<code>S</code>),
+Integrated loudness (<code>I</code>) and Loudness Range (<code>LRA</code>).
+</p>
+<p>The filter also has a video output (see the <var>video</var> option) with a real
+time graph to observe the loudness evolution. The graphic contains the logged
+message mentioned above, so it is not printed anymore when this option is set,
+unless the verbose logging is set. The main graphing area contains the
+short-term loudness (3 seconds of analysis), and the gauge on the right is for
+the momentary loudness (400 milliseconds).
+</p>
+<p>More information about the Loudness Recommendation EBU R128 on
+<a href="http://tech.ebu.ch/loudness">http://tech.ebu.ch/loudness</a>.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>video</samp>’</dt>
+<dd><p>Activate the video output. The audio stream is passed unchanged whether this
+option is set or no. The video stream will be the first output stream if
+activated. Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>size</samp>’</dt>
+<dd><p>Set the video size. This option is for video only. For the syntax of this
+option, check the "Video size" section in the ffmpeg-utils manual. Default
+and minimum resolution is <code>640x480</code>.
+</p>
+</dd>
+<dt> ‘<samp>meter</samp>’</dt>
+<dd><p>Set the EBU scale meter. Default is <code>9</code>. Common values are <code>9</code> and
+<code>18</code>, respectively for EBU scale meter +9 and EBU scale meter +18. Any
+other integer value between this range is allowed.
+</p>
+</dd>
+<dt> ‘<samp>metadata</samp>’</dt>
+<dd><p>Set metadata injection. If set to <code>1</code>, the audio input will be segmented
+into 100ms output frames, each of them containing various loudness information
+in metadata. All the metadata keys are prefixed with <code>lavfi.r128.</code>.
+</p>
+<p>Default is <code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>framelog</samp>’</dt>
+<dd><p>Force the frame logging level.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>information logging level
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>verbose logging level
+</p></dd>
+</dl>
+
+<p>By default, the logging level is set to <var>info</var>. If the ‘<samp>video</samp>’ or
+the ‘<samp>metadata</samp>’ options are set, it switches to <var>verbose</var>.
+</p>
+</dd>
+<dt> ‘<samp>peak</samp>’</dt>
+<dd><p>Set peak mode(s).
+</p>
+<p>Available modes can be cumulated (the option is a <code>flag</code> type). Possible
+values are:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Disable any peak mode (default).
+</p></dd>
+<dt> ‘<samp>sample</samp>’</dt>
+<dd><p>Enable sample-peak mode.
+</p>
+<p>Simple peak mode looking for the higher sample value. It logs a message
+for sample-peak (identified by <code>SPK</code>).
+</p></dd>
+<dt> ‘<samp>true</samp>’</dt>
+<dd><p>Enable true-peak mode.
+</p>
+<p>If enabled, the peak lookup is done on an over-sampled version of the input
+stream for better peak accuracy. It logs a message for true-peak.
+(identified by <code>TPK</code>) and true-peak per frame (identified by <code>FTPK</code>).
+This mode requires a build with <code>libswresample</code>.
+</p></dd>
+</dl>
+
+</dd>
+</dl>
+
+<a name="Examples-70"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-70">33.3.1 Examples</a></h3>
+
+<ul>
+<li>
+Real-time graph using <code>ffplay</code>, with a EBU scale meter +18:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
+</pre></td></tr></table>
+
+</li><li>
+Run an analysis with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
+</pre></td></tr></table>
+</li></ul>
+
+<a name="interleave_002c-ainterleave"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-interleave_002c-ainterleave">33.4 interleave, ainterleave</a></h2>
+
+<p>Temporally interleave frames from several inputs.
+</p>
+<p><code>interleave</code> works with video inputs, <code>ainterleave</code> with audio.
+</p>
+<p>These filters read frames from several inputs and send the oldest
+queued frame to the output.
+</p>
+<p>Input streams must have a well defined, monotonically increasing frame
+timestamp values.
+</p>
+<p>In order to submit one frame to output, these filters need to enqueue
+at least one frame for each input, so they cannot work in case one
+input is not yet terminated and will not receive incoming frames.
+</p>
+<p>For example consider the case when one input is a <code>select</code> filter
+which always drop input frames. The <code>interleave</code> filter will keep
+reading from that input, but it will never be able to send new frames
+to output until the input will send an end-of-stream signal.
+</p>
+<p>Also, depending on inputs synchronization, the filters will drop
+frames in case one input receives more frames than the other ones, and
+the queue is already filled.
+</p>
+<p>These filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nb_inputs, n</samp>’</dt>
+<dd><p>Set the number of different inputs, it is 2 by default.
+</p></dd>
+</dl>
+
+<a name="Examples-9"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-9">33.4.1 Examples</a></h3>
+
+<ul>
+<li>
+Interleave frames belonging to different streams using <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
+</pre></td></tr></table>
+
+</li><li>
+Add flickering blur effect:
+<table><tr><td> </td><td><pre class="example">select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
+</pre></td></tr></table>
+</li></ul>
+
+<a name="perms_002c-aperms"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-perms_002c-aperms">33.5 perms, aperms</a></h2>
+
+<p>Set read/write permissions for the output frames.
+</p>
+<p>These filters are mainly aimed at developers to test direct path in the
+following filter in the filtergraph.
+</p>
+<p>The filters accept the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Select the permissions mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Do nothing. This is the default.
+</p></dd>
+<dt> ‘<samp>ro</samp>’</dt>
+<dd><p>Set all the output frames read-only.
+</p></dd>
+<dt> ‘<samp>rw</samp>’</dt>
+<dd><p>Set all the output frames directly writable.
+</p></dd>
+<dt> ‘<samp>toggle</samp>’</dt>
+<dd><p>Make the frame read-only if writable, and writable if read-only.
+</p></dd>
+<dt> ‘<samp>random</samp>’</dt>
+<dd><p>Set each output frame read-only or writable randomly.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>seed</samp>’</dt>
+<dd><p>Set the seed for the <var>random</var> mode, must be an integer included between
+<code>0</code> and <code>UINT32_MAX</code>. If not specified, or if explicitly set to
+<code>-1</code>, the filter will try to use a good random seed on a best effort
+basis.
+</p></dd>
+</dl>
+
+<p>Note: in case of auto-inserted filter between the permission filter and the
+following one, the permission might not be received as expected in that
+following filter. Inserting a <a href="#format">format</a> or <a href="#aformat">aformat</a> filter before the
+perms/aperms filter can avoid this problem.
+</p>
+<a name="select_002c-aselect"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-select_002c-aselect">33.6 select, aselect</a></h2>
+
+<p>Select frames to pass in output.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, e</samp>’</dt>
+<dd><p>Set expression, which is evaluated for each input frame.
+</p>
+<p>If the expression is evaluated to zero, the frame is discarded.
+</p>
+<p>If the evaluation result is negative or NaN, the frame is sent to the
+first output; otherwise it is sent to the output with index
+<code>ceil(val)-1</code>, assuming that the input index starts from 0.
+</p>
+<p>For example a value of <code>1.2</code> corresponds to the output with index
+<code>ceil(1.2)-1 = 2-1 = 1</code>, that is the second output.
+</p>
+</dd>
+<dt> ‘<samp>outputs, n</samp>’</dt>
+<dd><p>Set the number of outputs. The output to which to send the selected
+frame is based on the result of the evaluation. Default value is 1.
+</p></dd>
+</dl>
+
+<p>The expression can contain the following constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>the sequential number of the filtered frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>selected_n</samp>’</dt>
+<dd><p>the sequential number of the selected frame, starting from 0
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_n</samp>’</dt>
+<dd><p>the sequential number of the last selected frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+<dt> ‘<samp>pts</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in <var>TB</var> units, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>t</samp>’</dt>
+<dd><p>the PTS (Presentation TimeStamp) of the filtered video frame,
+expressed in seconds, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_pts</samp>’</dt>
+<dd><p>the PTS of the previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_pts</samp>’</dt>
+<dd><p>the PTS of the last previously filtered video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>prev_selected_t</samp>’</dt>
+<dd><p>the PTS of the last previously selected video frame, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_pts</samp>’</dt>
+<dd><p>the PTS of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>start_t</samp>’</dt>
+<dd><p>the time of the first video frame in the video, NAN if undefined
+</p>
+</dd>
+<dt> ‘<samp>pict_type <em>(video only)</em></samp>’</dt>
+<dd><p>the type of the filtered frame, can assume one of the following
+values:
+</p><dl compact="compact">
+<dt> ‘<samp>I</samp>’</dt>
+<dt> ‘<samp>P</samp>’</dt>
+<dt> ‘<samp>B</samp>’</dt>
+<dt> ‘<samp>S</samp>’</dt>
+<dt> ‘<samp>SI</samp>’</dt>
+<dt> ‘<samp>SP</samp>’</dt>
+<dt> ‘<samp>BI</samp>’</dt>
+</dl>
+
+</dd>
+<dt> ‘<samp>interlace_type <em>(video only)</em></samp>’</dt>
+<dd><p>the frame interlace type, can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>PROGRESSIVE</samp>’</dt>
+<dd><p>the frame is progressive (not interlaced)
+</p></dd>
+<dt> ‘<samp>TOPFIRST</samp>’</dt>
+<dd><p>the frame is top-field-first
+</p></dd>
+<dt> ‘<samp>BOTTOMFIRST</samp>’</dt>
+<dd><p>the frame is bottom-field-first
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>consumed_sample_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of selected samples before the current frame
+</p>
+</dd>
+<dt> ‘<samp>samples_n <em>(audio only)</em></samp>’</dt>
+<dd><p>the number of samples in the current frame
+</p>
+</dd>
+<dt> ‘<samp>sample_rate <em>(audio only)</em></samp>’</dt>
+<dd><p>the input sample rate
+</p>
+</dd>
+<dt> ‘<samp>key</samp>’</dt>
+<dd><p>1 if the filtered frame is a key-frame, 0 otherwise
+</p>
+</dd>
+<dt> ‘<samp>pos</samp>’</dt>
+<dd><p>the position in the file of the filtered frame, -1 if the information
+is not available (e.g. for synthetic video)
+</p>
+</dd>
+<dt> ‘<samp>scene <em>(video only)</em></samp>’</dt>
+<dd><p>value between 0 and 1 to indicate a new scene; a low value reflects a low
+probability for the current frame to introduce a new scene, while a higher
+value means the current frame is more likely to be one (see the example below)
+</p>
+</dd>
+</dl>
+
+<p>The default value of the select expression is "1".
+</p>
+<a name="Examples-32"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-32">33.6.1 Examples</a></h3>
+
+<ul>
+<li>
+Select all frames in input:
+<table><tr><td> </td><td><pre class="example">select
+</pre></td></tr></table>
+
+<p>The example above is the same as:
+</p><table><tr><td> </td><td><pre class="example">select=1
+</pre></td></tr></table>
+
+</li><li>
+Skip all frames:
+<table><tr><td> </td><td><pre class="example">select=0
+</pre></td></tr></table>
+
+</li><li>
+Select only I-frames:
+<table><tr><td> </td><td><pre class="example">select='eq(pict_type\,I)'
+</pre></td></tr></table>
+
+</li><li>
+Select one frame every 100:
+<table><tr><td> </td><td><pre class="example">select='not(mod(n\,100))'
+</pre></td></tr></table>
+
+</li><li>
+Select only frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)
+</pre></td></tr></table>
+
+</li><li>
+Select only I frames contained in the 10-20 time interval:
+<table><tr><td> </td><td><pre class="example">select=between(t\,10\,20)*eq(pict_type\,I)
+</pre></td></tr></table>
+
+</li><li>
+Select frames with a minimum distance of 10 seconds:
+<table><tr><td> </td><td><pre class="example">select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
+</pre></td></tr></table>
+
+</li><li>
+Use aselect to select only audio frames with samples number > 100:
+<table><tr><td> </td><td><pre class="example">aselect='gt(samples_n\,100)'
+</pre></td></tr></table>
+
+</li><li>
+Create a mosaic of the first scenes:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
+</pre></td></tr></table>
+
+<p>Comparing <var>scene</var> against a value between 0.3 and 0.5 is generally a sane
+choice.
+</p>
+</li><li>
+Send even and odd frames to separate outputs, and compose them:
+<table><tr><td> </td><td><pre class="example">select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
+</pre></td></tr></table>
+</li></ul>
+
+<a name="sendcmd_002c-asendcmd"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-sendcmd_002c-asendcmd">33.7 sendcmd, asendcmd</a></h2>
+
+<p>Send commands to filters in the filtergraph.
+</p>
+<p>These filters read commands to be sent to other filters in the
+filtergraph.
+</p>
+<p><code>sendcmd</code> must be inserted between two video filters,
+<code>asendcmd</code> must be inserted between two audio filters, but apart
+from that they act the same way.
+</p>
+<p>The specification of commands can be provided in the filter arguments
+with the <var>commands</var> option, or in a file specified by the
+<var>filename</var> option.
+</p>
+<p>These filters accept the following options:
+</p><dl compact="compact">
+<dt> ‘<samp>commands, c</samp>’</dt>
+<dd><p>Set the commands to be read and sent to the other filters.
+</p></dd>
+<dt> ‘<samp>filename, f</samp>’</dt>
+<dd><p>Set the filename of the commands to be read and sent to the other
+filters.
+</p></dd>
+</dl>
+
+<a name="Commands-syntax"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Commands-syntax">33.7.1 Commands syntax</a></h3>
+
+<p>A commands description consists of a sequence of interval
+specifications, comprising a list of commands to be executed when a
+particular event related to that interval occurs. The occurring event
+is typically the current frame time entering or leaving a given time
+interval.
+</p>
+<p>An interval is specified by the following syntax:
+</p><table><tr><td> </td><td><pre class="example"><var>START</var>[-<var>END</var>] <var>COMMANDS</var>;
+</pre></td></tr></table>
+
+<p>The time interval is specified by the <var>START</var> and <var>END</var> times.
+<var>END</var> is optional and defaults to the maximum time.
+</p>
+<p>The current frame time is considered within the specified interval if
+it is included in the interval [<var>START</var>, <var>END</var>), that is when
+the time is greater or equal to <var>START</var> and is lesser than
+<var>END</var>.
+</p>
+<p><var>COMMANDS</var> consists of a sequence of one or more command
+specifications, separated by ",", relating to that interval. The
+syntax of a command specification is given by:
+</p><table><tr><td> </td><td><pre class="example">[<var>FLAGS</var>] <var>TARGET</var> <var>COMMAND</var> <var>ARG</var>
+</pre></td></tr></table>
+
+<p><var>FLAGS</var> is optional and specifies the type of events relating to
+the time interval which enable sending the specified command, and must
+be a non-null sequence of identifier flags separated by "+" or "|" and
+enclosed between "[" and "]".
+</p>
+<p>The following flags are recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>enter</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp enters the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was not in the given interval, and the
+current is.
+</p>
+</dd>
+<dt> ‘<samp>leave</samp>’</dt>
+<dd><p>The command is sent when the current frame timestamp leaves the
+specified interval. In other words, the command is sent when the
+previous frame timestamp was in the given interval, and the
+current is not.
+</p></dd>
+</dl>
+
+<p>If <var>FLAGS</var> is not specified, a default value of <code>[enter]</code> is
+assumed.
+</p>
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional list of argument for
+the given <var>COMMAND</var>.
+</p>
+<p>Between one interval specification and another, whitespaces, or
+sequences of characters starting with <code>#</code> until the end of line,
+are ignored and can be used to annotate comments.
+</p>
+<p>A simplified BNF description of the commands specification syntax
+follows:
+</p><table><tr><td> </td><td><pre class="example"><var>COMMAND_FLAG</var> ::= "enter" | "leave"
+<var>COMMAND_FLAGS</var> ::= <var>COMMAND_FLAG</var> [(+|"|")<var>COMMAND_FLAG</var>]
+<var>COMMAND</var> ::= ["[" <var>COMMAND_FLAGS</var> "]"] <var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+<var>COMMANDS</var> ::= <var>COMMAND</var> [,<var>COMMANDS</var>]
+<var>INTERVAL</var> ::= <var>START</var>[-<var>END</var>] <var>COMMANDS</var>
+<var>INTERVALS</var> ::= <var>INTERVAL</var>[;<var>INTERVALS</var>]
+</pre></td></tr></table>
+
+<a name="Examples-37"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-37">33.7.2 Examples</a></h3>
+
+<ul>
+<li>
+Specify audio tempo change at second 4:
+<table><tr><td> </td><td><pre class="example">asendcmd=c='4.0 atempo tempo 1.5',atempo
+</pre></td></tr></table>
+
+</li><li>
+Specify a list of drawtext and hue commands in a file.
+<table><tr><td> </td><td><pre class="example"># show text in the interval 5-10
+5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
+
+# desaturate the image in the interval 15-20
+15.0-20.0 [enter] hue s 0,
+ [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
+ [leave] hue s 1,
+ [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
+
+# apply an exponential saturation fade-out effect, starting from time 25
+25 [enter] hue s exp(25-t)
+</pre></td></tr></table>
+
+<p>A filtergraph allowing to read and process the above command list
+stored in a file ‘<tt>test.cmd</tt>’, can be specified with:
+</p><table><tr><td> </td><td><pre class="example">sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
+</pre></td></tr></table>
+</li></ul>
+
+<p><a name="setpts"></a>
+</p><a name="setpts_002c-asetpts"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-setpts_002c-asetpts">33.8 setpts, asetpts</a></h2>
+
+<p>Change the PTS (presentation timestamp) of the input frames.
+</p>
+<p><code>setpts</code> works on video frames, <code>asetpts</code> on audio frames.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr</samp>’</dt>
+<dd><p>The expression which is evaluated for each frame to construct its timestamp.
+</p>
+</dd>
+</dl>
+
+<p>The expression is evaluated through the eval API and can contain the following
+constants:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>FRAME_RATE</samp>’</dt>
+<dd><p>frame rate, only defined for constant frame-rate video
+</p>
+</dd>
+<dt> ‘<samp>PTS</samp>’</dt>
+<dd><p>the presentation timestamp in input
+</p>
+</dd>
+<dt> ‘<samp>N</samp>’</dt>
+<dd><p>the count of the input frame for video or the number of consumed samples,
+not including the current frame for audio, starting from 0.
+</p>
+</dd>
+<dt> ‘<samp>NB_CONSUMED_SAMPLES</samp>’</dt>
+<dd><p>the number of consumed samples, not including the current frame (only
+audio)
+</p>
+</dd>
+<dt> ‘<samp>NB_SAMPLES, S</samp>’</dt>
+<dd><p>the number of samples in the current frame (only audio)
+</p>
+</dd>
+<dt> ‘<samp>SAMPLE_RATE, SR</samp>’</dt>
+<dd><p>audio sample rate
+</p>
+</dd>
+<dt> ‘<samp>STARTPTS</samp>’</dt>
+<dd><p>the PTS of the first frame
+</p>
+</dd>
+<dt> ‘<samp>STARTT</samp>’</dt>
+<dd><p>the time in seconds of the first frame
+</p>
+</dd>
+<dt> ‘<samp>INTERLACED</samp>’</dt>
+<dd><p>tell if the current frame is interlaced
+</p>
+</dd>
+<dt> ‘<samp>T</samp>’</dt>
+<dd><p>the time in seconds of the current frame
+</p>
+</dd>
+<dt> ‘<samp>POS</samp>’</dt>
+<dd><p>original position in the file of the frame, or undefined if undefined
+for the current frame
+</p>
+</dd>
+<dt> ‘<samp>PREV_INPTS</samp>’</dt>
+<dd><p>previous input PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_INT</samp>’</dt>
+<dd><p>previous input time in seconds
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTPTS</samp>’</dt>
+<dd><p>previous output PTS
+</p>
+</dd>
+<dt> ‘<samp>PREV_OUTT</samp>’</dt>
+<dd><p>previous output time in seconds
+</p>
+</dd>
+<dt> ‘<samp>RTCTIME</samp>’</dt>
+<dd><p>wallclock (RTC) time in microseconds. This is deprecated, use time(0)
+instead.
+</p>
+</dd>
+<dt> ‘<samp>RTCSTART</samp>’</dt>
+<dd><p>wallclock (RTC) time at the start of the movie in microseconds
+</p>
+</dd>
+<dt> ‘<samp>TB</samp>’</dt>
+<dd><p>timebase of the input timestamps
+</p>
+</dd>
+</dl>
+
+<a name="Examples-78"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-78">33.8.1 Examples</a></h3>
+
+<ul>
+<li>
+Start counting PTS from zero
+<table><tr><td> </td><td><pre class="example">setpts=PTS-STARTPTS
+</pre></td></tr></table>
+
+</li><li>
+Apply fast motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=0.5*PTS
+</pre></td></tr></table>
+
+</li><li>
+Apply slow motion effect:
+<table><tr><td> </td><td><pre class="example">setpts=2.0*PTS
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate of 25 frames per second:
+<table><tr><td> </td><td><pre class="example">setpts=N/(25*TB)
+</pre></td></tr></table>
+
+</li><li>
+Set fixed rate 25 fps with some jitter:
+<table><tr><td> </td><td><pre class="example">setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
+</pre></td></tr></table>
+
+</li><li>
+Apply an offset of 10 seconds to the input PTS:
+<table><tr><td> </td><td><pre class="example">setpts=PTS+10/TB
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps from a "live source" and rebase onto the current timebase:
+<table><tr><td> </td><td><pre class="example">setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
+</pre></td></tr></table>
+
+</li><li>
+Generate timestamps by counting samples:
+<table><tr><td> </td><td><pre class="example">asetpts=N/SR/TB
+</pre></td></tr></table>
+
+</li></ul>
+
+<a name="settb_002c-asettb"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-settb_002c-asettb">33.9 settb, asettb</a></h2>
+
+<p>Set the timebase to use for the output frames timestamps.
+It is mainly useful for testing timebase configuration.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>expr, tb</samp>’</dt>
+<dd><p>The expression which is evaluated into the output timebase.
+</p>
+</dd>
+</dl>
+
+<p>The value for ‘<samp>tb</samp>’ is an arithmetic expression representing a
+rational. The expression can contain the constants "AVTB" (the default
+timebase), "intb" (the input timebase) and "sr" (the sample rate,
+audio only). Default value is "intb".
+</p>
+<a name="Examples-26"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-26">33.9.1 Examples</a></h3>
+
+<ul>
+<li>
+Set the timebase to 1/25:
+<table><tr><td> </td><td><pre class="example">settb=expr=1/25
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1/10:
+<table><tr><td> </td><td><pre class="example">settb=expr=0.1
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 1001/1000:
+<table><tr><td> </td><td><pre class="example">settb=1+0.001
+</pre></td></tr></table>
+
+</li><li>
+Set the timebase to 2*intb:
+<table><tr><td> </td><td><pre class="example">settb=2*intb
+</pre></td></tr></table>
+
+</li><li>
+Set the default timebase value:
+<table><tr><td> </td><td><pre class="example">settb=AVTB
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showspectrum"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-showspectrum">33.10 showspectrum</a></h2>
+
+<p>Convert input audio to a video output, representing the audio frequency
+spectrum.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value is
+<code>640x512</code>.
+</p>
+</dd>
+<dt> ‘<samp>slide</samp>’</dt>
+<dd><p>Specify if the spectrum should slide along the window. Default value is
+<code>0</code>.
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Specify display mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>combined</samp>’</dt>
+<dd><p>all channels are displayed in the same row
+</p></dd>
+<dt> ‘<samp>separate</samp>’</dt>
+<dd><p>all channels are displayed in separate rows
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>combined</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>color</samp>’</dt>
+<dd><p>Specify display color mode.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>channel</samp>’</dt>
+<dd><p>each channel is displayed in a separate color
+</p></dd>
+<dt> ‘<samp>intensity</samp>’</dt>
+<dd><p>each channel is is displayed using the same color scheme
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>channel</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>scale</samp>’</dt>
+<dd><p>Specify scale used for calculating intensity color values.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>lin</samp>’</dt>
+<dd><p>linear
+</p></dd>
+<dt> ‘<samp>sqrt</samp>’</dt>
+<dd><p>square root, default
+</p></dd>
+<dt> ‘<samp>cbrt</samp>’</dt>
+<dd><p>cubic root
+</p></dd>
+<dt> ‘<samp>log</samp>’</dt>
+<dd><p>logarithmic
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>sqrt</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>saturation</samp>’</dt>
+<dd><p>Set saturation modifier for displayed colors. Negative values provide
+alternative color scheme. <code>0</code> is no saturation at all.
+Saturation must be in [-10.0, 10.0] range.
+Default value is <code>1</code>.
+</p>
+</dd>
+<dt> ‘<samp>win_func</samp>’</dt>
+<dd><p>Set window function.
+</p>
+<p>It accepts the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>No samples pre-processing (do not expect this to be faster)
+</p></dd>
+<dt> ‘<samp>hann</samp>’</dt>
+<dd><p>Hann window
+</p></dd>
+<dt> ‘<samp>hamming</samp>’</dt>
+<dd><p>Hamming window
+</p></dd>
+<dt> ‘<samp>blackman</samp>’</dt>
+<dd><p>Blackman window
+</p></dd>
+</dl>
+
+<p>Default value is <code>hann</code>.
+</p></dd>
+</dl>
+
+<p>The usage is very similar to the showwaves filter; see the examples in that
+section.
+</p>
+<a name="Examples-14"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-14">33.10.1 Examples</a></h3>
+
+<ul>
+<li>
+Large window with logarithmic color scaling:
+<table><tr><td> </td><td><pre class="example">showspectrum=s=1280x480:scale=log
+</pre></td></tr></table>
+
+</li><li>
+Complete example for a colored and sliding spectrum per channel using <code>ffplay</code>:
+<table><tr><td> </td><td><pre class="example">ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
+ [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
+</pre></td></tr></table>
+</li></ul>
+
+<a name="showwaves"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-showwaves">33.11 showwaves</a></h2>
+
+<p>Convert input audio to a video output, representing the samples waves.
+</p>
+<p>The filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>size, s</samp>’</dt>
+<dd><p>Specify the video size for the output. For the syntax of this option, check
+the "Video size" section in the ffmpeg-utils manual. Default value
+is "600x240".
+</p>
+</dd>
+<dt> ‘<samp>mode</samp>’</dt>
+<dd><p>Set display mode.
+</p>
+<p>Available values are:
+</p><dl compact="compact">
+<dt> ‘<samp>point</samp>’</dt>
+<dd><p>Draw a point for each sample.
+</p>
+</dd>
+<dt> ‘<samp>line</samp>’</dt>
+<dd><p>Draw a vertical line for each sample.
+</p></dd>
+</dl>
+
+<p>Default value is <code>point</code>.
+</p>
+</dd>
+<dt> ‘<samp>n</samp>’</dt>
+<dd><p>Set the number of samples which are printed on the same column. A
+larger value will decrease the frame rate. Must be a positive
+integer. This option can be set only if the value for <var>rate</var>
+is not explicitly specified.
+</p>
+</dd>
+<dt> ‘<samp>rate, r</samp>’</dt>
+<dd><p>Set the (approximate) output frame rate. This is done by setting the
+option <var>n</var>. Default value is "25".
+</p>
+</dd>
+</dl>
+
+<a name="Examples-61"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-61">33.11.1 Examples</a></h3>
+
+<ul>
+<li>
+Output the input file audio and the corresponding video representation
+at the same time:
+<table><tr><td> </td><td><pre class="example">amovie=a.mp3,asplit[out0],showwaves[out1]
+</pre></td></tr></table>
+
+</li><li>
+Create a synthetic signal and show it with showwaves, forcing a
+frame rate of 30 frames per second:
+<table><tr><td> </td><td><pre class="example">aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
+</pre></td></tr></table>
+</li></ul>
+
+<a name="split_002c-asplit"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-split_002c-asplit">33.12 split, asplit</a></h2>
+
+<p>Split input into several identical outputs.
+</p>
+<p><code>asplit</code> works with audio input, <code>split</code> with video.
+</p>
+<p>The filter accepts a single parameter which specifies the number of outputs. If
+unspecified, it defaults to 2.
+</p>
+<a name="Examples-64"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-64">33.12.1 Examples</a></h3>
+
+<ul>
+<li>
+Create two separate outputs from the same input:
+<table><tr><td> </td><td><pre class="example">[in] split [out0][out1]
+</pre></td></tr></table>
+
+</li><li>
+To create 3 or more outputs, you need to specify the number of
+outputs, like in:
+<table><tr><td> </td><td><pre class="example">[in] asplit=3 [out0][out1][out2]
+</pre></td></tr></table>
+
+</li><li>
+Create two separate outputs from the same input, one cropped and
+one padded:
+<table><tr><td> </td><td><pre class="example">[in] split [splitout1][splitout2];
+[splitout1] crop=100:100:0:0 [cropout];
+[splitout2] pad=200:200:100:100 [padout];
+</pre></td></tr></table>
+
+</li><li>
+Create 5 copies of the input audio with <code>ffmpeg</code>:
+<table><tr><td> </td><td><pre class="example">ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
+</pre></td></tr></table>
+</li></ul>
+
+<a name="zmq_002c-azmq"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-zmq_002c-azmq">33.13 zmq, azmq</a></h2>
+
+<p>Receive commands sent through a libzmq client, and forward them to
+filters in the filtergraph.
+</p>
+<p><code>zmq</code> and <code>azmq</code> work as a pass-through filters. <code>zmq</code>
+must be inserted between two video filters, <code>azmq</code> between two
+audio filters.
+</p>
+<p>To enable these filters you need to install the libzmq library and
+headers and configure FFmpeg with <code>--enable-libzmq</code>.
+</p>
+<p>For more information about libzmq see:
+<a href="http://www.zeromq.org/">http://www.zeromq.org/</a>
+</p>
+<p>The <code>zmq</code> and <code>azmq</code> filters work as a libzmq server, which
+receives messages sent through a network interface defined by the
+‘<samp>bind_address</samp>’ option.
+</p>
+<p>The received message must be in the form:
+</p><table><tr><td> </td><td><pre class="example"><var>TARGET</var> <var>COMMAND</var> [<var>ARG</var>]
+</pre></td></tr></table>
+
+<p><var>TARGET</var> specifies the target of the command, usually the name of
+the filter class or a specific filter instance name.
+</p>
+<p><var>COMMAND</var> specifies the name of the command for the target filter.
+</p>
+<p><var>ARG</var> is optional and specifies the optional argument list for the
+given <var>COMMAND</var>.
+</p>
+<p>Upon reception, the message is processed and the corresponding command
+is injected into the filtergraph. Depending on the result, the filter
+will send a reply to the client, adopting the format:
+</p><table><tr><td> </td><td><pre class="example"><var>ERROR_CODE</var> <var>ERROR_REASON</var>
+<var>MESSAGE</var>
+</pre></td></tr></table>
+
+<p><var>MESSAGE</var> is optional.
+</p>
+<a name="Examples-58"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-58">33.13.1 Examples</a></h3>
+
+<p>Look at ‘<tt>tools/zmqsend</tt>’ for an example of a zmq client which can
+be used to send commands processed by these filters.
+</p>
+<p>Consider the following filtergraph generated by <code>ffplay</code>
+</p><table><tr><td> </td><td><pre class="example">ffplay -dumpgraph 1 -f lavfi "
+color=s=100x100:c=red [l];
+color=s=100x100:c=blue [r];
+nullsrc=s=200x100, zmq [bg];
+[bg][l] overlay [bg+l];
+[bg+l][r] overlay=x=100 "
+</pre></td></tr></table>
+
+<p>To change the color of the left side of the video, the following
+command can be used:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_0 c yellow | tools/zmqsend
+</pre></td></tr></table>
+
+<p>To change the right side:
+</p><table><tr><td> </td><td><pre class="example">echo Parsed_color_1 c pink | tools/zmqsend
+</pre></td></tr></table>
+
+
+<a name="Multimedia-Sources"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Multimedia-Sources">34. Multimedia Sources</a></h1>
+
+<p>Below is a description of the currently available multimedia sources.
+</p>
+<a name="amovie"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-amovie">34.1 amovie</a></h2>
+
+<p>This is the same as <a href="#movie">movie</a> source, except it selects an audio
+stream by default.
+</p>
+<p><a name="movie"></a>
+</p><a name="movie-1"></a>
+<h2 class="section"><a href="ffprobe-all.html#toc-movie-1">34.2 movie</a></h2>
+
+<p>Read audio and/or video stream(s) from a movie container.
+</p>
+<p>This filter accepts the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>filename</samp>’</dt>
+<dd><p>The name of the resource to read (not necessarily a file but also a device or a
+stream accessed through some protocol).
+</p>
+</dd>
+<dt> ‘<samp>format_name, f</samp>’</dt>
+<dd><p>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 <var>movie_name</var> or by probing.
+</p>
+</dd>
+<dt> ‘<samp>seek_point, sp</samp>’</dt>
+<dd><p>Specifies the seek point in seconds, the frames will be output
+starting from this seek point, the parameter is evaluated with
+<code>av_strtod</code> so the numerical value may be suffixed by an IS
+postfix. Default value is "0".
+</p>
+</dd>
+<dt> ‘<samp>streams, s</samp>’</dt>
+<dd><p>Specifies the streams to read. Several streams can be specified,
+separated by "+". The source will then have as many outputs, in the
+same order. The syntax is explained in the “Stream specifiers”
+section in the ffmpeg manual. Two special names, "dv" and "da" specify
+respectively the default (best suited) video and audio stream. Default
+is "dv", or "da" if the filter is called as "amovie".
+</p>
+</dd>
+<dt> ‘<samp>stream_index, si</samp>’</dt>
+<dd><p>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". Deprecated. If the filter is called "amovie", it will select
+audio instead of video.
+</p>
+</dd>
+<dt> ‘<samp>loop</samp>’</dt>
+<dd><p>Specifies how many times to read the stream in sequence.
+If the value is less than 1, the stream will be read again and again.
+Default value is "1".
+</p>
+<p>Note that when the movie is looped the source timestamps are not
+changed, so it will generate non monotonically increasing timestamps.
+</p></dd>
+</dl>
+
+<p>This filter allows one to overlay a second video on top of main input of
+a filtergraph as shown in this graph:
+</p><table><tr><td> </td><td><pre class="example">input -----------> deltapts0 --> overlay --> output
+ ^
+ |
+movie --> scale--> deltapts1 -------+
+</pre></td></tr></table>
+
+<a name="Examples-6"></a>
+<h3 class="subsection"><a href="ffprobe-all.html#toc-Examples-6">34.2.1 Examples</a></h3>
+
+<ul>
+<li>
+Skip 3.2 seconds from the start of the avi file in.avi, and overlay it
+on top of the input labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read from a video4linux2 device, and overlay it on top of the input
+labelled as "in":
+<table><tr><td> </td><td><pre class="example">movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
+[in] setpts=PTS-STARTPTS [main];
+[main][over] overlay=16:16 [out]
+</pre></td></tr></table>
+
+</li><li>
+Read the first video stream and the audio stream with id 0x81 from
+dvd.vob; the video is connected to the pad named "video" and the audio is
+connected to the pad named "audio":
+<table><tr><td> </td><td><pre class="example">movie=dvd.vob:s=v:0+#0x81 [video] [audio]
+</pre></td></tr></table>
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-See-Also">35. See Also</a></h1>
+
+<p><a href="ffprobe.html">ffprobe</a>,
+<a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
+<a href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffprobe-all.html#toc-Authors">36. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : ffprobe </title>
+
+<meta name="description" content="ffprobe Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : ffprobe ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">ffprobe Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Synopsis" href="#Synopsis">1. Synopsis</a></li>
+ <li><a name="toc-Description" href="#Description">2. Description</a></li>
+ <li><a name="toc-Options" href="#Options">3. Options</a>
+ <ul class="toc">
+ <li><a name="toc-Stream-specifiers-1" href="#Stream-specifiers-1">3.1 Stream specifiers</a></li>
+ <li><a name="toc-Generic-options" href="#Generic-options">3.2 Generic options</a></li>
+ <li><a name="toc-AVOptions" href="#AVOptions">3.3 AVOptions</a></li>
+ <li><a name="toc-Main-options" href="#Main-options">3.4 Main options</a></li>
+ </ul></li>
+ <li><a name="toc-Writers" href="#Writers">4. Writers</a>
+ <ul class="toc">
+ <li><a name="toc-default" href="#default">4.1 default</a></li>
+ <li><a name="toc-compact_002c-csv" href="#compact_002c-csv">4.2 compact, csv</a></li>
+ <li><a name="toc-flat" href="#flat">4.3 flat</a></li>
+ <li><a name="toc-ini" href="#ini">4.4 ini</a></li>
+ <li><a name="toc-json" href="#json">4.5 json</a></li>
+ <li><a name="toc-xml" href="#xml">4.6 xml</a></li>
+ </ul></li>
+ <li><a name="toc-Timecode" href="#Timecode">5. Timecode</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">6. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">7. Authors</a></li>
+</ul>
+</div>
+
+<a name="Synopsis"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-Synopsis">1. Synopsis</a></h1>
+
+<p>ffprobe [<var>options</var>] [‘<tt>input_file</tt>’]
+</p>
+<a name="Description"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-Description">2. Description</a></h1>
+
+<p>ffprobe gathers information from multimedia streams and prints it in
+human- and machine-readable fashion.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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 ‘<samp>print_format</samp>’ option.
+</p>
+<p>Sections may contain other nested sections, and are identified by a
+name (which may be shared by other sections), and an unique
+name. See the output of ‘<samp>sections</samp>’.
+</p>
+<p>Metadata tags stored in the container or in the streams are recognized
+and printed in the corresponding "FORMAT", "STREAM" or "PROGRAM_STREAM"
+section.
+</p>
+
+<a name="Options"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-Options">3. Options</a></h1>
+
+<p>All the numerical options, if not specified otherwise, accept a string
+representing a number as input, which may be followed by one of the SI
+unit prefixes, for example: ’K’, ’M’, or ’G’.
+</p>
+<p>If ’i’ is appended to the SI unit prefix, the complete prefix will be
+interpreted as a unit prefix for binary multiplies, which are based on
+powers of 1024 instead of powers of 1000. Appending ’B’ to the SI unit
+prefix multiplies the value by 8. This allows using, for example:
+’KB’, ’MiB’, ’G’ and ’B’ as number suffixes.
+</p>
+<p>Options which do not take arguments are boolean options, and set the
+corresponding value to true. They can be set to false by prefixing
+the option name with "no". For example using "-nofoo"
+will set the boolean option with name "foo" to false.
+</p>
+<p><a name="Stream-specifiers"></a>
+</p><a name="Stream-specifiers-1"></a>
+<h2 class="section"><a href="ffprobe.html#toc-Stream-specifiers-1">3.1 Stream specifiers</a></h2>
+<p>Some options are applied per-stream, e.g. bitrate or codec. Stream specifiers
+are used to precisely specify which stream(s) a given option belongs to.
+</p>
+<p>A stream specifier is a string generally appended to the option name and
+separated from it by a colon. E.g. <code>-codec:a:1 ac3</code> contains the
+<code>a:1</code> stream specifier, which matches the second audio stream. Therefore, it
+would select the ac3 codec for the second audio stream.
+</p>
+<p>A stream specifier can match several streams, so that the option is applied to all
+of them. E.g. the stream specifier in <code>-b:a 128k</code> matches all audio
+streams.
+</p>
+<p>An empty stream specifier matches all streams. For example, <code>-codec copy</code>
+or <code>-codec: copy</code> would copy all the streams without reencoding.
+</p>
+<p>Possible forms of stream specifiers are:
+</p><dl compact="compact">
+<dt> ‘<samp><var>stream_index</var></samp>’</dt>
+<dd><p>Matches the stream with this index. E.g. <code>-threads:1 4</code> would set the
+thread count for the second stream to 4.
+</p></dd>
+<dt> ‘<samp><var>stream_type</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p><var>stream_type</var> is one of following: ’v’ for video, ’a’ for audio, ’s’ for subtitle,
+’d’ for data, and ’t’ for attachments. If <var>stream_index</var> is given, then it matches
+stream number <var>stream_index</var> of this type. Otherwise, it matches all
+streams of this type.
+</p></dd>
+<dt> ‘<samp>p:<var>program_id</var>[:<var>stream_index</var>]</samp>’</dt>
+<dd><p>If <var>stream_index</var> is given, then it matches the stream with number <var>stream_index</var>
+in the program with the id <var>program_id</var>. Otherwise, it matches all streams in the
+program.
+</p></dd>
+<dt> ‘<samp>#<var>stream_id</var></samp>’</dt>
+<dd><p>Matches the stream by a format-specific ID.
+</p></dd>
+</dl>
+
+<a name="Generic-options"></a>
+<h2 class="section"><a href="ffprobe.html#toc-Generic-options">3.2 Generic options</a></h2>
+
+<p>These options are shared amongst the ff* tools.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>-L</samp>’</dt>
+<dd><p>Show license.
+</p>
+</dd>
+<dt> ‘<samp>-h, -?, -help, --help [<var>arg</var>]</samp>’</dt>
+<dd><p>Show help. An optional parameter may be specified to print help about a specific
+item. If no argument is specified, only basic (non advanced) tool
+options are shown.
+</p>
+<p>Possible values of <var>arg</var> are:
+</p><dl compact="compact">
+<dt> ‘<samp>long</samp>’</dt>
+<dd><p>Print advanced tool options in addition to the basic tool options.
+</p>
+</dd>
+<dt> ‘<samp>full</samp>’</dt>
+<dd><p>Print complete list of options, including shared and private options
+for encoders, decoders, demuxers, muxers, filters, etc.
+</p>
+</dd>
+<dt> ‘<samp>decoder=<var>decoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the decoder named <var>decoder_name</var>. Use the
+‘<samp>-decoders</samp>’ option to get a list of all decoders.
+</p>
+</dd>
+<dt> ‘<samp>encoder=<var>encoder_name</var></samp>’</dt>
+<dd><p>Print detailed information about the encoder named <var>encoder_name</var>. Use the
+‘<samp>-encoders</samp>’ option to get a list of all encoders.
+</p>
+</dd>
+<dt> ‘<samp>demuxer=<var>demuxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the demuxer named <var>demuxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all demuxers and muxers.
+</p>
+</dd>
+<dt> ‘<samp>muxer=<var>muxer_name</var></samp>’</dt>
+<dd><p>Print detailed information about the muxer named <var>muxer_name</var>. Use the
+‘<samp>-formats</samp>’ option to get a list of all muxers and demuxers.
+</p>
+</dd>
+<dt> ‘<samp>filter=<var>filter_name</var></samp>’</dt>
+<dd><p>Print detailed information about the filter name <var>filter_name</var>. Use the
+‘<samp>-filters</samp>’ option to get a list of all filters.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-version</samp>’</dt>
+<dd><p>Show version.
+</p>
+</dd>
+<dt> ‘<samp>-formats</samp>’</dt>
+<dd><p>Show available formats.
+</p>
+</dd>
+<dt> ‘<samp>-codecs</samp>’</dt>
+<dd><p>Show all codecs known to libavcodec.
+</p>
+<p>Note that the term ’codec’ is used throughout this documentation as a shortcut
+for what is more correctly called a media bitstream format.
+</p>
+</dd>
+<dt> ‘<samp>-decoders</samp>’</dt>
+<dd><p>Show available decoders.
+</p>
+</dd>
+<dt> ‘<samp>-encoders</samp>’</dt>
+<dd><p>Show all available encoders.
+</p>
+</dd>
+<dt> ‘<samp>-bsfs</samp>’</dt>
+<dd><p>Show available bitstream filters.
+</p>
+</dd>
+<dt> ‘<samp>-protocols</samp>’</dt>
+<dd><p>Show available protocols.
+</p>
+</dd>
+<dt> ‘<samp>-filters</samp>’</dt>
+<dd><p>Show available libavfilter filters.
+</p>
+</dd>
+<dt> ‘<samp>-pix_fmts</samp>’</dt>
+<dd><p>Show available pixel formats.
+</p>
+</dd>
+<dt> ‘<samp>-sample_fmts</samp>’</dt>
+<dd><p>Show available sample formats.
+</p>
+</dd>
+<dt> ‘<samp>-layouts</samp>’</dt>
+<dd><p>Show channel names and standard channel layouts.
+</p>
+</dd>
+<dt> ‘<samp>-colors</samp>’</dt>
+<dd><p>Show recognized color names.
+</p>
+</dd>
+<dt> ‘<samp>-loglevel [repeat+]<var>loglevel</var> | -v [repeat+]<var>loglevel</var></samp>’</dt>
+<dd><p>Set the logging level used by the library.
+Adding "repeat+" indicates that repeated log output should not be compressed
+to the first line and the "Last message repeated n times" line will be
+omitted. "repeat" can also be used alone.
+If "repeat" is used alone, and with no prior loglevel set, the default
+loglevel will be used. If multiple loglevel parameters are given, using
+’repeat’ will not change the loglevel.
+<var>loglevel</var> is a number or a string containing one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>quiet</samp>’</dt>
+<dd><p>Show nothing at all; be silent.
+</p></dd>
+<dt> ‘<samp>panic</samp>’</dt>
+<dd><p>Only show fatal errors which could lead the process to crash, such as
+and assert failure. This is not currently used for anything.
+</p></dd>
+<dt> ‘<samp>fatal</samp>’</dt>
+<dd><p>Only show fatal errors. These are errors after which the process absolutely
+cannot continue after.
+</p></dd>
+<dt> ‘<samp>error</samp>’</dt>
+<dd><p>Show all errors, including ones which can be recovered from.
+</p></dd>
+<dt> ‘<samp>warning</samp>’</dt>
+<dd><p>Show all warnings and errors. Any message related to possibly
+incorrect or unexpected events will be shown.
+</p></dd>
+<dt> ‘<samp>info</samp>’</dt>
+<dd><p>Show informative messages during processing. This is in addition to
+warnings and errors. This is the default value.
+</p></dd>
+<dt> ‘<samp>verbose</samp>’</dt>
+<dd><p>Same as <code>info</code>, except more verbose.
+</p></dd>
+<dt> ‘<samp>debug</samp>’</dt>
+<dd><p>Show everything, including debugging information.
+</p></dd>
+</dl>
+
+<p>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
+<code>AV_LOG_FORCE_NOCOLOR</code> or <code>NO_COLOR</code>, or can be forced setting
+the environment variable <code>AV_LOG_FORCE_COLOR</code>.
+The use of the environment variable <code>NO_COLOR</code> is deprecated and
+will be dropped in a following FFmpeg version.
+</p>
+</dd>
+<dt> ‘<samp>-report</samp>’</dt>
+<dd><p>Dump full command line and console output to a file named
+<code><var>program</var>-<var>YYYYMMDD</var>-<var>HHMMSS</var>.log</code> in the current
+directory.
+This file can be useful for bug reports.
+It also implies <code>-loglevel verbose</code>.
+</p>
+<p>Setting the environment variable <code>FFREPORT</code> to any value has the
+same effect. If the value is a ’:’-separated key=value sequence, these
+options will affect the report; options values must be escaped if they
+contain special characters or the options delimiter ’:’ (see the
+“Quoting and escaping” section in the ffmpeg-utils manual). The
+following option is recognized:
+</p><dl compact="compact">
+<dt> ‘<samp>file</samp>’</dt>
+<dd><p>set the file name to use for the report; <code>%p</code> is expanded to the name
+of the program, <code>%t</code> is expanded to a timestamp, <code>%%</code> is expanded
+to a plain <code>%</code>
+</p></dd>
+</dl>
+
+<p>Errors in parsing the environment variable are not fatal, and will not
+appear in the report.
+</p>
+</dd>
+<dt> ‘<samp>-hide_banner</samp>’</dt>
+<dd><p>Suppress printing banner.
+</p>
+<p>All FFmpeg tools will normally show a copyright notice, build options
+and library versions. This option can be used to suppress printing
+this information.
+</p>
+</dd>
+<dt> ‘<samp>-cpuflags flags (<em>global</em>)</samp>’</dt>
+<dd><p>Allows setting and clearing cpu flags. This option is intended
+for testing. Do not use it unless you know what you’re doing.
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -cpuflags -sse+mmx ...
+ffmpeg -cpuflags mmx ...
+ffmpeg -cpuflags 0 ...
+</pre></td></tr></table>
+<p>Possible flags for this option are:
+</p><dl compact="compact">
+<dt> ‘<samp>x86</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>mmx</samp>’</dt>
+<dt> ‘<samp>mmxext</samp>’</dt>
+<dt> ‘<samp>sse</samp>’</dt>
+<dt> ‘<samp>sse2</samp>’</dt>
+<dt> ‘<samp>sse2slow</samp>’</dt>
+<dt> ‘<samp>sse3</samp>’</dt>
+<dt> ‘<samp>sse3slow</samp>’</dt>
+<dt> ‘<samp>ssse3</samp>’</dt>
+<dt> ‘<samp>atom</samp>’</dt>
+<dt> ‘<samp>sse4.1</samp>’</dt>
+<dt> ‘<samp>sse4.2</samp>’</dt>
+<dt> ‘<samp>avx</samp>’</dt>
+<dt> ‘<samp>xop</samp>’</dt>
+<dt> ‘<samp>fma4</samp>’</dt>
+<dt> ‘<samp>3dnow</samp>’</dt>
+<dt> ‘<samp>3dnowext</samp>’</dt>
+<dt> ‘<samp>cmov</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>ARM</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>armv5te</samp>’</dt>
+<dt> ‘<samp>armv6</samp>’</dt>
+<dt> ‘<samp>armv6t2</samp>’</dt>
+<dt> ‘<samp>vfp</samp>’</dt>
+<dt> ‘<samp>vfpv3</samp>’</dt>
+<dt> ‘<samp>neon</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>PowerPC</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>altivec</samp>’</dt>
+</dl>
+</dd>
+<dt> ‘<samp>Specific Processors</samp>’</dt>
+<dd><dl compact="compact">
+<dt> ‘<samp>pentium2</samp>’</dt>
+<dt> ‘<samp>pentium3</samp>’</dt>
+<dt> ‘<samp>pentium4</samp>’</dt>
+<dt> ‘<samp>k6</samp>’</dt>
+<dt> ‘<samp>k62</samp>’</dt>
+<dt> ‘<samp>athlon</samp>’</dt>
+<dt> ‘<samp>athlonxp</samp>’</dt>
+<dt> ‘<samp>k8</samp>’</dt>
+</dl>
+</dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>-opencl_bench</samp>’</dt>
+<dd><p>Benchmark all available OpenCL devices and show the results. This option
+is only available when FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+</dd>
+<dt> ‘<samp>-opencl_options options (<em>global</em>)</samp>’</dt>
+<dd><p>Set OpenCL environment options. This option is only available when
+FFmpeg has been compiled with <code>--enable-opencl</code>.
+</p>
+<p><var>options</var> must be a list of <var>key</var>=<var>value</var> option pairs
+separated by ’:’. See the “OpenCL Options” section in the
+ffmpeg-utils manual for the list of supported options.
+</p></dd>
+</dl>
+
+<a name="AVOptions"></a>
+<h2 class="section"><a href="ffprobe.html#toc-AVOptions">3.3 AVOptions</a></h2>
+
+<p>These options are provided directly by the libavformat, libavdevice and
+libavcodec libraries. To see the list of available AVOptions, use the
+‘<samp>-help</samp>’ option. They are separated into two categories:
+</p><dl compact="compact">
+<dt> ‘<samp>generic</samp>’</dt>
+<dd><p>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.
+</p></dd>
+<dt> ‘<samp>private</samp>’</dt>
+<dd><p>These options are specific to the given container, device or codec. Private
+options are listed under their corresponding containers/devices/codecs.
+</p></dd>
+</dl>
+
+<p>For example to write an ID3v2.3 header instead of a default ID3v2.4 to
+an MP3 file, use the ‘<samp>id3v2_version</samp>’ private option of the MP3
+muxer:
+</p><table><tr><td> </td><td><pre class="example">ffmpeg -i input.flac -id3v2_version 3 out.mp3
+</pre></td></tr></table>
+
+<p>All codec AVOptions are per-stream, and thus a stream specifier
+should be attached to them.
+</p>
+<p>Note: the ‘<samp>-nooption</samp>’ syntax cannot be used for boolean
+AVOptions, use ‘<samp>-option 0</samp>’/‘<samp>-option 1</samp>’.
+</p>
+<p>Note: the 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.
+</p>
+<a name="Main-options"></a>
+<h2 class="section"><a href="ffprobe.html#toc-Main-options">3.4 Main options</a></h2>
+
+<dl compact="compact">
+<dt> ‘<samp>-f <var>format</var></samp>’</dt>
+<dd><p>Force format to use.
+</p>
+</dd>
+<dt> ‘<samp>-unit</samp>’</dt>
+<dd><p>Show the unit of the displayed values.
+</p>
+</dd>
+<dt> ‘<samp>-prefix</samp>’</dt>
+<dd><p>Use SI prefixes for the displayed values.
+Unless the "-byte_binary_prefix" option is used all the prefixes
+are decimal.
+</p>
+</dd>
+<dt> ‘<samp>-byte_binary_prefix</samp>’</dt>
+<dd><p>Force the use of binary prefixes for byte values.
+</p>
+</dd>
+<dt> ‘<samp>-sexagesimal</samp>’</dt>
+<dd><p>Use sexagesimal format HH:MM:SS.MICROSECONDS for time values.
+</p>
+</dd>
+<dt> ‘<samp>-pretty</samp>’</dt>
+<dd><p>Prettify the format of the displayed values, it corresponds to the
+options "-unit -prefix -byte_binary_prefix -sexagesimal".
+</p>
+</dd>
+<dt> ‘<samp>-of, -print_format <var>writer_name</var>[=<var>writer_options</var>]</samp>’</dt>
+<dd><p>Set the output printing format.
+</p>
+<p><var>writer_name</var> specifies the name of the writer, and
+<var>writer_options</var> specifies the options to be passed to the writer.
+</p>
+<p>For example for printing the output in JSON format, specify:
+</p><table><tr><td> </td><td><pre class="example">-print_format json
+</pre></td></tr></table>
+
+<p>For more details on the available output printing formats, see the
+Writers section below.
+</p>
+</dd>
+<dt> ‘<samp>-sections</samp>’</dt>
+<dd><p>Print sections structure and section information, and exit. The output
+is not meant to be parsed by a machine.
+</p>
+</dd>
+<dt> ‘<samp>-select_streams <var>stream_specifier</var></samp>’</dt>
+<dd><p>Select only the streams specified by <var>stream_specifier</var>. This
+option affects only the options related to streams
+(e.g. <code>show_streams</code>, <code>show_packets</code>, etc.).
+</p>
+<p>For example to show only audio streams, you can use the command:
+</p><table><tr><td> </td><td><pre class="example">ffprobe -show_streams -select_streams a INPUT
+</pre></td></tr></table>
+
+<p>To show only video packets belonging to the video stream with index 1:
+</p><table><tr><td> </td><td><pre class="example">ffprobe -show_packets -select_streams v:1 INPUT
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-show_data</samp>’</dt>
+<dd><p>Show payload data, as a hexadecimal and ASCII dump. Coupled with
+‘<samp>-show_packets</samp>’, it will dump the packets’ data. Coupled with
+‘<samp>-show_streams</samp>’, it will dump the codec extradata.
+</p>
+<p>The dump is printed as the "data" field. It may contain newlines.
+</p>
+</dd>
+<dt> ‘<samp>-show_error</samp>’</dt>
+<dd><p>Show information about the error found when trying to probe the input.
+</p>
+<p>The error information is printed within a section with name "ERROR".
+</p>
+</dd>
+<dt> ‘<samp>-show_format</samp>’</dt>
+<dd><p>Show information about the container format of the input multimedia
+stream.
+</p>
+<p>All the container format information is printed within a section with
+name "FORMAT".
+</p>
+</dd>
+<dt> ‘<samp>-show_format_entry <var>name</var></samp>’</dt>
+<dd><p>Like ‘<samp>-show_format</samp>’, but only prints the specified entry of the
+container format information, rather than all. This option may be given more
+than once, then all specified entries will be shown.
+</p>
+<p>This option is deprecated, use <code>show_entries</code> instead.
+</p>
+</dd>
+<dt> ‘<samp>-show_entries <var>section_entries</var></samp>’</dt>
+<dd><p>Set list of entries to show.
+</p>
+<p>Entries are specified according to the following
+syntax. <var>section_entries</var> contains a list of section entries
+separated by <code>:</code>. Each section entry is composed by a section
+name (or unique name), optionally followed by a list of entries local
+to that section, separated by <code>,</code>.
+</p>
+<p>If section name is specified but is followed by no <code>=</code>, all
+entries are printed to output, together with all the contained
+sections. Otherwise only the entries specified in the local section
+entries list are printed. In particular, if <code>=</code> is specified but
+the list of local entries is empty, then no entries will be shown for
+that section.
+</p>
+<p>Note that the order of specification of the local section entries is
+not honored in the output, and the usual display order will be
+retained.
+</p>
+<p>The formal syntax is given by:
+</p><table><tr><td> </td><td><pre class="example"><var>LOCAL_SECTION_ENTRIES</var> ::= <var>SECTION_ENTRY_NAME</var>[,<var>LOCAL_SECTION_ENTRIES</var>]
+<var>SECTION_ENTRY</var> ::= <var>SECTION_NAME</var>[=[<var>LOCAL_SECTION_ENTRIES</var>]]
+<var>SECTION_ENTRIES</var> ::= <var>SECTION_ENTRY</var>[:<var>SECTION_ENTRIES</var>]
+</pre></td></tr></table>
+
+<p>For example, to show only the index and type of each stream, and the PTS
+time, duration time, and stream index of the packets, you can specify
+the argument:
+</p><table><tr><td> </td><td><pre class="example">packet=pts_time,duration_time,stream_index : stream=index,codec_type
+</pre></td></tr></table>
+
+<p>To show all the entries in the section "format", but only the codec
+type in the section "stream", specify the argument:
+</p><table><tr><td> </td><td><pre class="example">format : stream=codec_type
+</pre></td></tr></table>
+
+<p>To show all the tags in the stream and format sections:
+</p><table><tr><td> </td><td><pre class="example">format_tags : format_tags
+</pre></td></tr></table>
+
+<p>To show only the <code>title</code> tag (if available) in the stream
+sections:
+</p><table><tr><td> </td><td><pre class="example">stream_tags=title
+</pre></td></tr></table>
+
+</dd>
+<dt> ‘<samp>-show_packets</samp>’</dt>
+<dd><p>Show information about each packet contained in the input multimedia
+stream.
+</p>
+<p>The information for each single packet is printed within a dedicated
+section with name "PACKET".
+</p>
+</dd>
+<dt> ‘<samp>-show_frames</samp>’</dt>
+<dd><p>Show information about each frame and subtitle contained in the input
+multimedia stream.
+</p>
+<p>The information for each single frame is printed within a dedicated
+section with name "FRAME" or "SUBTITLE".
+</p>
+</dd>
+<dt> ‘<samp>-show_streams</samp>’</dt>
+<dd><p>Show information about each media stream contained in the input
+multimedia stream.
+</p>
+<p>Each media stream information is printed within a dedicated section
+with name "STREAM".
+</p>
+</dd>
+<dt> ‘<samp>-show_programs</samp>’</dt>
+<dd><p>Show information about programs and their streams contained in the input
+multimedia stream.
+</p>
+<p>Each media stream information is printed within a dedicated section
+with name "PROGRAM_STREAM".
+</p>
+</dd>
+<dt> ‘<samp>-show_chapters</samp>’</dt>
+<dd><p>Show information about chapters stored in the format.
+</p>
+<p>Each chapter is printed within a dedicated section with name "CHAPTER".
+</p>
+</dd>
+<dt> ‘<samp>-count_frames</samp>’</dt>
+<dd><p>Count the number of frames per stream and report it in the
+corresponding stream section.
+</p>
+</dd>
+<dt> ‘<samp>-count_packets</samp>’</dt>
+<dd><p>Count the number of packets per stream and report it in the
+corresponding stream section.
+</p>
+</dd>
+<dt> ‘<samp>-read_intervals <var>read_intervals</var></samp>’</dt>
+<dd>
+<p>Read only the specified intervals. <var>read_intervals</var> must be a
+sequence of interval specifications separated by ",".
+<code>ffprobe</code> will seek to the interval starting point, and will
+continue reading from that.
+</p>
+<p>Each interval is specified by two optional parts, separated by "%".
+</p>
+<p>The first part specifies the interval start position. It is
+interpreted as an abolute position, or as a relative offset from the
+current position if it is preceded by the "+" character. If this first
+part is not specified, no seeking will be performed when reading this
+interval.
+</p>
+<p>The second part specifies the interval end position. It is interpreted
+as an absolute position, or as a relative offset from the current
+position if it is preceded by the "+" character. If the offset
+specification starts with "#", it is interpreted as the number of
+packets to read (not including the flushing packets) from the interval
+start. If no second part is specified, the program will read until the
+end of the input.
+</p>
+<p>Note that seeking is not accurate, thus the actual interval start
+point may be different from the specified position. Also, when an
+interval duration is specified, the absolute end time will be computed
+by adding the duration to the interval start point found by seeking
+the file, rather than to the specified start value.
+</p>
+<p>The formal syntax is given by:
+</p><table><tr><td> </td><td><pre class="example"><var>INTERVAL</var> ::= [<var>START</var>|+<var>START_OFFSET</var>][%[<var>END</var>|+<var>END_OFFSET</var>]]
+<var>INTERVALS</var> ::= <var>INTERVAL</var>[,<var>INTERVALS</var>]
+</pre></td></tr></table>
+
+<p>A few examples follow.
+</p><ul>
+<li>
+Seek to time 10, read packets until 20 seconds after the found seek
+point, then seek to position <code>01:30</code> (1 minute and thirty
+seconds) and read packets until position <code>01:45</code>.
+<table><tr><td> </td><td><pre class="example">10%+20,01:30%01:45
+</pre></td></tr></table>
+
+</li><li>
+Read only 42 packets after seeking to position <code>01:23</code>:
+<table><tr><td> </td><td><pre class="example">01:23%+#42
+</pre></td></tr></table>
+
+</li><li>
+Read only the first 20 seconds from the start:
+<table><tr><td> </td><td><pre class="example">%+20
+</pre></td></tr></table>
+
+</li><li>
+Read from the start until position <code>02:30</code>:
+<table><tr><td> </td><td><pre class="example">%02:30
+</pre></td></tr></table>
+</li></ul>
+
+</dd>
+<dt> ‘<samp>-show_private_data, -private</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>-show_program_version</samp>’</dt>
+<dd><p>Show information related to program version.
+</p>
+<p>Version information is printed within a section with name
+"PROGRAM_VERSION".
+</p>
+</dd>
+<dt> ‘<samp>-show_library_versions</samp>’</dt>
+<dd><p>Show information related to library versions.
+</p>
+<p>Version information for each library is printed within a section with
+name "LIBRARY_VERSION".
+</p>
+</dd>
+<dt> ‘<samp>-show_versions</samp>’</dt>
+<dd><p>Show information related to program and library versions. This is the
+equivalent of setting both ‘<samp>-show_program_version</samp>’ and
+‘<samp>-show_library_versions</samp>’ options.
+</p>
+</dd>
+<dt> ‘<samp>-bitexact</samp>’</dt>
+<dd><p>Force bitexact output, useful to produce output which is not dependent
+on the specific build.
+</p>
+</dd>
+<dt> ‘<samp>-i <var>input_file</var></samp>’</dt>
+<dd><p>Read <var>input_file</var>.
+</p>
+</dd>
+</dl>
+
+<a name="Writers"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-Writers">4. Writers</a></h1>
+
+<p>A writer defines the output format adopted by <code>ffprobe</code>, and will be
+used for printing all the parts of the output.
+</p>
+<p>A writer may accept one or more arguments, which specify the options
+to adopt. The options are specified as a list of <var>key</var>=<var>value</var>
+pairs, separated by ":".
+</p>
+<p>All writers support the following options:
+</p>
+<dl compact="compact">
+<dt> ‘<samp>string_validation, sv</samp>’</dt>
+<dd><p>Set string validation mode.
+</p>
+<p>The following values are accepted.
+</p><dl compact="compact">
+<dt> ‘<samp>fail</samp>’</dt>
+<dd><p>The writer will fail immediately in case an invalid string (UTF-8)
+sequence or code point is found in the input. This is especially
+useful to validate input metadata.
+</p>
+</dd>
+<dt> ‘<samp>ignore</samp>’</dt>
+<dd><p>Any validation error will be ignored. This will result in possibly
+broken output, especially with the json or xml writer.
+</p>
+</dd>
+<dt> ‘<samp>replace</samp>’</dt>
+<dd><p>The writer will substitute invalid UTF-8 sequences or code points with
+the string specified with the ‘<samp>string_validation_replacement</samp>’.
+</p></dd>
+</dl>
+
+<p>Default value is ‘<samp>replace</samp>’.
+</p>
+</dd>
+<dt> ‘<samp>string_validation_replacement, svr</samp>’</dt>
+<dd><p>Set replacement string to use in case ‘<samp>string_validation</samp>’ is
+set to ‘<samp>replace</samp>’.
+</p>
+<p>In case the option is not specified, the writer will assume the empty
+string, that is it will remove the invalid sequences from the input
+strings.
+</p></dd>
+</dl>
+
+<p>A description of the currently available writers follows.
+</p>
+<a name="default"></a>
+<h2 class="section"><a href="ffprobe.html#toc-default">4.1 default</a></h2>
+<p>Default format.
+</p>
+<p>Print each section in the form:
+</p><table><tr><td> </td><td><pre class="example">[SECTION]
+key1=val1
+...
+keyN=valN
+[/SECTION]
+</pre></td></tr></table>
+
+<p>Metadata tags are printed as a line in the corresponding FORMAT, STREAM or
+PROGRAM_STREAM section, and are prefixed by the string "TAG:".
+</p>
+<p>A description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>nokey, nk</samp>’</dt>
+<dd><p>If set to 1 specify not to print the key of each field. Default value
+is 0.
+</p>
+</dd>
+<dt> ‘<samp>noprint_wrappers, nw</samp>’</dt>
+<dd><p>If set to 1 specify not to print the section header and footer.
+Default value is 0.
+</p></dd>
+</dl>
+
+<a name="compact_002c-csv"></a>
+<h2 class="section"><a href="ffprobe.html#toc-compact_002c-csv">4.2 compact, csv</a></h2>
+<p>Compact and CSV format.
+</p>
+<p>The <code>csv</code> writer is equivalent to <code>compact</code>, but supports
+different defaults.
+</p>
+<p>Each section is printed on a single line.
+If no option is specifid, the output has the form:
+</p><table><tr><td> </td><td><pre class="example">section|key1=val1| ... |keyN=valN
+</pre></td></tr></table>
+
+<p>Metadata tags are printed in the corresponding "format" or "stream"
+section. A metadata tag key, if printed, is prefixed by the string
+"tag:".
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>item_sep, s</samp>’</dt>
+<dd><p>Specify the character to use for separating fields in the output line.
+It must be a single printable character, it is "|" by default ("," for
+the <code>csv</code> writer).
+</p>
+</dd>
+<dt> ‘<samp>nokey, nk</samp>’</dt>
+<dd><p>If set to 1 specify not to print the key of each field. Its default
+value is 0 (1 for the <code>csv</code> writer).
+</p>
+</dd>
+<dt> ‘<samp>escape, e</samp>’</dt>
+<dd><p>Set the escape mode to use, default to "c" ("csv" for the <code>csv</code>
+writer).
+</p>
+<p>It can assume one of the following values:
+</p><dl compact="compact">
+<dt> ‘<samp>c</samp>’</dt>
+<dd><p>Perform C-like escaping. Strings containing a newline (’\n’), carriage
+return (’\r’), a tab (’\t’), a form feed (’\f’), the escaping
+character (’\’) or the item separator character <var>SEP</var> 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 <var>SEP</var> is
+converted to "\<var>SEP</var>".
+</p>
+</dd>
+<dt> ‘<samp>csv</samp>’</dt>
+<dd><p>Perform CSV-like escaping, as described in RFC4180. Strings
+containing a newline (’\n’), a carriage return (’\r’), a double quote
+(’"’), or <var>SEP</var> are enclosed in double-quotes.
+</p>
+</dd>
+<dt> ‘<samp>none</samp>’</dt>
+<dd><p>Perform no escaping.
+</p></dd>
+</dl>
+
+</dd>
+<dt> ‘<samp>print_section, p</samp>’</dt>
+<dd><p>Print the section name at the begin of each line if the value is
+<code>1</code>, disable it with value set to <code>0</code>. Default value is
+<code>1</code>.
+</p>
+</dd>
+</dl>
+
+<a name="flat"></a>
+<h2 class="section"><a href="ffprobe.html#toc-flat">4.3 flat</a></h2>
+<p>Flat format.
+</p>
+<p>A free-form output where each line contains an explicit key=value, such as
+"streams.stream.3.tags.foo=bar". The output is shell escaped, so it can be
+directly embedded in sh scripts as long as the separator character is an
+alphanumeric character or an underscore (see <var>sep_char</var> option).
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>sep_char, s</samp>’</dt>
+<dd><p>Separator character used to separate the chapter, the section name, IDs and
+potential tags in the printed field key.
+</p>
+<p>Default value is ’.’.
+</p>
+</dd>
+<dt> ‘<samp>hierarchical, h</samp>’</dt>
+<dd><p>Specify if the section name specification should be hierarchical. If
+set to 1, and if there is more than one section in the current
+chapter, the section name will be prefixed by the name of the
+chapter. A value of 0 will disable this behavior.
+</p>
+<p>Default value is 1.
+</p></dd>
+</dl>
+
+<a name="ini"></a>
+<h2 class="section"><a href="ffprobe.html#toc-ini">4.4 ini</a></h2>
+<p>INI format output.
+</p>
+<p>Print output in an INI based format.
+</p>
+<p>The following conventions are adopted:
+</p>
+<ul>
+<li>
+all key and values are UTF-8
+</li><li>
+’.’ is the subgroup separator
+</li><li>
+newline, ’\t’, ’\f’, ’\b’ and the following characters are escaped
+</li><li>
+’\’ is the escape character
+</li><li>
+’#’ is the comment indicator
+</li><li>
+’=’ is the key/value separator
+</li><li>
+’:’ is not used but usually parsed as key/value separator
+</li></ul>
+
+<p>This writer accepts options as a list of <var>key</var>=<var>value</var> pairs,
+separated by ":".
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>hierarchical, h</samp>’</dt>
+<dd><p>Specify if the section name specification should be hierarchical. If
+set to 1, and if there is more than one section in the current
+chapter, the section name will be prefixed by the name of the
+chapter. A value of 0 will disable this behavior.
+</p>
+<p>Default value is 1.
+</p></dd>
+</dl>
+
+<a name="json"></a>
+<h2 class="section"><a href="ffprobe.html#toc-json">4.5 json</a></h2>
+<p>JSON based format.
+</p>
+<p>Each section is printed using JSON notation.
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>compact, c</samp>’</dt>
+<dd><p>If set to 1 enable compact output, that is each section will be
+printed on a single line. Default value is 0.
+</p></dd>
+</dl>
+
+<p>For more information about JSON, see <a href="http://www.json.org/">http://www.json.org/</a>.
+</p>
+<a name="xml"></a>
+<h2 class="section"><a href="ffprobe.html#toc-xml">4.6 xml</a></h2>
+<p>XML based format.
+</p>
+<p>The XML output is described in the XML schema description file
+‘<tt>ffprobe.xsd</tt>’ installed in the FFmpeg datadir.
+</p>
+<p>An updated version of the schema can be retrieved at the url
+<a href="http://www.ffmpeg.org/schema/ffprobe.xsd">http://www.ffmpeg.org/schema/ffprobe.xsd</a>, which redirects to the
+latest schema committed into the FFmpeg development source code tree.
+</p>
+<p>Note that the output issued will be compliant to the
+‘<tt>ffprobe.xsd</tt>’ schema only when no special global output options
+(‘<samp>unit</samp>’, ‘<samp>prefix</samp>’, ‘<samp>byte_binary_prefix</samp>’,
+‘<samp>sexagesimal</samp>’ etc.) are specified.
+</p>
+<p>The description of the accepted options follows.
+</p>
+<dl compact="compact">
+<dt> ‘<samp>fully_qualified, q</samp>’</dt>
+<dd><p>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.
+</p>
+</dd>
+<dt> ‘<samp>xsd_compliant, x</samp>’</dt>
+<dd><p>If set to 1 perform more checks for ensuring that the output is XSD
+compliant. Default value is 0.
+This option automatically sets ‘<samp>fully_qualified</samp>’ to 1.
+</p></dd>
+</dl>
+
+<p>For more information about the XML format, see
+<a href="http://www.w3.org/XML/">http://www.w3.org/XML/</a>.
+</p>
+<a name="Timecode"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-Timecode">5. Timecode</a></h1>
+
+<p><code>ffprobe</code> supports Timecode extraction:
+</p>
+<ul>
+<li>
+MPEG1/2 timecode is extracted from the GOP, and is available in the video
+stream details (‘<samp>-show_streams</samp>’, see <var>timecode</var>).
+
+</li><li>
+MOV timecode is extracted from tmcd track, so is available in the tmcd
+stream metadata (‘<samp>-show_streams</samp>’, see <var>TAG:timecode</var>).
+
+</li><li>
+DV, GXF and AVI timecodes are available in format metadata
+(‘<samp>-show_format</samp>’, see <var>TAG:timecode</var>).
+
+</li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-See-Also">6. See Also</a></h1>
+
+<p><a href="ffprobe-all.html">ffprobe-all</a>,
+<a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>,
+<a href="ffmpeg-bitstream-filters.html">ffmpeg-bitstream-filters</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="ffprobe.html#toc-Authors">7. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : General </title>
+
+<meta name="description" content="General Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : General ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">General Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-External-libraries" href="#External-libraries">1. External libraries</a>
+ <ul class="toc">
+ <li><a name="toc-OpenJPEG" href="#OpenJPEG">1.1 OpenJPEG</a></li>
+ <li><a name="toc-OpenCORE_002c-VisualOn_002c-and-Fraunhofer-libraries" href="#OpenCORE_002c-VisualOn_002c-and-Fraunhofer-libraries">1.2 OpenCORE, VisualOn, and Fraunhofer libraries</a>
+ <ul class="toc">
+ <li><a name="toc-OpenCORE-AMR" href="#OpenCORE-AMR">1.2.1 OpenCORE AMR</a></li>
+ <li><a name="toc-VisualOn-AAC-encoder-library" href="#VisualOn-AAC-encoder-library">1.2.2 VisualOn AAC encoder library</a></li>
+ <li><a name="toc-VisualOn-AMR_002dWB-encoder-library" href="#VisualOn-AMR_002dWB-encoder-library">1.2.3 VisualOn AMR-WB encoder library</a></li>
+ <li><a name="toc-Fraunhofer-AAC-library" href="#Fraunhofer-AAC-library">1.2.4 Fraunhofer AAC library</a></li>
+ </ul></li>
+ <li><a name="toc-LAME" href="#LAME">1.3 LAME</a></li>
+ <li><a name="toc-TwoLAME" href="#TwoLAME">1.4 TwoLAME</a></li>
+ <li><a name="toc-libvpx" href="#libvpx">1.5 libvpx</a></li>
+ <li><a name="toc-libwavpack" href="#libwavpack">1.6 libwavpack</a></li>
+ <li><a name="toc-x264" href="#x264">1.7 x264</a></li>
+ <li><a name="toc-x265" href="#x265">1.8 x265</a></li>
+ <li><a name="toc-libilbc" href="#libilbc">1.9 libilbc</a></li>
+ <li><a name="toc-libzvbi" href="#libzvbi">1.10 libzvbi</a></li>
+ <li><a name="toc-AviSynth" href="#AviSynth">1.11 AviSynth</a></li>
+ </ul></li>
+ <li><a name="toc-Supported-File-Formats_002c-Codecs-or-Features" href="#Supported-File-Formats_002c-Codecs-or-Features">2. Supported File Formats, Codecs or Features</a>
+ <ul class="toc">
+ <li><a name="toc-File-Formats" href="#File-Formats">2.1 File Formats</a></li>
+ <li><a name="toc-Image-Formats" href="#Image-Formats">2.2 Image Formats</a></li>
+ <li><a name="toc-Video-Codecs" href="#Video-Codecs">2.3 Video Codecs</a></li>
+ <li><a name="toc-Audio-Codecs" href="#Audio-Codecs">2.4 Audio Codecs</a></li>
+ <li><a name="toc-Subtitle-Formats" href="#Subtitle-Formats">2.5 Subtitle Formats</a></li>
+ <li><a name="toc-Network-Protocols" href="#Network-Protocols">2.6 Network Protocols</a></li>
+ <li><a name="toc-Input_002fOutput-Devices" href="#Input_002fOutput-Devices">2.7 Input/Output Devices</a></li>
+ <li><a name="toc-Timecode" href="#Timecode">2.8 Timecode</a></li>
+ </ul>
+</li>
+</ul>
+</div>
+
+<a name="External-libraries"></a>
+<h1 class="chapter"><a href="general.html#toc-External-libraries">1. External libraries</a></h1>
+
+<p>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
+<code>./configure</code>.
+</p>
+<a name="OpenJPEG"></a>
+<h2 class="section"><a href="general.html#toc-OpenJPEG">1.1 OpenJPEG</a></h2>
+
+<p>FFmpeg can use the OpenJPEG libraries for encoding/decoding J2K videos. Go to
+<a href="http://www.openjpeg.org/">http://www.openjpeg.org/</a> to get the libraries and follow the installation
+instructions. To enable using OpenJPEG in FFmpeg, pass <code>--enable-libopenjpeg</code> to
+‘<tt>./configure</tt>’.
+</p>
+
+<a name="OpenCORE_002c-VisualOn_002c-and-Fraunhofer-libraries"></a>
+<h2 class="section"><a href="general.html#toc-OpenCORE_002c-VisualOn_002c-and-Fraunhofer-libraries">1.2 OpenCORE, VisualOn, and Fraunhofer libraries</a></h2>
+
+<p>Spun off Google Android sources, OpenCore, VisualOn and Fraunhofer
+libraries provide encoders for a number of audio codecs.
+</p>
+<div class="float alert alert-info">
+<p>OpenCORE and VisualOn libraries are under the Apache License 2.0
+(see <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a> for details), which is
+incompatible to 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) by passing <code>--enable-version3</code> to configure in
+order to use it.
+</p>
+<p>The Fraunhofer AAC library is licensed under a license incompatible to the GPL
+and is not known to be compatible to the LGPL. Therefore, you have to pass
+<code>--enable-nonfree</code> to configure to use it.
+</p></div>
+<a name="OpenCORE-AMR"></a>
+<h3 class="subsection"><a href="general.html#toc-OpenCORE-AMR">1.2.1 OpenCORE AMR</a></h3>
+
+<p>FFmpeg can make use of the OpenCORE libraries for AMR-NB
+decoding/encoding and AMR-WB decoding.
+</p>
+<p>Go to <a href="http://sourceforge.net/projects/opencore-amr/">http://sourceforge.net/projects/opencore-amr/</a> and follow the
+instructions for installing the libraries.
+Then pass <code>--enable-libopencore-amrnb</code> and/or
+<code>--enable-libopencore-amrwb</code> to configure to enable them.
+</p>
+<a name="VisualOn-AAC-encoder-library"></a>
+<h3 class="subsection"><a href="general.html#toc-VisualOn-AAC-encoder-library">1.2.2 VisualOn AAC encoder library</a></h3>
+
+<p>FFmpeg can make use of the VisualOn AACenc library for AAC encoding.
+</p>
+<p>Go to <a href="http://sourceforge.net/projects/opencore-amr/">http://sourceforge.net/projects/opencore-amr/</a> and follow the
+instructions for installing the library.
+Then pass <code>--enable-libvo-aacenc</code> to configure to enable it.
+</p>
+<a name="VisualOn-AMR_002dWB-encoder-library"></a>
+<h3 class="subsection"><a href="general.html#toc-VisualOn-AMR_002dWB-encoder-library">1.2.3 VisualOn AMR-WB encoder library</a></h3>
+
+<p>FFmpeg can make use of the VisualOn AMR-WBenc library for AMR-WB encoding.
+</p>
+<p>Go to <a href="http://sourceforge.net/projects/opencore-amr/">http://sourceforge.net/projects/opencore-amr/</a> and follow the
+instructions for installing the library.
+Then pass <code>--enable-libvo-amrwbenc</code> to configure to enable it.
+</p>
+<a name="Fraunhofer-AAC-library"></a>
+<h3 class="subsection"><a href="general.html#toc-Fraunhofer-AAC-library">1.2.4 Fraunhofer AAC library</a></h3>
+
+<p>FFmpeg can make use of the Fraunhofer AAC library for AAC encoding.
+</p>
+<p>Go to <a href="http://sourceforge.net/projects/opencore-amr/">http://sourceforge.net/projects/opencore-amr/</a> and follow the
+instructions for installing the library.
+Then pass <code>--enable-libfdk-aac</code> to configure to enable it.
+</p>
+<a name="LAME"></a>
+<h2 class="section"><a href="general.html#toc-LAME">1.3 LAME</a></h2>
+
+<p>FFmpeg can make use of the LAME library for MP3 encoding.
+</p>
+<p>Go to <a href="http://lame.sourceforge.net/">http://lame.sourceforge.net/</a> and follow the
+instructions for installing the library.
+Then pass <code>--enable-libmp3lame</code> to configure to enable it.
+</p>
+<a name="TwoLAME"></a>
+<h2 class="section"><a href="general.html#toc-TwoLAME">1.4 TwoLAME</a></h2>
+
+<p>FFmpeg can make use of the TwoLAME library for MP2 encoding.
+</p>
+<p>Go to <a href="http://www.twolame.org/">http://www.twolame.org/</a> and follow the
+instructions for installing the library.
+Then pass <code>--enable-libtwolame</code> to configure to enable it.
+</p>
+<a name="libvpx"></a>
+<h2 class="section"><a href="general.html#toc-libvpx">1.5 libvpx</a></h2>
+
+<p>FFmpeg can make use of the libvpx library for VP8/VP9 encoding.
+</p>
+<p>Go to <a href="http://www.webmproject.org/">http://www.webmproject.org/</a> and follow the instructions for
+installing the library. Then pass <code>--enable-libvpx</code> to configure to
+enable it.
+</p>
+<a name="libwavpack"></a>
+<h2 class="section"><a href="general.html#toc-libwavpack">1.6 libwavpack</a></h2>
+
+<p>FFmpeg can make use of the libwavpack library for WavPack encoding.
+</p>
+<p>Go to <a href="http://www.wavpack.com/">http://www.wavpack.com/</a> and follow the instructions for
+installing the library. Then pass <code>--enable-libwavpack</code> to configure to
+enable it.
+</p>
+<a name="x264"></a>
+<h2 class="section"><a href="general.html#toc-x264">1.7 x264</a></h2>
+
+<p>FFmpeg can make use of the x264 library for H.264 encoding.
+</p>
+<p>Go to <a href="http://www.videolan.org/developers/x264.html">http://www.videolan.org/developers/x264.html</a> and follow the
+instructions for installing the library. Then pass <code>--enable-libx264</code> to
+configure to enable it.
+</p>
+<div class="float alert alert-info">
+<p>x264 is under the GNU Public License Version 2 or later
+(see <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">http://www.gnu.org/licenses/old-licenses/gpl-2.0.html</a> for
+details), you must upgrade FFmpeg’s license to GPL in order to use it.
+</p></div>
+<a name="x265"></a>
+<h2 class="section"><a href="general.html#toc-x265">1.8 x265</a></h2>
+
+<p>FFmpeg can make use of the x265 library for HEVC encoding.
+</p>
+<p>Go to <a href="http://x265.org/developers.html">http://x265.org/developers.html</a> and follow the instructions
+for installing the library. Then pass <code>--enable-libx265</code> to configure
+to enable it.
+</p>
+<div class="float ">
+<p>x265 is under the GNU Public License Version 2 or later
+(see <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">http://www.gnu.org/licenses/old-licenses/gpl-2.0.html</a> for
+details), you must upgrade FFmpeg’s license to GPL in order to use it.
+</p></div>
+<a name="libilbc"></a>
+<h2 class="section"><a href="general.html#toc-libilbc">1.9 libilbc</a></h2>
+
+<p>iLBC is a narrowband speech codec that has been made freely available
+by Google as part of the WebRTC project. libilbc is a packaging friendly
+copy of the iLBC codec. FFmpeg can make use of the libilbc library for
+iLBC encoding and decoding.
+</p>
+<p>Go to <a href="https://github.com/dekkers/libilbc">https://github.com/dekkers/libilbc</a> and follow the instructions for
+installing the library. Then pass <code>--enable-libilbc</code> to configure to
+enable it.
+</p>
+<a name="libzvbi"></a>
+<h2 class="section"><a href="general.html#toc-libzvbi">1.10 libzvbi</a></h2>
+
+<p>libzvbi is a VBI decoding library which can be used by FFmpeg to decode DVB
+teletext pages and DVB teletext subtitles.
+</p>
+<p>Go to <a href="http://sourceforge.net/projects/zapping/">http://sourceforge.net/projects/zapping/</a> and follow the instructions for
+installing the library. Then pass <code>--enable-libzvbi</code> to configure to
+enable it.
+</p>
+<div class="float alert alert-info">
+<p>libzvbi is licensed under the GNU General Public License Version 2 or later
+(see <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">http://www.gnu.org/licenses/old-licenses/gpl-2.0.html</a> for details),
+you must upgrade FFmpeg’s license to GPL in order to use it.
+</p></div>
+<a name="AviSynth"></a>
+<h2 class="section"><a href="general.html#toc-AviSynth">1.11 AviSynth</a></h2>
+
+<p>FFmpeg can read AviSynth scripts as input. To enable support, pass
+<code>--enable-avisynth</code> to configure. The correct headers are
+included in compat/avisynth/, which allows the user to enable support
+without needing to search for these headers themselves.
+</p>
+<p>For Windows, supported AviSynth variants are
+<a href="http://avisynth.nl">AviSynth 2.5 or 2.6</a> for 32-bit builds and
+<a href="http://avs-plus.net">AviSynth+ 0.1</a> for 32-bit and 64-bit builds.
+</p>
+<p>For Linux and OS X, the supported AviSynth variant is
+<a href="https://github.com/avxsynth/avxsynth">AvxSynth</a>.
+</p>
+<div class="float alert alert-info">
+<p>AviSynth and AvxSynth are loaded dynamically. Distributors can build FFmpeg
+with <code>--enable-avisynth</code>, and the binaries will work regardless of the
+end user having AviSynth or AvxSynth installed - they’ll only need to be
+installed to use AviSynth scripts (obviously).
+</p></div>
+
+<a name="Supported-File-Formats_002c-Codecs-or-Features"></a>
+<h1 class="chapter"><a href="general.html#toc-Supported-File-Formats_002c-Codecs-or-Features">2. Supported File Formats, Codecs or Features</a></h1>
+
+<p>You can use the <code>-formats</code> and <code>-codecs</code> options to have an exhaustive list.
+</p>
+<a name="File-Formats"></a>
+<h2 class="section"><a href="general.html#toc-File-Formats">2.1 File Formats</a></h2>
+
+<p>FFmpeg supports the following file formats through the <code>libavformat</code>
+library:
+</p>
+<table>
+<tr><td width="40%">Name</td><td width="10%">Encoding</td><td width="10%">Decoding</td><td width="40%">Comments</td></tr>
+<tr><td width="40%">4xm</td><td width="10%"></td><td width="10%">X</td><td width="40%">4X Technologies format, used in some games.</td></tr>
+<tr><td width="40%">8088flex TMV</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ACT Voice</td><td width="10%"></td><td width="10%">X</td><td width="40%">contains G.729 audio</td></tr>
+<tr><td width="40%">Adobe Filmstrip</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Audio IFF (AIFF)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">American Laser Games MM</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used in games like Mad Dog McCree.</td></tr>
+<tr><td width="40%">3GPP AMR</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Amazing Studio Packed Animation File</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used in game Heart Of Darkness.</td></tr>
+<tr><td width="40%">Apple HTTP Live Streaming</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Artworx Data Format</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADP</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio format used on the Nintendo Gamecube.</td></tr>
+<tr><td width="40%">AFC</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio format used on the Nintendo Gamecube.</td></tr>
+<tr><td width="40%">ASF</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">AST</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Audio format used on the Nintendo Wii.</td></tr>
+<tr><td width="40%">AVI</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">AviSynth</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">AVR</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio format used on Mac.</td></tr>
+<tr><td width="40%">AVS</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used by the Creature Shock game.</td></tr>
+<tr><td width="40%">Beam Software SIFF</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio and video format used in some games by Beam Software.</td></tr>
+<tr><td width="40%">Bethesda Softworks VID</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in some games from Bethesda Softworks.</td></tr>
+<tr><td width="40%">Binary text</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Bink</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used by many games.</td></tr>
+<tr><td width="40%">Bitmap Brothers JV</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Z and Z95 games.</td></tr>
+<tr><td width="40%">Brute Force & Ignorance</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in the game Flash Traffic: City of Angels.</td></tr>
+<tr><td width="40%">BRSTM</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio format used on the Nintendo Wii.</td></tr>
+<tr><td width="40%">BWF</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">CRI ADX</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Audio-only format used in console video games.</td></tr>
+<tr><td width="40%">Discworld II BMV</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Interplay C93</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in the game Cyberia from Interplay.</td></tr>
+<tr><td width="40%">Delphine Software International CIN</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used by Delphine Software games.</td></tr>
+<tr><td width="40%">CD+G</td><td width="10%"></td><td width="10%">X</td><td width="40%">Video format used by CD+G karaoke disks</td></tr>
+<tr><td width="40%">Commodore CDXL</td><td width="10%"></td><td width="10%">X</td><td width="40%">Amiga CD video format</td></tr>
+<tr><td width="40%">Core Audio Format</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Apple Core Audio Format</td></tr>
+<tr><td width="40%">CRC testing format</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">Creative Voice</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Created for the Sound Blaster Pro.</td></tr>
+<tr><td width="40%">CRYO APC</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio format used in some games by CRYO Interactive Entertainment.</td></tr>
+<tr><td width="40%">D-Cinema audio</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Deluxe Paint Animation</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DFA</td><td width="10%"></td><td width="10%">X</td><td width="40%">This format is used in Chronomaster game</td></tr>
+<tr><td width="40%">DV video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">DXA</td><td width="10%"></td><td width="10%">X</td><td width="40%">This format is used in the non-Windows version of the Feeble Files
+ game and different game cutscenes repacked for use with ScummVM.</td></tr>
+<tr><td width="40%">Electronic Arts cdata</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Electronic Arts Multimedia</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in various EA games; files have extensions like WVE and UV2.</td></tr>
+<tr><td width="40%">Ensoniq Paris Audio File</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">FFM (FFserver live feed)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Flash (SWF)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Flash 9 (AVM2)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Only embedded audio is decoded.</td></tr>
+<tr><td width="40%">FLI/FLC/FLX animation</td><td width="10%"></td><td width="10%">X</td><td width="40%">.fli/.flc files</td></tr>
+<tr><td width="40%">Flash Video (FLV)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Macromedia Flash video files</td></tr>
+<tr><td width="40%">framecrc testing format</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">FunCom ISS</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio format used in various games from FunCom like The Longest Journey.</td></tr>
+<tr><td width="40%">G.723.1</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">G.729 BIT</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">G.729 raw</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">GIF Animation</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">GXF</td><td width="10%">X</td><td width="10%">X</td><td width="40%">General eXchange Format SMPTE 360M, used by Thomson Grass Valley
+ playout servers.</td></tr>
+<tr><td width="40%">HNM</td><td width="10%"></td><td width="10%">X</td><td width="40%">Only version 4 supported, used in some games from Cryo Interactive</td></tr>
+<tr><td width="40%">iCEDraw File</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ICO</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Microsoft Windows ICO</td></tr>
+<tr><td width="40%">id Quake II CIN video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">id RoQ</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Used in Quake III, Jedi Knight 2 and other computer games.</td></tr>
+<tr><td width="40%">IEC61937 encapsulation</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">IFF</td><td width="10%"></td><td width="10%">X</td><td width="40%">Interchange File Format</td></tr>
+<tr><td width="40%">iLBC</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Interplay MVE</td><td width="10%"></td><td width="10%">X</td><td width="40%">Format used in various Interplay computer games.</td></tr>
+<tr><td width="40%">IV8</td><td width="10%"></td><td width="10%">X</td><td width="40%">A format generated by IndigoVision 8000 video server.</td></tr>
+<tr><td width="40%">IVF (On2)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">A format used by libvpx</td></tr>
+<tr><td width="40%">IRCAM</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">LATM</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">LMLM4</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used by Linux Media Labs MPEG-4 PCI boards</td></tr>
+<tr><td width="40%">LOAS</td><td width="10%"></td><td width="10%">X</td><td width="40%">contains LATM multiplexed AAC audio</td></tr>
+<tr><td width="40%">LVF</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">LXF</td><td width="10%"></td><td width="10%">X</td><td width="40%">VR native stream format, used by Leitch/Harris’ video servers.</td></tr>
+<tr><td width="40%">Matroska</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Matroska audio</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">FFmpeg metadata</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Metadata in text format.</td></tr>
+<tr><td width="40%">MAXIS XA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Sim City 3000; file extension .xa.</td></tr>
+<tr><td width="40%">MD Studio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Metal Gear Solid: The Twin Snakes</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Megalux Frame</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used by Megalux Ultimate Paint</td></tr>
+<tr><td width="40%">Mobotix .mxg</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Monkey’s Audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Motion Pixels MVI</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MOV/QuickTime/MP4</td><td width="10%">X</td><td width="10%">X</td><td width="40%">3GP, 3GP2, PSP, iPod variants supported</td></tr>
+<tr><td width="40%">MP2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MP3</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG-1 System</td><td width="10%">X</td><td width="10%">X</td><td width="40%">muxed audio and video, VCD format supported</td></tr>
+<tr><td width="40%">MPEG-PS (program stream)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">also known as <code>VOB</code> file, SVCD and DVD format supported</td></tr>
+<tr><td width="40%">MPEG-TS (transport stream)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">also known as DVB Transport Stream</td></tr>
+<tr><td width="40%">MPEG-4</td><td width="10%">X</td><td width="10%">X</td><td width="40%">MPEG-4 is a variant of QuickTime.</td></tr>
+<tr><td width="40%">Mirillis FIC video</td><td width="10%"></td><td width="10%">X</td><td width="40%">No cursor rendering.</td></tr>
+<tr><td width="40%">MIME multipart JPEG</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">MSN TCP webcam</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used by MSN Messenger webcam streams.</td></tr>
+<tr><td width="40%">MTV</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Musepack</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Musepack SV8</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Material eXchange Format (MXF)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">SMPTE 377M, used by D-Cinema, broadcast industry.</td></tr>
+<tr><td width="40%">Material eXchange Format (MXF), D-10 Mapping</td><td width="10%">X</td><td width="10%">X</td><td width="40%">SMPTE 386M, D-10/IMX Mapping.</td></tr>
+<tr><td width="40%">NC camera feed</td><td width="10%"></td><td width="10%">X</td><td width="40%">NC (AVIP NC4600) camera streams</td></tr>
+<tr><td width="40%">NIST SPeech HEader REsources</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">NTT TwinVQ (VQF)</td><td width="10%"></td><td width="10%">X</td><td width="40%">Nippon Telegraph and Telephone Corporation TwinVQ.</td></tr>
+<tr><td width="40%">Nullsoft Streaming Video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">NuppelVideo</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">NUT</td><td width="10%">X</td><td width="10%">X</td><td width="40%">NUT Open Container Format</td></tr>
+<tr><td width="40%">Ogg</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Playstation Portable PMP</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Portable Voice Format</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">TechnoTrend PVA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used by TechnoTrend DVB PCI boards.</td></tr>
+<tr><td width="40%">QCP</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw ADTS (AAC)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw AC-3</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw Chinese AVS video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw CRI ADX</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw Dirac</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw DNxHD</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw DTS</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw DTS-HD</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw E-AC-3</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw FLAC</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw GSM</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw H.261</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw H.263</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw H.264</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw HEVC</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw Ingenient MJPEG</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw MJPEG</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw MLP</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw MPEG</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw MPEG-1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw MPEG-2</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw MPEG-4</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw NULL</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">raw video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw id RoQ</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">raw Shorten</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw TAK</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">raw TrueHD</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw VC-1</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM A-law</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM mu-law</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 8 bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 16 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 16 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 24 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 24 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 32 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM signed 32 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 8 bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 16 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 16 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 24 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 24 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 32 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM unsigned 32 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM floating-point 32 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM floating-point 32 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM floating-point 64 bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">raw PCM floating-point 64 bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">RDT</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">REDCODE R3D</td><td width="10%"></td><td width="10%">X</td><td width="40%">File format used by RED Digital cameras, contains JPEG 2000 frames and PCM audio.</td></tr>
+<tr><td width="40%">RealMedia</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Redirector</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">RedSpark</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Renderware TeXture Dictionary</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">RL2</td><td width="10%"></td><td width="10%">X</td><td width="40%">Audio and video format used in some games by Entertainment Software Partners.</td></tr>
+<tr><td width="40%">RPL/ARMovie</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Lego Mindstorms RSO</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">RSD</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMP</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Output is performed by publishing stream to RTMP server</td></tr>
+<tr><td width="40%">RTP</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTSP</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SAP</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SBG</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">SDP</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Sega FILM/CPK</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in many Sega Saturn console games.</td></tr>
+<tr><td width="40%">Silicon Graphics Movie</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Sierra SOL</td><td width="10%"></td><td width="10%">X</td><td width="40%">.sol files used in Sierra Online games.</td></tr>
+<tr><td width="40%">Sierra VMD</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Sierra CD-ROM games.</td></tr>
+<tr><td width="40%">Smacker</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used by many games.</td></tr>
+<tr><td width="40%">SMJPEG</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Used in certain Loki game ports.</td></tr>
+<tr><td width="40%">Smush</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used in some LucasArts games.</td></tr>
+<tr><td width="40%">Sony OpenMG (OMA)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Audio format used in Sony Sonic Stage and Sony Vegas.</td></tr>
+<tr><td width="40%">Sony PlayStation STR</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Sony Wave64 (W64)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SoX native format</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SUN AU format</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Text files</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">THP</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used on the Nintendo GameCube.</td></tr>
+<tr><td width="40%">Tiertex Limited SEQ</td><td width="10%"></td><td width="10%">X</td><td width="40%">Tiertex .seq files used in the DOS CD-ROM version of the game Flashback.</td></tr>
+<tr><td width="40%">True Audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">VC-1 test bitstream</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Vivo</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">WAV</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">WavPack</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">WebM</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Televison (WTV)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Wing Commander III movie</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used in Origin’s Wing Commander III computer game.</td></tr>
+<tr><td width="40%">Westwood Studios audio</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used in Westwood Studios games.</td></tr>
+<tr><td width="40%">Westwood Studios VQA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Multimedia format used in Westwood Studios games.</td></tr>
+<tr><td width="40%">XMV</td><td width="10%"></td><td width="10%">X</td><td width="40%">Microsoft video container used in Xbox games.</td></tr>
+<tr><td width="40%">xWMA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Microsoft audio container used by XAudio 2.</td></tr>
+<tr><td width="40%">eXtended BINary text (XBIN)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">YUV4MPEG pipe</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Psygnosis YOP</td><td width="10%"></td><td width="10%">X</td></tr>
+</table>
+
+<p><code>X</code> means that encoding (resp. decoding) is supported.
+</p>
+<a name="Image-Formats"></a>
+<h2 class="section"><a href="general.html#toc-Image-Formats">2.2 Image Formats</a></h2>
+
+<p>FFmpeg can read and write images for each frame of a video sequence. The
+following image formats are supported:
+</p>
+<table>
+<tr><td width="40%">Name</td><td width="10%">Encoding</td><td width="10%">Decoding</td><td width="40%">Comments</td></tr>
+<tr><td width="40%">.Y.U.V</td><td width="10%">X</td><td width="10%">X</td><td width="40%">one raw file per component</td></tr>
+<tr><td width="40%">animated GIF</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">BMP</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Microsoft BMP image</td></tr>
+<tr><td width="40%">PIX</td><td width="10%"></td><td width="10%">X</td><td width="40%">PIX is an image format used in the Argonaut BRender engine.</td></tr>
+<tr><td width="40%">DPX</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Digital Picture Exchange</td></tr>
+<tr><td width="40%">EXR</td><td width="10%"></td><td width="10%">X</td><td width="40%">OpenEXR</td></tr>
+<tr><td width="40%">JPEG</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Progressive JPEG is not supported.</td></tr>
+<tr><td width="40%">JPEG 2000</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">JPEG-LS</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">LJPEG</td><td width="10%">X</td><td width="10%"></td><td width="40%">Lossless JPEG</td></tr>
+<tr><td width="40%">PAM</td><td width="10%">X</td><td width="10%">X</td><td width="40%">PAM is a PNM extension with alpha support.</td></tr>
+<tr><td width="40%">PBM</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Portable BitMap image</td></tr>
+<tr><td width="40%">PCX</td><td width="10%">X</td><td width="10%">X</td><td width="40%">PC Paintbrush</td></tr>
+<tr><td width="40%">PGM</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Portable GrayMap image</td></tr>
+<tr><td width="40%">PGMYUV</td><td width="10%">X</td><td width="10%">X</td><td width="40%">PGM with U and V components in YUV 4:2:0</td></tr>
+<tr><td width="40%">PIC</td><td width="10%"></td><td width="10%">X</td><td width="40%">Pictor/PC Paint</td></tr>
+<tr><td width="40%">PNG</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PPM</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Portable PixelMap image</td></tr>
+<tr><td width="40%">PTX</td><td width="10%"></td><td width="10%">X</td><td width="40%">V.Flash PTX format</td></tr>
+<tr><td width="40%">SGI</td><td width="10%">X</td><td width="10%">X</td><td width="40%">SGI RGB image format</td></tr>
+<tr><td width="40%">Sun Rasterfile</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Sun RAS image format</td></tr>
+<tr><td width="40%">TIFF</td><td width="10%">X</td><td width="10%">X</td><td width="40%">YUV, JPEG and some extension is not supported yet.</td></tr>
+<tr><td width="40%">Truevision Targa</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Targa (.TGA) image format</td></tr>
+<tr><td width="40%">WebP</td><td width="10%">E</td><td width="10%">X</td><td width="40%">WebP image format, encoding supported through external library libwebp</td></tr>
+<tr><td width="40%">XBM</td><td width="10%">X</td><td width="10%">X</td><td width="40%">X BitMap image format</td></tr>
+<tr><td width="40%">XFace</td><td width="10%">X</td><td width="10%">X</td><td width="40%">X-Face image format</td></tr>
+<tr><td width="40%">XWD</td><td width="10%">X</td><td width="10%">X</td><td width="40%">X Window Dump image format</td></tr>
+</table>
+
+<p><code>X</code> means that encoding (resp. decoding) is supported.
+</p>
+<p><code>E</code> means that support is provided through an external library.
+</p>
+<a name="Video-Codecs"></a>
+<h2 class="section"><a href="general.html#toc-Video-Codecs">2.3 Video Codecs</a></h2>
+
+<table>
+<tr><td width="40%">Name</td><td width="10%">Encoding</td><td width="10%">Decoding</td><td width="40%">Comments</td></tr>
+<tr><td width="40%">4X Movie</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in certain computer games.</td></tr>
+<tr><td width="40%">8088flex TMV</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">A64 multicolor</td><td width="10%">X</td><td width="10%"></td><td width="40%">Creates video suitable to be played on a commodore 64 (multicolor mode).</td></tr>
+<tr><td width="40%">Amazing Studio PAF Video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">American Laser Games MM</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in games like Mad Dog McCree.</td></tr>
+<tr><td width="40%">AMV Video</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Used in Chinese MP3 players.</td></tr>
+<tr><td width="40%">ANSI/ASCII art</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Apple Intermediate Codec</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Apple MJPEG-B</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Apple ProRes</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Apple QuickDraw</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: qdrw</td></tr>
+<tr><td width="40%">Asus v1</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: ASV1</td></tr>
+<tr><td width="40%">Asus v2</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: ASV2</td></tr>
+<tr><td width="40%">ATI VCR1</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: VCR1</td></tr>
+<tr><td width="40%">ATI VCR2</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: VCR2</td></tr>
+<tr><td width="40%">Auravision Aura</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Auravision Aura 2</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Autodesk Animator Flic video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Autodesk RLE</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: AASC</td></tr>
+<tr><td width="40%">Avid 1:1 10-bit RGB Packer</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: AVrp</td></tr>
+<tr><td width="40%">AVS (Audio Video Standard) video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Video encoding used by the Creature Shock game.</td></tr>
+<tr><td width="40%">AYUV</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Microsoft uncompressed packed 4:4:4:4</td></tr>
+<tr><td width="40%">Beam Software VB</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Bethesda VID video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in some games from Bethesda Softworks.</td></tr>
+<tr><td width="40%">Bink Video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Bitmap Brothers JV video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">y41p Brooktree uncompressed 4:1:1 12-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Brute Force & Ignorance</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in the game Flash Traffic: City of Angels.</td></tr>
+<tr><td width="40%">C93 video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in Cyberia game.</td></tr>
+<tr><td width="40%">CamStudio</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: CSCD</td></tr>
+<tr><td width="40%">CD+G</td><td width="10%"></td><td width="10%">X</td><td width="40%">Video codec for CD+G karaoke disks</td></tr>
+<tr><td width="40%">CDXL</td><td width="10%"></td><td width="10%">X</td><td width="40%">Amiga CD video codec</td></tr>
+<tr><td width="40%">Chinese AVS video</td><td width="10%">E</td><td width="10%">X</td><td width="40%">AVS1-P2, JiZhun profile, encoding through external library libxavs</td></tr>
+<tr><td width="40%">Delphine Software International CIN video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in Delphine Software International games.</td></tr>
+<tr><td width="40%">Discworld II BMV Video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Canopus Lossless Codec</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Cinepak</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Cirrus Logic AccuPak</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: CLJR</td></tr>
+<tr><td width="40%">CPiA Video Format</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Creative YUV (CYUV)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DFA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in Chronomaster game.</td></tr>
+<tr><td width="40%">Dirac</td><td width="10%">E</td><td width="10%">X</td><td width="40%">supported through external library libschroedinger</td></tr>
+<tr><td width="40%">Deluxe Paint Animation</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DNxHD</td><td width="10%">X</td><td width="10%">X</td><td width="40%">aka SMPTE VC3</td></tr>
+<tr><td width="40%">Duck TrueMotion 1.0</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: DUCK</td></tr>
+<tr><td width="40%">Duck TrueMotion 2.0</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: TM20</td></tr>
+<tr><td width="40%">DV (Digital Video)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Dxtory capture format</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Feeble Files/ScummVM DXA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec originally used in Feeble Files game.</td></tr>
+<tr><td width="40%">Electronic Arts CMV video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in NHL 95 game.</td></tr>
+<tr><td width="40%">Electronic Arts Madcow video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Electronic Arts TGV video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Electronic Arts TGQ video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Electronic Arts TQI video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Escape 124</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Escape 130</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">FFmpeg video codec #1</td><td width="10%">X</td><td width="10%">X</td><td width="40%">lossless codec (fourcc: FFV1)</td></tr>
+<tr><td width="40%">Flash Screen Video v1</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: FSV1</td></tr>
+<tr><td width="40%">Flash Screen Video v2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Flash Video (FLV)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Sorenson H.263 used in Flash</td></tr>
+<tr><td width="40%">Forward Uncompressed</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Fraps</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Go2Webinar</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: G2M4</td></tr>
+<tr><td width="40%">H.261</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">H.263 / H.263-1996</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">H.263+ / H.263-1998 / H.263 version 2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libx264</td></tr>
+<tr><td width="40%">HEVC</td><td width="10%">X</td><td width="10%">X</td><td width="40%">encoding supported through the external library libx265</td></tr>
+<tr><td width="40%">HNM version 4</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">HuffYUV</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">HuffYUV FFmpeg variant</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">IBM Ultimotion</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: ULTI</td></tr>
+<tr><td width="40%">id Cinematic video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Quake II.</td></tr>
+<tr><td width="40%">id RoQ video</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Used in Quake III, Jedi Knight 2, other computer games.</td></tr>
+<tr><td width="40%">IFF ILBM</td><td width="10%"></td><td width="10%">X</td><td width="40%">IFF interleaved bitmap</td></tr>
+<tr><td width="40%">IFF ByteRun1</td><td width="10%"></td><td width="10%">X</td><td width="40%">IFF run length encoded bitmap</td></tr>
+<tr><td width="40%">Intel H.263</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Intel Indeo 2</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Intel Indeo 3</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Intel Indeo 4</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Intel Indeo 5</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Interplay C93</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in the game Cyberia from Interplay.</td></tr>
+<tr><td width="40%">Interplay MVE video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Interplay .MVE files.</td></tr>
+<tr><td width="40%">J2K</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Karl Morton’s video codec</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in Worms games.</td></tr>
+<tr><td width="40%">Kega Game Video (KGV1)</td><td width="10%"></td><td width="10%">X</td><td width="40%">Kega emulator screen capture codec.</td></tr>
+<tr><td width="40%">Lagarith</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">LCL (LossLess Codec Library) MSZH</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">LCL (LossLess Codec Library) ZLIB</td><td width="10%">E</td><td width="10%">E</td></tr>
+<tr><td width="40%">LOCO</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">LucasArts Smush</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in LucasArts games.</td></tr>
+<tr><td width="40%">lossless MJPEG</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Microsoft ATC Screen</td><td width="10%"></td><td width="10%">X</td><td width="40%">Also known as Microsoft Screen 3.</td></tr>
+<tr><td width="40%">Microsoft Expression Encoder Screen</td><td width="10%"></td><td width="10%">X</td><td width="40%">Also known as Microsoft Titanium Screen 2.</td></tr>
+<tr><td width="40%">Microsoft RLE</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Microsoft Screen 1</td><td width="10%"></td><td width="10%">X</td><td width="40%">Also known as Windows Media Video V7 Screen.</td></tr>
+<tr><td width="40%">Microsoft Screen 2</td><td width="10%"></td><td width="10%">X</td><td width="40%">Also known as Windows Media Video V9 Screen.</td></tr>
+<tr><td width="40%">Microsoft Video 1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Mimic</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in MSN Messenger Webcam streams.</td></tr>
+<tr><td width="40%">Miro VideoXL</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: VIXL</td></tr>
+<tr><td width="40%">MJPEG (Motion JPEG)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Mobotix MxPEG video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Motion Pixels video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG-1 video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG-2 video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG-4 part 2</td><td width="10%">X</td><td width="10%">X</td><td width="40%">libxvidcore can be used alternatively for encoding.</td></tr>
+<tr><td width="40%">MPEG-4 part 2 Microsoft variant version 1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG-4 part 2 Microsoft variant version 2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG-4 part 2 Microsoft variant version 3</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Nintendo Gamecube THP video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">NuppelVideo/RTjpeg</td><td width="10%"></td><td width="10%">X</td><td width="40%">Video encoding used in NuppelVideo files.</td></tr>
+<tr><td width="40%">On2 VP3</td><td width="10%"></td><td width="10%">X</td><td width="40%">still experimental</td></tr>
+<tr><td width="40%">On2 VP5</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: VP50</td></tr>
+<tr><td width="40%">On2 VP6</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: VP60,VP61,VP62</td></tr>
+<tr><td width="40%">VP8</td><td width="10%">E</td><td width="10%">X</td><td width="40%">fourcc: VP80, encoding supported through external library libvpx</td></tr>
+<tr><td width="40%">VP9</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libvpx</td></tr>
+<tr><td width="40%">Pinnacle TARGA CineWave YUV16</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: Y216</td></tr>
+<tr><td width="40%">Prores</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: apch,apcn,apcs,apco</td></tr>
+<tr><td width="40%">Q-team QPEG</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourccs: QPEG, Q1.0, Q1.1</td></tr>
+<tr><td width="40%">QuickTime 8BPS video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">QuickTime Animation (RLE) video</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: ’rle ’</td></tr>
+<tr><td width="40%">QuickTime Graphics (SMC)</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: ’smc ’</td></tr>
+<tr><td width="40%">QuickTime video (RPZA)</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: rpza</td></tr>
+<tr><td width="40%">R10K AJA Kona 10-bit RGB Codec</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">R210 Quicktime Uncompressed RGB 10-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Raw Video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">RealVideo 1.0</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">RealVideo 2.0</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">RealVideo 3.0</td><td width="10%"></td><td width="10%">X</td><td width="40%">still far from ideal</td></tr>
+<tr><td width="40%">RealVideo 4.0</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Renderware TXD (TeXture Dictionary)</td><td width="10%"></td><td width="10%">X</td><td width="40%">Texture dictionaries used by the Renderware Engine.</td></tr>
+<tr><td width="40%">RL2 video</td><td width="10%"></td><td width="10%">X</td><td width="40%">used in some games by Entertainment Software Partners</td></tr>
+<tr><td width="40%">SGI RLE 8-bit</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Sierra VMD video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Sierra VMD files.</td></tr>
+<tr><td width="40%">Silicon Graphics Motion Video Compressor 1 (MVC1)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Silicon Graphics Motion Video Compressor 2 (MVC2)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Smacker video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Video encoding used in Smacker.</td></tr>
+<tr><td width="40%">SMPTE VC-1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Snow</td><td width="10%">X</td><td width="10%">X</td><td width="40%">experimental wavelet codec (fourcc: SNOW)</td></tr>
+<tr><td width="40%">Sony PlayStation MDEC (Motion DECoder)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Sorenson Vector Quantizer 1</td><td width="10%">X</td><td width="10%">X</td><td width="40%">fourcc: SVQ1</td></tr>
+<tr><td width="40%">Sorenson Vector Quantizer 3</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: SVQ3</td></tr>
+<tr><td width="40%">Sunplus JPEG (SP5X)</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: SP5X</td></tr>
+<tr><td width="40%">TechSmith Screen Capture Codec</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: TSCC</td></tr>
+<tr><td width="40%">TechSmith Screen Capture Codec 2</td><td width="10%"></td><td width="10%">X</td><td width="40%">fourcc: TSC2</td></tr>
+<tr><td width="40%">Theora</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libtheora</td></tr>
+<tr><td width="40%">Tiertex Limited SEQ video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in DOS CD-ROM FlashBack game.</td></tr>
+<tr><td width="40%">Ut Video</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">v210 QuickTime uncompressed 4:2:2 10-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">v308 QuickTime uncompressed 4:4:4</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">v408 QuickTime uncompressed 4:4:4:4</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">v410 QuickTime uncompressed 4:4:4 10-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">VBLE Lossless Codec</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">VMware Screen Codec / VMware Video</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in videos captured by VMware.</td></tr>
+<tr><td width="40%">Westwood Studios VQA (Vector Quantized Animation) video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Image</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Video 7</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Video 8</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Video 9</td><td width="10%"></td><td width="10%">X</td><td width="40%">not completely working</td></tr>
+<tr><td width="40%">Wing Commander III / Xan</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Wing Commander III .MVE files.</td></tr>
+<tr><td width="40%">Wing Commander IV / Xan</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Wing Commander IV.</td></tr>
+<tr><td width="40%">Winnov WNV1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">WMV7</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">YAMAHA SMAF</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Psygnosis YOP Video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">yuv4</td><td width="10%">X</td><td width="10%">X</td><td width="40%">libquicktime uncompressed packed 4:2:0</td></tr>
+<tr><td width="40%">ZeroCodec Lossless Video</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ZLIB</td><td width="10%">X</td><td width="10%">X</td><td width="40%">part of LCL, encoder experimental</td></tr>
+<tr><td width="40%">Zip Motion Blocks Video</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Encoder works only in PAL8.</td></tr>
+</table>
+
+<p><code>X</code> means that encoding (resp. decoding) is supported.
+</p>
+<p><code>E</code> means that support is provided through an external library.
+</p>
+<a name="Audio-Codecs"></a>
+<h2 class="section"><a href="general.html#toc-Audio-Codecs">2.4 Audio Codecs</a></h2>
+
+<table>
+<tr><td width="40%">Name</td><td width="10%">Encoding</td><td width="10%">Decoding</td><td width="40%">Comments</td></tr>
+<tr><td width="40%">8SVX exponential</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">8SVX fibonacci</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">AAC+</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libaacplus</td></tr>
+<tr><td width="40%">AAC</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libfaac and libvo-aacenc</td></tr>
+<tr><td width="40%">AC-3</td><td width="10%">IX</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM 4X Movie</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM CDROM XA</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Creative Technology</td><td width="10%"></td><td width="10%">X</td><td width="40%">16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2</td></tr>
+<tr><td width="40%">ADPCM Electronic Arts</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in various EA titles.</td></tr>
+<tr><td width="40%">ADPCM Electronic Arts Maxis CDROM XS</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Sim City 3000.</td></tr>
+<tr><td width="40%">ADPCM Electronic Arts R1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Electronic Arts R2</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Electronic Arts R3</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Electronic Arts XAS</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM G.722</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM G.726</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA AMV</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in AMV files</td></tr>
+<tr><td width="40%">ADPCM IMA Electronic Arts EACS</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA Electronic Arts SEAD</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA Funcom</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA QuickTime</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA Loki SDL MJPEG</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA WAV</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA Westwood</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM ISS IMA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in FunCom games.</td></tr>
+<tr><td width="40%">ADPCM IMA Dialogic</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM IMA Duck DK3</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in some Sega Saturn console games.</td></tr>
+<tr><td width="40%">ADPCM IMA Duck DK4</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in some Sega Saturn console games.</td></tr>
+<tr><td width="40%">ADPCM IMA Radical</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Microsoft</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM MS IMA</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Nintendo Gamecube AFC</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Nintendo Gamecube DTK</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Nintendo Gamecube THP</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM QT IMA</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM SEGA CRI ADX</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Used in Sega Dreamcast games.</td></tr>
+<tr><td width="40%">ADPCM Shockwave Flash</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Sound Blaster Pro 2-bit</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Sound Blaster Pro 2.6-bit</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Sound Blaster Pro 4-bit</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ADPCM Westwood Studios IMA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Westwood Studios games like Command and Conquer.</td></tr>
+<tr><td width="40%">ADPCM Yamaha</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">AMR-NB</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libopencore-amrnb</td></tr>
+<tr><td width="40%">AMR-WB</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libvo-amrwbenc</td></tr>
+<tr><td width="40%">Amazing Studio PAF Audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Apple lossless audio</td><td width="10%">X</td><td width="10%">X</td><td width="40%">QuickTime fourcc ’alac’</td></tr>
+<tr><td width="40%">ATRAC1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ATRAC3</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">ATRAC3+</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Bink Audio</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Bink and Smacker files in many games.</td></tr>
+<tr><td width="40%">CELT</td><td width="10%"></td><td width="10%">E</td><td width="40%">decoding supported through external library libcelt</td></tr>
+<tr><td width="40%">Delphine Software International CIN audio</td><td width="10%"></td><td width="10%">X</td><td width="40%">Codec used in Delphine Software International games.</td></tr>
+<tr><td width="40%">Discworld II BMV Audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">COOK</td><td width="10%"></td><td width="10%">X</td><td width="40%">All versions except 5.1 are supported.</td></tr>
+<tr><td width="40%">DCA (DTS Coherent Acoustics)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">DPCM id RoQ</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Used in Quake III, Jedi Knight 2 and other computer games.</td></tr>
+<tr><td width="40%">DPCM Interplay</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in various Interplay computer games.</td></tr>
+<tr><td width="40%">DPCM Sierra Online</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Sierra Online game audio files.</td></tr>
+<tr><td width="40%">DPCM Sol</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DPCM Xan</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Origin’s Wing Commander IV AVI files.</td></tr>
+<tr><td width="40%">DSP Group TrueSpeech</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DV audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Enhanced AC-3</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">EVRC (Enhanced Variable Rate Codec)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">FLAC (Free Lossless Audio Codec)</td><td width="10%">X</td><td width="10%">IX</td></tr>
+<tr><td width="40%">G.723.1</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">G.729</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">GSM</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libgsm</td></tr>
+<tr><td width="40%">GSM Microsoft variant</td><td width="10%">E</td><td width="10%">X</td><td width="40%">encoding supported through external library libgsm</td></tr>
+<tr><td width="40%">IAC (Indeo Audio Coder)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">iLBC (Internet Low Bitrate Codec)</td><td width="10%">E</td><td width="10%">E</td><td width="40%">encoding and decoding supported through external library libilbc</td></tr>
+<tr><td width="40%">IMC (Intel Music Coder)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MACE (Macintosh Audio Compression/Expansion) 3:1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MACE (Macintosh Audio Compression/Expansion) 6:1</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MLP (Meridian Lossless Packing)</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in DVD-Audio discs.</td></tr>
+<tr><td width="40%">Monkey’s Audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MP1 (MPEG audio layer 1)</td><td width="10%"></td><td width="10%">IX</td></tr>
+<tr><td width="40%">MP2 (MPEG audio layer 2)</td><td width="10%">IX</td><td width="10%">IX</td><td width="40%">libtwolame can be used alternatively for encoding.</td></tr>
+<tr><td width="40%">MP3 (MPEG audio layer 3)</td><td width="10%">E</td><td width="10%">IX</td><td width="40%">encoding supported through external library LAME, ADU MP3 and MP3onMP4 also supported</td></tr>
+<tr><td width="40%">MPEG-4 Audio Lossless Coding (ALS)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Musepack SV7</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Musepack SV8</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Nellymoser Asao</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Opus</td><td width="10%">E</td><td width="10%">E</td><td width="40%">supported through external library libopus</td></tr>
+<tr><td width="40%">PCM A-law</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM mu-law</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 8-bit planar</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 16-bit big-endian planar</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 16-bit little-endian planar</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 24-bit little-endian planar</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 32-bit little-endian planar</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM 32-bit floating point big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM 32-bit floating point little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM 64-bit floating point big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM 64-bit floating point little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM D-Cinema audio signed 24-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 8-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 16-bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 16-bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 24-bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 24-bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 32-bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 32-bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM signed 16/20/24-bit big-endian in MPEG-TS</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 8-bit</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 16-bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 16-bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 24-bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 24-bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 32-bit big-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM unsigned 32-bit little-endian</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PCM Zork</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">QCELP / PureVoice</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">QDesign Music Codec 2</td><td width="10%"></td><td width="10%">X</td><td width="40%">There are still some distortions.</td></tr>
+<tr><td width="40%">RealAudio 1.0 (14.4K)</td><td width="10%">X</td><td width="10%">X</td><td width="40%">Real 14400 bit/s codec</td></tr>
+<tr><td width="40%">RealAudio 2.0 (28.8K)</td><td width="10%"></td><td width="10%">X</td><td width="40%">Real 28800 bit/s codec</td></tr>
+<tr><td width="40%">RealAudio 3.0 (dnet)</td><td width="10%">IX</td><td width="10%">X</td><td width="40%">Real low bitrate AC-3 codec</td></tr>
+<tr><td width="40%">RealAudio Lossless</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">RealAudio SIPR / ACELP.NET</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Shorten</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Sierra VMD audio</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in Sierra VMD files.</td></tr>
+<tr><td width="40%">Smacker audio</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">SMPTE 302M AES3 audio</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Sonic</td><td width="10%">X</td><td width="10%">X</td><td width="40%">experimental codec</td></tr>
+<tr><td width="40%">Sonic lossless</td><td width="10%">X</td><td width="10%">X</td><td width="40%">experimental codec</td></tr>
+<tr><td width="40%">Speex</td><td width="10%">E</td><td width="10%">E</td><td width="40%">supported through external library libspeex</td></tr>
+<tr><td width="40%">TAK (Tom’s lossless Audio Kompressor)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">True Audio (TTA)</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">TrueHD</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in HD-DVD and Blu-Ray discs.</td></tr>
+<tr><td width="40%">TwinVQ (VQF flavor)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">VIMA</td><td width="10%"></td><td width="10%">X</td><td width="40%">Used in LucasArts SMUSH animations.</td></tr>
+<tr><td width="40%">Vorbis</td><td width="10%">E</td><td width="10%">X</td><td width="40%">A native but very primitive encoder exists.</td></tr>
+<tr><td width="40%">Voxware MetaSound</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">WavPack</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Westwood Audio (SND1)</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Audio 1</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Audio 2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Audio Lossless</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Audio Pro</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Windows Media Audio Voice</td><td width="10%"></td><td width="10%">X</td></tr>
+</table>
+
+<p><code>X</code> means that encoding (resp. decoding) is supported.
+</p>
+<p><code>E</code> means that support is provided through an external library.
+</p>
+<p><code>I</code> means that an integer-only version is available, too (ensures high
+performance on systems without hardware floating point support).
+</p>
+<a name="Subtitle-Formats"></a>
+<h2 class="section"><a href="general.html#toc-Subtitle-Formats">2.5 Subtitle Formats</a></h2>
+
+<table>
+<tr><td width="40%">Name</td><td width="10%">Muxing</td><td width="10%">Demuxing</td><td width="10%">Encoding</td><td width="10%">Decoding</td></tr>
+<tr><td width="40%">3GPP Timed Text</td><td width="10%"></td><td width="10%"></td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">AQTitle</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DVB</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">DVB teletext</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">E</td></tr>
+<tr><td width="40%">DVD</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">JACOsub</td><td width="10%">X</td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MicroDVD</td><td width="10%">X</td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MPL2</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">MPsub (MPlayer)</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">PGS</td><td width="10%"></td><td width="10%"></td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">PJS (Phoenix)</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">RealText</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">SAMI</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">SSA/ASS</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SubRip (SRT)</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SubViewer v1</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">SubViewer</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">TED Talks captions</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">VobSub (IDX+SUB)</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">VPlayer</td><td width="10%"></td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">WebVTT</td><td width="10%">X</td><td width="10%">X</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">XSUB</td><td width="10%"></td><td width="10%"></td><td width="10%">X</td><td width="10%">X</td></tr>
+</table>
+
+<p><code>X</code> means that the feature is supported.
+</p>
+<p><code>E</code> means that support is provided through an external library.
+</p>
+<a name="Network-Protocols"></a>
+<h2 class="section"><a href="general.html#toc-Network-Protocols">2.6 Network Protocols</a></h2>
+
+<table>
+<tr><td width="40%">Name</td><td width="10%">Support</td></tr>
+<tr><td width="40%">file</td><td width="10%">X</td></tr>
+<tr><td width="40%">FTP</td><td width="10%">X</td></tr>
+<tr><td width="40%">Gopher</td><td width="10%">X</td></tr>
+<tr><td width="40%">HLS</td><td width="10%">X</td></tr>
+<tr><td width="40%">HTTP</td><td width="10%">X</td></tr>
+<tr><td width="40%">HTTPS</td><td width="10%">X</td></tr>
+<tr><td width="40%">MMSH</td><td width="10%">X</td></tr>
+<tr><td width="40%">MMST</td><td width="10%">X</td></tr>
+<tr><td width="40%">pipe</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMP</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMPE</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMPS</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMPT</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMPTE</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTMPTS</td><td width="10%">X</td></tr>
+<tr><td width="40%">RTP</td><td width="10%">X</td></tr>
+<tr><td width="40%">SCTP</td><td width="10%">X</td></tr>
+<tr><td width="40%">SFTP</td><td width="10%">E</td></tr>
+<tr><td width="40%">TCP</td><td width="10%">X</td></tr>
+<tr><td width="40%">TLS</td><td width="10%">X</td></tr>
+<tr><td width="40%">UDP</td><td width="10%">X</td></tr>
+</table>
+
+<p><code>X</code> means that the protocol is supported.
+</p>
+<p><code>E</code> means that support is provided through an external library.
+</p>
+
+<a name="Input_002fOutput-Devices"></a>
+<h2 class="section"><a href="general.html#toc-Input_002fOutput-Devices">2.7 Input/Output Devices</a></h2>
+
+<table>
+<tr><td width="40%">Name</td><td width="10%">Input</td><td width="10%">Output</td></tr>
+<tr><td width="40%">ALSA</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">BKTR</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">caca</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">DV1394</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">Lavfi virtual device</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">Linux framebuffer</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">JACK</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">LIBCDIO</td><td width="10%">X</td></tr>
+<tr><td width="40%">LIBDC1394</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">OpenAL</td><td width="10%">X</td></tr>
+<tr><td width="40%">OpenGL</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">OSS</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">PulseAudio</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">SDL</td><td width="10%"></td><td width="10%">X</td></tr>
+<tr><td width="40%">Video4Linux2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">VfW capture</td><td width="10%">X</td><td width="10%"></td></tr>
+<tr><td width="40%">X11 grabbing</td><td width="10%">X</td><td width="10%"></td></tr>
+</table>
+
+<p><code>X</code> means that input/output is supported.
+</p>
+<a name="Timecode"></a>
+<h2 class="section"><a href="general.html#toc-Timecode">2.8 Timecode</a></h2>
+
+<table>
+<tr><td width="40%">Codec/format</td><td width="10%">Read</td><td width="10%">Write</td></tr>
+<tr><td width="40%">AVI</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">DV</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">GXF</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MOV</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MPEG1/2</td><td width="10%">X</td><td width="10%">X</td></tr>
+<tr><td width="40%">MXF</td><td width="10%">X</td><td width="10%">X</td></tr>
+</table>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Using git to develop FFmpeg: </title>
+
+<meta name="description" content="Using git to develop FFmpeg: ">
+<meta name="keywords" content="FFmpeg documentation : Using git to develop FFmpeg: ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Using git to develop FFmpeg</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Introduction" href="#Introduction">1. Introduction</a></li>
+ <li><a name="toc-Basics-Usage" href="#Basics-Usage">2. Basics Usage</a>
+ <ul class="toc">
+ <li><a name="toc-Get-GIT" href="#Get-GIT">2.1 Get GIT</a></li>
+ <li><a name="toc-Cloning-the-source-tree" href="#Cloning-the-source-tree">2.2 Cloning the source tree</a></li>
+ <li><a name="toc-Updating-the-source-tree-to-the-latest-revision" href="#Updating-the-source-tree-to-the-latest-revision">2.3 Updating the source tree to the latest revision</a></li>
+ <li><a name="toc-Rebasing-your-local-branches" href="#Rebasing-your-local-branches">2.4 Rebasing your local branches</a></li>
+ <li><a name="toc-Adding_002fremoving-files_002fdirectories" href="#Adding_002fremoving-files_002fdirectories">2.5 Adding/removing files/directories</a></li>
+ <li><a name="toc-Showing-modifications" href="#Showing-modifications">2.6 Showing modifications</a></li>
+ <li><a name="toc-Inspecting-the-changelog" href="#Inspecting-the-changelog">2.7 Inspecting the changelog</a></li>
+ <li><a name="toc-Checking-source-tree-status" href="#Checking-source-tree-status">2.8 Checking source tree status</a></li>
+ <li><a name="toc-Committing" href="#Committing">2.9 Committing</a></li>
+ <li><a name="toc-Preparing-a-patchset" href="#Preparing-a-patchset">2.10 Preparing a patchset</a></li>
+ <li><a name="toc-Sending-patches-for-review" href="#Sending-patches-for-review">2.11 Sending patches for review</a></li>
+ <li><a name="toc-Renaming_002fmoving_002fcopying-files-or-contents-of-files" href="#Renaming_002fmoving_002fcopying-files-or-contents-of-files">2.12 Renaming/moving/copying files or contents of files</a></li>
+ </ul></li>
+ <li><a name="toc-Git-configuration" href="#Git-configuration">3. Git configuration</a>
+ <ul class="toc">
+ <li><a name="toc-Personal-Git-installation" href="#Personal-Git-installation">3.1 Personal Git installation</a></li>
+ <li><a name="toc-Repository-configuration" href="#Repository-configuration">3.2 Repository configuration</a></li>
+ </ul></li>
+ <li><a name="toc-FFmpeg-specific" href="#FFmpeg-specific">4. FFmpeg specific</a>
+ <ul class="toc">
+ <li><a name="toc-Reverting-broken-commits" href="#Reverting-broken-commits">4.1 Reverting broken commits</a></li>
+ <li><a name="toc-Pushing-changes-to-remote-trees" href="#Pushing-changes-to-remote-trees">4.2 Pushing changes to remote trees</a></li>
+ <li><a name="toc-Finding-a-specific-svn-revision" href="#Finding-a-specific-svn-revision">4.3 Finding a specific svn revision</a></li>
+ </ul></li>
+ <li><a name="toc-pre_002dpush-checklist" href="#pre_002dpush-checklist">5. pre-push checklist</a></li>
+ <li><a name="toc-Server-Issues" href="#Server-Issues">6. Server Issues</a></li>
+</ul>
+</div>
+
+<a name="Introduction"></a>
+<h1 class="chapter"><a href="git-howto.html#toc-Introduction">1. Introduction</a></h1>
+
+<p>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:
+</p>
+<table><tr><td> </td><td><pre class="example">git --help
+man git
+</pre></td></tr></table>
+
+<p>shows you the available subcommands,
+</p>
+<table><tr><td> </td><td><pre class="example">git <command> --help
+man git-<command>
+</pre></td></tr></table>
+
+<p>shows information about the subcommand <command>.
+</p>
+<p>Additional information could be found on the
+<a href="http://gitref.org">Git Reference</a> website
+</p>
+<p>For more information about the Git project, visit the
+</p>
+<p><a href="http://git-scm.com/">Git website</a>
+</p>
+<p>Consult these resources whenever you have problems, they are quite exhaustive.
+</p>
+<p>What follows now is a basic introduction to Git and some FFmpeg-specific
+guidelines to ease the contribution to the project
+</p>
+<a name="Basics-Usage"></a>
+<h1 class="chapter"><a href="git-howto.html#toc-Basics-Usage">2. Basics Usage</a></h1>
+
+<a name="Get-GIT"></a>
+<h2 class="section"><a href="git-howto.html#toc-Get-GIT">2.1 Get GIT</a></h2>
+
+<p>You can get git from <a href="http://git-scm.com/">http://git-scm.com/</a>
+Most distribution and operating system provide a package for it.
+</p>
+
+<a name="Cloning-the-source-tree"></a>
+<h2 class="section"><a href="git-howto.html#toc-Cloning-the-source-tree">2.2 Cloning the source tree</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git clone git://source.ffmpeg.org/ffmpeg <target>
+</pre></td></tr></table>
+
+<p>This will put the FFmpeg sources into the directory <var><target></var>.
+</p>
+<table><tr><td> </td><td><pre class="example">git clone git@source.ffmpeg.org:ffmpeg <target>
+</pre></td></tr></table>
+
+<p>This will put the FFmpeg sources into the directory <var><target></var> and let
+you push back your changes to the remote repository.
+</p>
+<p>Make sure that you do not have Windows line endings in your checkouts,
+otherwise you may experience spurious compilation failures. One way to
+achieve this is to run
+</p>
+<table><tr><td> </td><td><pre class="example">git config --global core.autocrlf false
+</pre></td></tr></table>
+
+
+<a name="Updating-the-source-tree-to-the-latest-revision"></a>
+<h2 class="section"><a href="git-howto.html#toc-Updating-the-source-tree-to-the-latest-revision">2.3 Updating the source tree to the latest revision</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git pull (--rebase)
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<div class="float alert alert-warning">
+<p><code>--rebase</code> (see below) is recommended.
+</p></div>
+<a name="Rebasing-your-local-branches"></a>
+<h2 class="section"><a href="git-howto.html#toc-Rebasing-your-local-branches">2.4 Rebasing your local branches</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git pull --rebase
+</pre></td></tr></table>
+
+<p>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.
+</p>
+
+<a name="Adding_002fremoving-files_002fdirectories"></a>
+<h2 class="section"><a href="git-howto.html#toc-Adding_002fremoving-files_002fdirectories">2.5 Adding/removing files/directories</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git add [-A] <filename/dirname>
+git rm [-r] <filename/dirname>
+</pre></td></tr></table>
+
+<p>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.
+</p>
+
+<a name="Showing-modifications"></a>
+<h2 class="section"><a href="git-howto.html#toc-Showing-modifications">2.6 Showing modifications</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git diff <filename(s)>
+</pre></td></tr></table>
+
+<p>will show all local modifications in your working directory as unified diff.
+</p>
+
+<a name="Inspecting-the-changelog"></a>
+<h2 class="section"><a href="git-howto.html#toc-Inspecting-the-changelog">2.7 Inspecting the changelog</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git log <filename(s)>
+</pre></td></tr></table>
+
+<p>You may also use the graphical tools like gitview or gitk or the web
+interface available at http://source.ffmpeg.org/
+</p>
+<a name="Checking-source-tree-status"></a>
+<h2 class="section"><a href="git-howto.html#toc-Checking-source-tree-status">2.8 Checking source tree status</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git status
+</pre></td></tr></table>
+
+<p>detects all the changes you made and lists what actions will be taken in case
+of a commit (additions, modifications, deletions, etc.).
+</p>
+
+<a name="Committing"></a>
+<h2 class="section"><a href="git-howto.html#toc-Committing">2.9 Committing</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git diff --check
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<p>For cosmetics-only commits you should get (almost) empty output from
+</p>
+<table><tr><td> </td><td><pre class="example">git diff -w -b <filename(s)>
+</pre></td></tr></table>
+
+<p>Also check the output of
+</p>
+<table><tr><td> </td><td><pre class="example">git status
+</pre></td></tr></table>
+
+<p>to make sure you don’t have untracked files or deletions.
+</p>
+<table><tr><td> </td><td><pre class="example">git add [-i|-p|-A] <filenames/dirnames>
+</pre></td></tr></table>
+
+<p>Make sure you have told git your name and email address
+</p>
+<table><tr><td> </td><td><pre class="example">git config --global user.name "My Name"
+git config --global user.email my@email.invalid
+</pre></td></tr></table>
+
+<p>Use <var>–global</var> to set the global configuration for all your git checkouts.
+</p>
+<p>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.
+</p>
+
+<table><tr><td> </td><td><pre class="example">git commit
+</pre></td></tr></table>
+
+<p>Git will commit the selected changes to your current local branch.
+</p>
+<p>You will be prompted for a log message in an editor, which is either
+set in your personal configuration file through
+</p>
+<table><tr><td> </td><td><pre class="example">git config --global core.editor
+</pre></td></tr></table>
+
+<p>or set by one of the following environment variables:
+<var>GIT_EDITOR</var>, <var>VISUAL</var> or <var>EDITOR</var>.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<a name="Preparing-a-patchset"></a>
+<h2 class="section"><a href="git-howto.html#toc-Preparing-a-patchset">2.10 Preparing a patchset</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git format-patch <commit> [-o directory]
+</pre></td></tr></table>
+
+<p>will generate a set of patches for each commit between <var><commit></var> and
+current <var>HEAD</var>. E.g.
+</p>
+<table><tr><td> </td><td><pre class="example">git format-patch origin/master
+</pre></td></tr></table>
+
+<p>will generate patches for all commits on current branch which are not
+present in upstream.
+A useful shortcut is also
+</p>
+<table><tr><td> </td><td><pre class="example">git format-patch -n
+</pre></td></tr></table>
+
+<p>which will generate patches from last <var>n</var> commits.
+By default the patches are created in the current directory.
+</p>
+<a name="Sending-patches-for-review"></a>
+<h2 class="section"><a href="git-howto.html#toc-Sending-patches-for-review">2.11 Sending patches for review</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git send-email <commit list|directory>
+</pre></td></tr></table>
+
+<p>will send the patches created by <code>git format-patch</code> 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. <var>git-email</var>
+package on Debian-based distros).
+</p>
+
+<a name="Renaming_002fmoving_002fcopying-files-or-contents-of-files"></a>
+<h2 class="section"><a href="git-howto.html#toc-Renaming_002fmoving_002fcopying-files-or-contents-of-files">2.12 Renaming/moving/copying files or contents of files</a></h2>
+
+<p>Git automatically tracks such changes, making those normal commits.
+</p>
+<table><tr><td> </td><td><pre class="example">mv/cp path/file otherpath/otherfile
+git add [-A] .
+git commit
+</pre></td></tr></table>
+
+
+<a name="Git-configuration"></a>
+<h1 class="chapter"><a href="git-howto.html#toc-Git-configuration">3. Git configuration</a></h1>
+
+<p>In order to simplify a few workflows, it is advisable to configure both
+your personal Git installation and your local FFmpeg repository.
+</p>
+<a name="Personal-Git-installation"></a>
+<h2 class="section"><a href="git-howto.html#toc-Personal-Git-installation">3.1 Personal Git installation</a></h2>
+
+<p>Add the following to your ‘<tt>~/.gitconfig</tt>’ to help <code>git send-email</code>
+and <code>git format-patch</code> detect renames:
+</p>
+<table><tr><td> </td><td><pre class="example">[diff]
+ renames = copy
+</pre></td></tr></table>
+
+<a name="Repository-configuration"></a>
+<h2 class="section"><a href="git-howto.html#toc-Repository-configuration">3.2 Repository configuration</a></h2>
+
+<p>In order to have <code>git send-email</code> automatically send patches
+to the ffmpeg-devel mailing list, add the following stanza
+to ‘<tt>/path/to/ffmpeg/repository/.git/config</tt>’:
+</p>
+<table><tr><td> </td><td><pre class="example">[sendemail]
+ to = ffmpeg-devel@ffmpeg.org
+</pre></td></tr></table>
+
+<a name="FFmpeg-specific"></a>
+<h1 class="chapter"><a href="git-howto.html#toc-FFmpeg-specific">4. FFmpeg specific</a></h1>
+
+<a name="Reverting-broken-commits"></a>
+<h2 class="section"><a href="git-howto.html#toc-Reverting-broken-commits">4.1 Reverting broken commits</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git reset <commit>
+</pre></td></tr></table>
+
+<p><code>git reset</code> will uncommit the changes till <var><commit></var> rewriting
+the current branch history.
+</p>
+<table><tr><td> </td><td><pre class="example">git commit --amend
+</pre></td></tr></table>
+
+<p>allows one to amend the last commit details quickly.
+</p>
+<table><tr><td> </td><td><pre class="example">git rebase -i origin/master
+</pre></td></tr></table>
+
+<p>will replay local commits over the main repository allowing to edit, merge
+or remove some of them in the process.
+</p>
+<div class="float alert alert-info">
+<p><code>git reset</code>, <code>git commit --amend</code> and <code>git rebase</code>
+rewrite history, so you should use them ONLY on your local or topic branches.
+The main repository will reject those changes.
+</p></div>
+<table><tr><td> </td><td><pre class="example">git revert <commit>
+</pre></td></tr></table>
+
+<p><code>git revert</code> will generate a revert commit. This will not make the
+faulty commit disappear from the history.
+</p>
+<a name="Pushing-changes-to-remote-trees"></a>
+<h2 class="section"><a href="git-howto.html#toc-Pushing-changes-to-remote-trees">4.2 Pushing changes to remote trees</a></h2>
+
+<table><tr><td> </td><td><pre class="example">git push
+</pre></td></tr></table>
+
+<p>Will push the changes to the default remote (<var>origin</var>).
+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.
+</p>
+<table><tr><td> </td><td><pre class="example">git remote add <name> <url>
+</pre></td></tr></table>
+
+<p>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.
+</p>
+<table><tr><td> </td><td><pre class="example">git push <remote> <refspec>
+</pre></td></tr></table>
+
+<p>Will push the changes to the <var><remote></var> repository.
+Omitting <var><refspec></var> makes <code>git push</code> update all the remote
+branches matching the local ones.
+</p>
+<a name="Finding-a-specific-svn-revision"></a>
+<h2 class="section"><a href="git-howto.html#toc-Finding-a-specific-svn-revision">4.3 Finding a specific svn revision</a></h2>
+
+<p>Since version 1.7.1 git supports <var>:/foo</var> syntax for specifying commits
+based on a regular expression. see man gitrevisions
+</p>
+<table><tr><td> </td><td><pre class="example">git show :/'as revision 23456'
+</pre></td></tr></table>
+
+<p>will show the svn changeset <var>r23456</var>. With older git versions searching in
+the <code>git log</code> output is the easiest option (especially if a pager with
+search capabilities is used).
+This commit can be checked out with
+</p>
+<table><tr><td> </td><td><pre class="example">git checkout -b svn_23456 :/'as revision 23456'
+</pre></td></tr></table>
+
+<p>or for git < 1.7.1 with
+</p>
+<table><tr><td> </td><td><pre class="example">git checkout -b svn_23456 $SHA1
+</pre></td></tr></table>
+
+<p>where <var>$SHA1</var> is the commit hash from the <code>git log</code> output.
+</p>
+
+<a name="pre_002dpush-checklist"></a>
+<h1 class="chapter"><a href="git-howto.html#toc-pre_002dpush-checklist">5. pre-push checklist</a></h1>
+
+<p>Once you have a set of commits that you feel are ready for pushing,
+work through the following checklist to doublecheck everything is in
+proper order. This list tries to be exhaustive. In case you are just
+pushing a typo in a comment, some of the steps may be unnecessary.
+Apply your common sense, but if in doubt, err on the side of caution.
+</p>
+<p>First, make sure that the commits and branches you are going to push
+match what you want pushed and that nothing is missing, extraneous or
+wrong. You can see what will be pushed by running the git push command
+with –dry-run first. And then inspecting the commits listed with
+<code>git log -p 1234567..987654</code>. The <code>git status</code> command
+may help in finding local changes that have been forgotten to be added.
+</p>
+<p>Next let the code pass through a full run of our testsuite.
+</p>
+<ul>
+<li> <code>make distclean</code>
+</li><li> <code>/path/to/ffmpeg/configure</code>
+</li><li> <code>make check</code>
+</li><li> if fate fails due to missing samples run <code>make fate-rsync</code> and retry
+</li></ul>
+
+<p>Make sure all your changes have been checked before pushing them, the
+testsuite only checks against regressions and that only to some extend. It does
+obviously not check newly added features/code to be working unless you have
+added a test for that (which is recommended).
+</p>
+<p>Also note that every single commit should pass the test suite, not just
+the result of a series of patches.
+</p>
+<p>Once everything passed, push the changes to your public ffmpeg clone and post a
+merge request to ffmpeg-devel. You can also push them directly but this is not
+recommended.
+</p>
+<a name="Server-Issues"></a>
+<h1 class="chapter"><a href="git-howto.html#toc-Server-Issues">6. Server Issues</a></h1>
+
+<p>Contact the project admins <a href="mailto:root@ffmpeg.org">root@ffmpeg.org</a> if you have technical
+problems with the GIT server.
+</p><footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libavcodec </title>
+
+<meta name="description" content="Libavcodec Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libavcodec ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libavcodec Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libavcodec.html#toc-Description">1. Description</a></h1>
+
+<p>The libavcodec library provides a generic encoding/decoding framework
+and contains multiple decoders and encoders for audio, video and
+subtitle streams, and several bitstream filters.
+</p>
+<p>The shared architecture provides various services ranging from bit
+stream I/O to DSP optimizations, and makes it suitable for
+implementing robust and fast codecs as well as for experimentation.
+</p>
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libavcodec.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-codecs.html">ffmpeg-codecs</a>, <a href="ffmpeg-bitstream-filters.html">bitstream-filters</a>,
+<a href="libavutil.html">libavutil</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libavcodec.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libavdevice </title>
+
+<meta name="description" content="Libavdevice Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libavdevice ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libavdevice Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libavdevice.html#toc-Description">1. Description</a></h1>
+
+<p>The libavdevice library provides a generic framework for grabbing from
+and rendering to many common multimedia input/output devices, and
+supports several input and output devices, including Video4Linux2,
+VfW, DShow, and ALSA.
+</p>
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libavdevice.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-devices.html">ffmpeg-devices</a>,
+<a href="libavutil.html">libavutil</a>, <a href="libavcodec.html">libavcodec</a>, <a href="libavformat.html">libavformat</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libavdevice.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libavfilter </title>
+
+<meta name="description" content="Libavfilter Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libavfilter ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libavfilter Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libavfilter.html#toc-Description">1. Description</a></h1>
+
+<p>The libavfilter library provides a generic audio/video filtering
+framework containing several filters, sources and sinks.
+</p>
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libavfilter.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-filters.html">ffmpeg-filters</a>,
+<a href="libavutil.html">libavutil</a>, <a href="libswscale.html">libswscale</a>, <a href="libswresample.html">libswresample</a>,
+<a href="libavcodec.html">libavcodec</a>, <a href="libavformat.html">libavformat</a>, <a href="libavdevice.html">libavdevice</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libavfilter.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libavformat </title>
+
+<meta name="description" content="Libavformat Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libavformat ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libavformat Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libavformat.html#toc-Description">1. Description</a></h1>
+
+<p>The libavformat library provides a generic framework for multiplexing
+and demultiplexing (muxing and demuxing) audio, video and subtitle
+streams. It encompasses multiple muxers and demuxers for multimedia
+container formats.
+</p>
+<p>It also supports several input and output protocols to access a media
+resource.
+</p>
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libavformat.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-formats.html">ffmpeg-formats</a>, <a href="ffmpeg-protocols.html">ffmpeg-protocols</a>,
+<a href="libavutil.html">libavutil</a>, <a href="libavcodec.html">libavcodec</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libavformat.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libavutil </title>
+
+<meta name="description" content="Libavutil Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libavutil ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libavutil Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libavutil.html#toc-Description">1. Description</a></h1>
+
+<p>The libavutil library is a utility library to aid portable
+multimedia programming. It contains safe portable string functions,
+random number generators, data structures, additional mathematics
+functions, cryptography and multimedia related functionality (like
+enumerations for pixel and sample formats). It is not a library for
+code needed by both libavcodec and libavformat.
+</p>
+<p>The goals for this library is to be:
+</p>
+<dl compact="compact">
+<dt> <strong>Modular</strong></dt>
+<dd><p>It should have few interdependencies and the possibility of disabling individual
+parts during <code>./configure</code>.
+</p>
+</dd>
+<dt> <strong>Small</strong></dt>
+<dd><p>Both sources and objects should be small.
+</p>
+</dd>
+<dt> <strong>Efficient</strong></dt>
+<dd><p>It should have low CPU and memory usage.
+</p>
+</dd>
+<dt> <strong>Useful</strong></dt>
+<dd><p>It should avoid useless features that almost no one needs.
+</p></dd>
+</dl>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libavutil.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-utils.html">ffmpeg-utils</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libavutil.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libswresample </title>
+
+<meta name="description" content="Libswresample Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libswresample ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libswresample Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libswresample.html#toc-Description">1. Description</a></h1>
+
+<p>The libswresample library performs highly optimized audio resampling,
+rematrixing and sample format conversion operations.
+</p>
+<p>Specifically, this library performs the following conversions:
+</p>
+<ul>
+<li>
+<em>Resampling</em>: is the process of changing the audio rate, for
+example from a high sample rate of 44100Hz to 8000Hz. Audio
+conversion from high to low sample rate is a lossy process. Several
+resampling options and algorithms are available.
+
+</li><li>
+<em>Format conversion</em>: is the process of converting the type of
+samples, for example from 16-bit signed samples to unsigned 8-bit or
+float samples. It also handles packing conversion, when passing from
+packed layout (all samples belonging to distinct channels interleaved
+in the same buffer), to planar layout (all samples belonging to the
+same channel stored in a dedicated buffer or "plane").
+
+</li><li>
+<em>Rematrixing</em>: is the process of changing the channel layout, for
+example from stereo to mono. When the input channels cannot be mapped
+to the output streams, the process is lossy, since it involves
+different gain factors and mixing.
+</li></ul>
+
+<p>Various other audio conversions (e.g. stretching and padding) are
+enabled through dedicated options.
+</p>
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libswresample.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-resampler.html">ffmpeg-resampler</a>,
+<a href="libavutil.html">libavutil</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libswresample.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Libswscale </title>
+
+<meta name="description" content="Libswscale Documentation: ">
+<meta name="keywords" content="FFmpeg documentation : Libswscale ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Libswscale Documentation</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-See-Also" href="#See-Also">2. See Also</a></li>
+ <li><a name="toc-Authors" href="#Authors">3. Authors</a></li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="libswscale.html#toc-Description">1. Description</a></h1>
+
+<p>The libswscale library performs highly optimized image scaling and
+colorspace and pixel format conversion operations.
+</p>
+<p>Specifically, this library performs the following conversions:
+</p>
+<ul>
+<li>
+<em>Rescaling</em>: is the process of changing the video size. Several
+rescaling options and algorithms are available. This is usually a
+lossy process.
+
+</li><li>
+<em>Pixel format conversion</em>: is the process of converting the image
+format and colorspace of the image, for example from planar YUV420P to
+RGB24 packed. It also handles packing conversion, that is converts
+from packed layout (all pixels belonging to distinct planes
+interleaved in the same buffer), to planar layout (all samples
+belonging to the same plane stored in a dedicated buffer or "plane").
+
+<p>This is usually a lossy process in case the source and destination
+colorspaces differ.
+</p></li></ul>
+
+
+<a name="See-Also"></a>
+<h1 class="chapter"><a href="libswscale.html#toc-See-Also">2. See Also</a></h1>
+
+<p><a href="ffmpeg.html">ffmpeg</a>, <a href="ffplay.html">ffplay</a>, <a href="ffprobe.html">ffprobe</a>, <a href="ffserver.html">ffserver</a>,
+<a href="ffmpeg-scaler.html">ffmpeg-scaler</a>,
+<a href="libavutil.html">libavutil</a>
+</p>
+
+<a name="Authors"></a>
+<h1 class="chapter"><a href="libswscale.html#toc-Authors">3. Authors</a></h1>
+
+<p>The FFmpeg developers.
+</p>
+<p>For details about the authorship, see the Git history of the project
+(git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
+<code>git log</code> in the FFmpeg source directory, or browsing the
+online repository at <a href="http://source.ffmpeg.org">http://source.ffmpeg.org</a>.
+</p>
+<p>Maintainers for the specific components are listed in the file
+‘<tt>MAINTAINERS</tt>’ in the source code tree.
+</p>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : NUT: </title>
+
+<meta name="description" content="NUT: ">
+<meta name="keywords" content="FFmpeg documentation : NUT: ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">NUT</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Description" href="#Description">1. Description</a></li>
+ <li><a name="toc-Container_002dspecific-codec-tags" href="#Container_002dspecific-codec-tags">2. Container-specific codec tags</a>
+ <ul class="toc">
+ <li><a name="toc-Generic-raw-YUVA-formats" href="#Generic-raw-YUVA-formats">2.1 Generic raw YUVA formats</a></li>
+ <li><a name="toc-Raw-Audio" href="#Raw-Audio">2.2 Raw Audio</a></li>
+ <li><a name="toc-Subtitles" href="#Subtitles">2.3 Subtitles</a></li>
+ <li><a name="toc-Raw-Data" href="#Raw-Data">2.4 Raw Data</a></li>
+ <li><a name="toc-Codecs" href="#Codecs">2.5 Codecs</a></li>
+ </ul>
+</li>
+</ul>
+</div>
+
+<a name="Description"></a>
+<h1 class="chapter"><a href="nut.html#toc-Description">1. Description</a></h1>
+<p>NUT is a low overhead generic container format. It stores audio, video,
+subtitle and user-defined streams in a simple, yet efficient, way.
+</p>
+<p>It was created by a group of FFmpeg and MPlayer developers in 2003
+and was finalized in 2008.
+</p>
+<p>The official nut specification is at svn://svn.mplayerhq.hu/nut
+In case of any differences between this text and the official specification,
+the official specification shall prevail.
+</p>
+<a name="Container_002dspecific-codec-tags"></a>
+<h1 class="chapter"><a href="nut.html#toc-Container_002dspecific-codec-tags">2. Container-specific codec tags</a></h1>
+
+<a name="Generic-raw-YUVA-formats"></a>
+<h2 class="section"><a href="nut.html#toc-Generic-raw-YUVA-formats">2.1 Generic raw YUVA formats</a></h2>
+
+<p>Since many exotic planar YUVA pixel formats are not considered by
+the AVI/QuickTime FourCC lists, the following scheme is adopted for
+representing them.
+</p>
+<p>The first two bytes can contain the values:
+Y1 = only Y
+Y2 = Y+A
+Y3 = YUV
+Y4 = YUVA
+</p>
+<p>The third byte represents the width and height chroma subsampling
+values for the UV planes, that is the amount to shift the luma
+width/height right to find the chroma width/height.
+</p>
+<p>The fourth byte is the number of bits used (8, 16, ...).
+</p>
+<p>If the order of bytes is inverted, that means that each component has
+to be read big-endian.
+</p>
+<a name="Raw-Audio"></a>
+<h2 class="section"><a href="nut.html#toc-Raw-Audio">2.2 Raw Audio</a></h2>
+
+<table>
+<tr><td width="40%">ALAW</td><td width="40%">A-LAW</td></tr>
+<tr><td width="40%">ULAW</td><td width="40%">MU-LAW</td></tr>
+<tr><td width="40%">P<type><interleaving><bits></td><td width="40%">little-endian PCM</td></tr>
+<tr><td width="40%"><bits><interleaving><type>P</td><td width="40%">big-endian PCM</td></tr>
+</table>
+
+<p><type> is S for signed integer, U for unsigned integer, F for IEEE float
+<interleaving> is D for default, P is for planar.
+<bits> is 8/16/24/32
+</p>
+<table><tr><td> </td><td><pre class="example">PFD[32] would for example be signed 32 bit little-endian IEEE float
+</pre></td></tr></table>
+
+<a name="Subtitles"></a>
+<h2 class="section"><a href="nut.html#toc-Subtitles">2.3 Subtitles</a></h2>
+
+<table>
+<tr><td width="40%">UTF8</td><td width="40%">Raw UTF-8</td></tr>
+<tr><td width="40%">SSA[0]</td><td width="40%">SubStation Alpha</td></tr>
+<tr><td width="40%">DVDS</td><td width="40%">DVD subtitles</td></tr>
+<tr><td width="40%">DVBS</td><td width="40%">DVB subtitles</td></tr>
+</table>
+
+<a name="Raw-Data"></a>
+<h2 class="section"><a href="nut.html#toc-Raw-Data">2.4 Raw Data</a></h2>
+
+<table>
+<tr><td width="40%">UTF8</td><td width="40%">Raw UTF-8</td></tr>
+</table>
+
+<a name="Codecs"></a>
+<h2 class="section"><a href="nut.html#toc-Codecs">2.5 Codecs</a></h2>
+
+<table>
+<tr><td width="40%">3IV1</td><td width="40%">non-compliant MPEG-4 generated by old 3ivx</td></tr>
+<tr><td width="40%">ASV1</td><td width="40%">Asus Video</td></tr>
+<tr><td width="40%">ASV2</td><td width="40%">Asus Video 2</td></tr>
+<tr><td width="40%">CVID</td><td width="40%">Cinepak</td></tr>
+<tr><td width="40%">CYUV</td><td width="40%">Creative YUV</td></tr>
+<tr><td width="40%">DIVX</td><td width="40%">non-compliant MPEG-4 generated by old DivX</td></tr>
+<tr><td width="40%">DUCK</td><td width="40%">Truemotion 1</td></tr>
+<tr><td width="40%">FFV1</td><td width="40%">FFmpeg video 1</td></tr>
+<tr><td width="40%">FFVH</td><td width="40%">FFmpeg Huffyuv</td></tr>
+<tr><td width="40%">H261</td><td width="40%">ITU H.261</td></tr>
+<tr><td width="40%">H262</td><td width="40%">ITU H.262</td></tr>
+<tr><td width="40%">H263</td><td width="40%">ITU H.263</td></tr>
+<tr><td width="40%">H264</td><td width="40%">ITU H.264</td></tr>
+<tr><td width="40%">HFYU</td><td width="40%">Huffyuv</td></tr>
+<tr><td width="40%">I263</td><td width="40%">Intel H.263</td></tr>
+<tr><td width="40%">IV31</td><td width="40%">Indeo 3.1</td></tr>
+<tr><td width="40%">IV32</td><td width="40%">Indeo 3.2</td></tr>
+<tr><td width="40%">IV50</td><td width="40%">Indeo 5.0</td></tr>
+<tr><td width="40%">LJPG</td><td width="40%">ITU JPEG (lossless)</td></tr>
+<tr><td width="40%">MJLS</td><td width="40%">ITU JPEG-LS</td></tr>
+<tr><td width="40%">MJPG</td><td width="40%">ITU JPEG</td></tr>
+<tr><td width="40%">MPG4</td><td width="40%">MS MPEG-4v1 (not ISO MPEG-4)</td></tr>
+<tr><td width="40%">MP42</td><td width="40%">MS MPEG-4v2</td></tr>
+<tr><td width="40%">MP43</td><td width="40%">MS MPEG-4v3</td></tr>
+<tr><td width="40%">MP4V</td><td width="40%">ISO MPEG-4 Part 2 Video (from old encoders)</td></tr>
+<tr><td width="40%">mpg1</td><td width="40%">ISO MPEG-1 Video</td></tr>
+<tr><td width="40%">mpg2</td><td width="40%">ISO MPEG-2 Video</td></tr>
+<tr><td width="40%">MRLE</td><td width="40%">MS RLE</td></tr>
+<tr><td width="40%">MSVC</td><td width="40%">MS Video 1</td></tr>
+<tr><td width="40%">RT21</td><td width="40%">Indeo 2.1</td></tr>
+<tr><td width="40%">RV10</td><td width="40%">RealVideo 1.0</td></tr>
+<tr><td width="40%">RV20</td><td width="40%">RealVideo 2.0</td></tr>
+<tr><td width="40%">RV30</td><td width="40%">RealVideo 3.0</td></tr>
+<tr><td width="40%">RV40</td><td width="40%">RealVideo 4.0</td></tr>
+<tr><td width="40%">SNOW</td><td width="40%">FFmpeg Snow</td></tr>
+<tr><td width="40%">SVQ1</td><td width="40%">Sorenson Video 1</td></tr>
+<tr><td width="40%">SVQ3</td><td width="40%">Sorenson Video 3</td></tr>
+<tr><td width="40%">theo</td><td width="40%">Xiph Theora</td></tr>
+<tr><td width="40%">TM20</td><td width="40%">Truemotion 2.0</td></tr>
+<tr><td width="40%">UMP4</td><td width="40%">non-compliant MPEG-4 generated by UB Video MPEG-4</td></tr>
+<tr><td width="40%">VCR1</td><td width="40%">ATI VCR1</td></tr>
+<tr><td width="40%">VP30</td><td width="40%">VP 3.0</td></tr>
+<tr><td width="40%">VP31</td><td width="40%">VP 3.1</td></tr>
+<tr><td width="40%">VP50</td><td width="40%">VP 5.0</td></tr>
+<tr><td width="40%">VP60</td><td width="40%">VP 6.0</td></tr>
+<tr><td width="40%">VP61</td><td width="40%">VP 6.1</td></tr>
+<tr><td width="40%">VP62</td><td width="40%">VP 6.2</td></tr>
+<tr><td width="40%">VP70</td><td width="40%">VP 7.0</td></tr>
+<tr><td width="40%">WMV1</td><td width="40%">MS WMV7</td></tr>
+<tr><td width="40%">WMV2</td><td width="40%">MS WMV8</td></tr>
+<tr><td width="40%">WMV3</td><td width="40%">MS WMV9</td></tr>
+<tr><td width="40%">WV1F</td><td width="40%">non-compliant MPEG-4 generated by ?</td></tr>
+<tr><td width="40%">WVC1</td><td width="40%">VC-1</td></tr>
+<tr><td width="40%">XVID</td><td width="40%">non-compliant MPEG-4 generated by old Xvid</td></tr>
+<tr><td width="40%">XVIX</td><td width="40%">non-compliant MPEG-4 generated by old Xvid with interlacing bug</td></tr>
+</table>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!-- Created on June 19, 2014 by texi2html 1.82 -->
+<!--
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+
+-->
+<head>
+<title>FFmpeg documentation : Platform Specific Information: </title>
+
+<meta name="description" content="Platform Specific Information: ">
+<meta name="keywords" content="FFmpeg documentation : Platform Specific Information: ">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="default.css" />
+
+<link rel="icon" href="favicon.png" type="image/png" />
+</head>
+<body>
+<div id="container">
+<div id="body">
+
+<a name="SEC_Top"></a>
+<h1 class="settitle">Platform Specific Information</h1>
+
+<a name="SEC_Contents"></a>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+ <li><a name="toc-Unix_002dlike" href="#Unix_002dlike">1. Unix-like</a>
+ <ul class="toc">
+ <li><a name="toc-BSD" href="#BSD">1.1 BSD</a></li>
+ <li><a name="toc-_0028Open_0029Solaris" href="#g_t_0028Open_0029Solaris">1.2 (Open)Solaris</a></li>
+ <li><a name="toc-Darwin-_0028Mac-OS-X_002c-iPhone_0029" href="#Darwin-_0028Mac-OS-X_002c-iPhone_0029">1.3 Darwin (Mac OS X, iPhone)</a></li>
+ </ul></li>
+ <li><a name="toc-DOS" href="#DOS">2. DOS</a></li>
+ <li><a name="toc-OS_002f2" href="#OS_002f2">3. OS/2</a></li>
+ <li><a name="toc-Windows" href="#Windows">4. Windows</a>
+ <ul class="toc">
+ <li><a name="toc-Native-Windows-compilation-using-MinGW-or-MinGW_002dw64" href="#Native-Windows-compilation-using-MinGW-or-MinGW_002dw64">4.1 Native Windows compilation using MinGW or MinGW-w64</a></li>
+ <li><a name="toc-Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows" href="#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows">4.2 Microsoft Visual C++ or Intel C++ Compiler for Windows</a>
+ <ul class="toc">
+ <li><a name="toc-Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b" href="#Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b">4.2.1 Linking to FFmpeg with Microsoft Visual C++</a></li>
+ </ul></li>
+ <li><a name="toc-Cross-compilation-for-Windows-with-Linux-1" href="#Cross-compilation-for-Windows-with-Linux-1">4.3 Cross compilation for Windows with Linux</a></li>
+ <li><a name="toc-Compilation-under-Cygwin" href="#Compilation-under-Cygwin">4.4 Compilation under Cygwin</a></li>
+ <li><a name="toc-Crosscompilation-for-Windows-under-Cygwin" href="#Crosscompilation-for-Windows-under-Cygwin">4.5 Crosscompilation for Windows under Cygwin</a></li>
+ </ul></li>
+ <li><a name="toc-Plan-9" href="#Plan-9">5. Plan 9</a></li>
+</ul>
+</div>
+
+<a name="Unix_002dlike"></a>
+<h1 class="chapter"><a href="platform.html#toc-Unix_002dlike">1. Unix-like</a></h1>
+
+<p>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:
+</p>
+<table><tr><td> </td><td><pre class="example">$(gcc -print-prog-name=as) --version
+</pre></td></tr></table>
+
+<p>If not, then you should install a different compiler that has no
+hard-coded path to gas. In the worst case pass <code>--disable-asm</code>
+to configure.
+</p>
+<a name="BSD"></a>
+<h2 class="section"><a href="platform.html#toc-BSD">1.1 BSD</a></h2>
+
+<p>BSD make will not build FFmpeg, you need to install and use GNU Make
+(<code>gmake</code>).
+</p>
+<a name="g_t_0028Open_0029Solaris"></a>
+<h2 class="section"><a href="platform.html#toc-_0028Open_0029Solaris">1.2 (Open)Solaris</a></h2>
+
+<p>GNU Make is required to build FFmpeg, so you have to invoke (<code>gmake</code>),
+standard Solaris Make will not work. When building with a non-c99 front-end
+(gcc, generic suncc) add either <code>--extra-libs=/usr/lib/values-xpg6.o</code>
+or <code>--extra-libs=/usr/lib/64/values-xpg6.o</code> 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:
+</p>
+<table><tr><td> </td><td><pre class="example">bash ./configure
+</pre></td></tr></table>
+
+<p><a name="Darwin"></a>
+</p><a name="Darwin-_0028Mac-OS-X_002c-iPhone_0029"></a>
+<h2 class="section"><a href="platform.html#toc-Darwin-_0028Mac-OS-X_002c-iPhone_0029">1.3 Darwin (Mac OS X, iPhone)</a></h2>
+
+<p>The toolchain provided with Xcode is sufficient to build the basic
+unacelerated code.
+</p>
+<p>Mac OS X on PowerPC or ARM (iPhone) requires a preprocessor from
+<a href="https://github.com/FFmpeg/gas-preprocessor">https://github.com/FFmpeg/gas-preprocessor</a> or
+<a href="http://github.com/yuvi/gas-preprocessor">http://github.com/yuvi/gas-preprocessor</a> to build the optimized
+assembler functions. Put the Perl script somewhere
+in your PATH, FFmpeg’s configure will pick it up automatically.
+</p>
+<p>Mac OS X on amd64 and x86 requires <code>yasm</code> to build most of the
+optimized assembler functions. <a href="http://www.finkproject.org/">Fink</a>,
+<a href="http://www.gentoo.org/proj/en/gentoo-alt/prefix/bootstrap-macos.xml">Gentoo Prefix</a>,
+<a href="http://mxcl.github.com/homebrew/">Homebrew</a>
+or <a href="http://www.macports.org">MacPorts</a> can easily provide it.
+</p>
+
+<a name="DOS"></a>
+<h1 class="chapter"><a href="platform.html#toc-DOS">2. DOS</a></h1>
+
+<p>Using a cross-compiler is preferred for various reasons.
+<a href="http://www.delorie.com/howto/djgpp/linux-x-djgpp.html">http://www.delorie.com/howto/djgpp/linux-x-djgpp.html</a>
+</p>
+
+<a name="OS_002f2"></a>
+<h1 class="chapter"><a href="platform.html#toc-OS_002f2">3. OS/2</a></h1>
+
+<p>For information about compiling FFmpeg on OS/2 see
+<a href="http://www.edm2.com/index.php/FFmpeg">http://www.edm2.com/index.php/FFmpeg</a>.
+</p>
+
+<a name="Windows"></a>
+<h1 class="chapter"><a href="platform.html#toc-Windows">4. Windows</a></h1>
+
+<p>To get help and instructions for building FFmpeg under Windows, check out
+the FFmpeg Windows Help Forum at <a href="http://ffmpeg.zeranoe.com/forum/">http://ffmpeg.zeranoe.com/forum/</a>.
+</p>
+<a name="Native-Windows-compilation-using-MinGW-or-MinGW_002dw64"></a>
+<h2 class="section"><a href="platform.html#toc-Native-Windows-compilation-using-MinGW-or-MinGW_002dw64">4.1 Native Windows compilation using MinGW or MinGW-w64</a></h2>
+
+<p>FFmpeg can be built to run natively on Windows using the MinGW or MinGW-w64
+toolchains. Install the latest versions of MSYS and MinGW or MinGW-w64 from
+<a href="http://www.mingw.org/">http://www.mingw.org/</a> or <a href="http://mingw-w64.sourceforge.net/">http://mingw-w64.sourceforge.net/</a>.
+You can find detailed installation instructions in the download section and
+the FAQ.
+</p>
+<p>Notes:
+</p>
+<ul>
+<li> Building natively using MSYS can be sped up by disabling implicit rules
+in the Makefile by calling <code>make -r</code> instead of plain <code>make</code>. 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 during
+<code>make install</code>).
+
+</li><li> In order to compile FFplay, you must have the MinGW development library
+of <a href="http://www.libsdl.org/">SDL</a> and <code>pkg-config</code> installed.
+
+</li><li> By using <code>./configure --enable-shared</code> when configuring FFmpeg,
+you can build the FFmpeg libraries (e.g. libavutil, libavcodec,
+libavformat) as DLLs.
+
+</li></ul>
+
+<a name="Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows"></a>
+<h2 class="section"><a href="platform.html#toc-Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows">4.2 Microsoft Visual C++ or Intel C++ Compiler for Windows</a></h2>
+
+<p>FFmpeg can be built with MSVC 2012 or earlier using a C99-to-C89 conversion utility
+and wrapper, or with MSVC 2013 and ICL natively.
+</p>
+<p>You will need the following prerequisites:
+</p>
+<ul>
+<li> <a href="https://github.com/libav/c99-to-c89/">C99-to-C89 Converter & Wrapper</a>
+(if using MSVC 2012 or earlier)
+</li><li> <a href="http://code.google.com/p/msinttypes/">msinttypes</a>
+(if using MSVC 2012 or earlier)
+</li><li> <a href="http://www.mingw.org/">MSYS</a>
+</li><li> <a href="http://yasm.tortall.net/">YASM</a>
+</li><li> <a href="http://gnuwin32.sourceforge.net/packages/bc.htm">bc for Windows</a> if
+you want to run <a href="fate.html">FATE</a>.
+</li></ul>
+
+<p>To set up a proper environment in MSYS, you need to run <code>msys.bat</code> from
+the Visual Studio or Intel Compiler command prompt.
+</p>
+<p>Place <code>yasm.exe</code> somewhere in your <code>PATH</code>. If using MSVC 2012 or
+earlier, place <code>c99wrap.exe</code> and <code>c99conv.exe</code> somewhere in your
+<code>PATH</code> as well.
+</p>
+<p>Next, make sure any other headers and libs you want to use, such as zlib, are
+located in a spot that the compiler can see. Do so by modifying the <code>LIB</code>
+and <code>INCLUDE</code> environment variables to include the <strong>Windows-style</strong>
+paths to these directories. Alternatively, you can try and use the
+<code>--extra-cflags</code>/<code>--extra-ldflags</code> configure options. If using MSVC
+2012 or earlier, place <code>inttypes.h</code> somewhere the compiler can see too.
+</p>
+<p>Finally, run:
+</p>
+<table><tr><td> </td><td><pre class="example">For MSVC:
+./configure --toolchain=msvc
+
+For ICL:
+./configure --toolchain=icl
+
+make
+make install
+</pre></td></tr></table>
+
+<p>If you wish to compile shared libraries, add <code>--enable-shared</code> to your
+configure options. Note that due to the way MSVC and ICL handle DLL imports and
+exports, you cannot compile static and shared libraries at the same time, and
+enabling shared libraries will automatically disable the static ones.
+</p>
+<p>Notes:
+</p>
+<ul>
+<li> It is possible that coreutils’ <code>link.exe</code> conflicts with MSVC’s linker.
+You can find out by running <code>which link</code> to see which <code>link.exe</code> you
+are using. If it is located at <code>/bin/link.exe</code>, then you have the wrong one
+in your <code>PATH</code>. Either move or remove that copy, or make sure MSVC’s
+<code>link.exe</code> takes precedence in your <code>PATH</code> over coreutils’.
+
+</li><li> If you wish to build with zlib support, you will have to grab a compatible
+zlib binary from somewhere, with an MSVC import lib, or if you wish to link
+statically, you can follow the instructions below to build a compatible
+<code>zlib.lib</code> with MSVC. Regardless of which method you use, you must still
+follow step 3, or compilation will fail.
+<ol>
+<li> Grab the <a href="http://zlib.net/">zlib sources</a>.
+</li><li> Edit <code>win32/Makefile.msc</code> so that it uses -MT instead of -MD, since
+this is how FFmpeg is built as well.
+</li><li> Edit <code>zconf.h</code> and remove its inclusion of <code>unistd.h</code>. This gets
+erroneously included when building FFmpeg.
+</li><li> Run <code>nmake -f win32/Makefile.msc</code>.
+</li><li> Move <code>zlib.lib</code>, <code>zconf.h</code>, and <code>zlib.h</code> to somewhere MSVC
+can see.
+</li></ol>
+
+</li><li> FFmpeg has been tested with the following on i686 and x86_64:
+<ul>
+<li> Visual Studio 2010 Pro and Express
+</li><li> Visual Studio 2012 Pro and Express
+</li><li> Visual Studio 2013 Pro and Express
+</li><li> Intel Composer XE 2013
+</li><li> Intel Composer XE 2013 SP1
+</li></ul>
+<p>Anything else is not officially supported.
+</p>
+</li></ul>
+
+<a name="Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b"></a>
+<h3 class="subsection"><a href="platform.html#toc-Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b">4.2.1 Linking to FFmpeg with Microsoft Visual C++</a></h3>
+
+<p>If you plan to link with MSVC-built static libraries, you will need
+to make sure you have <code>Runtime Library</code> set to
+<code>Multi-threaded (/MT)</code> in your project’s settings.
+</p>
+<p>You will need to define <code>inline</code> to something MSVC understands:
+</p><table><tr><td> </td><td><pre class="example">#define inline __inline
+</pre></td></tr></table>
+
+<p>Also note, that as stated in <strong>Microsoft Visual C++</strong>, you will need
+an MSVC-compatible <a href="http://code.google.com/p/msinttypes/">inttypes.h</a>.
+</p>
+<p>If you plan on using import libraries created by dlltool, you must
+set <code>References</code> to <code>No (/OPT:NOREF)</code> under the linker optimization
+settings, otherwise the resulting binaries will fail during runtime.
+This is not required when using import libraries generated by <code>lib.exe</code>.
+This issue is reported upstream at
+<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=12633">http://sourceware.org/bugzilla/show_bug.cgi?id=12633</a>.
+</p>
+<p>To create import libraries that work with the <code>/OPT:REF</code> option
+(which is enabled by default in Release mode), follow these steps:
+</p>
+<ol>
+<li> Open the <em>Visual Studio Command Prompt</em>.
+
+<p>Alternatively, in a normal command line prompt, call ‘<tt>vcvars32.bat</tt>’
+which sets up the environment variables for the Visual C++ tools
+(the standard location for this file is something like
+‘<tt>C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat</tt>’).
+</p>
+</li><li> Enter the ‘<tt>bin</tt>’ directory where the created LIB and DLL files
+are stored.
+
+</li><li> Generate new import libraries with <code>lib.exe</code>:
+
+<table><tr><td> </td><td><pre class="example">lib /machine:i386 /def:..\lib\foo-version.def /out:foo.lib
+</pre></td></tr></table>
+
+<p>Replace <code>foo-version</code> and <code>foo</code> with the respective library names.
+</p>
+</li></ol>
+
+<p><a name="Cross-compilation-for-Windows-with-Linux"></a>
+</p><a name="Cross-compilation-for-Windows-with-Linux-1"></a>
+<h2 class="section"><a href="platform.html#toc-Cross-compilation-for-Windows-with-Linux-1">4.3 Cross compilation for Windows with Linux</a></h2>
+
+<p>You must use the MinGW cross compilation tools available at
+<a href="http://www.mingw.org/">http://www.mingw.org/</a>.
+</p>
+<p>Then configure FFmpeg with the following options:
+</p><table><tr><td> </td><td><pre class="example">./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
+</pre></td></tr></table>
+<p>(you can change the cross-prefix according to the prefix chosen for the
+MinGW tools).
+</p>
+<p>Then you can easily test FFmpeg with <a href="http://www.winehq.com/">Wine</a>.
+</p>
+<a name="Compilation-under-Cygwin"></a>
+<h2 class="section"><a href="platform.html#toc-Compilation-under-Cygwin">4.4 Compilation under Cygwin</a></h2>
+
+<p>Please use Cygwin 1.7.x as the obsolete 1.5.x Cygwin versions lack
+llrint() in its C library.
+</p>
+<p>Install your Cygwin with all the "Base" packages, plus the
+following "Devel" ones:
+</p><table><tr><td> </td><td><pre class="example">binutils, gcc4-core, make, git, mingw-runtime, texi2html
+</pre></td></tr></table>
+
+<p>In order to run FATE you will also need the following "Utils" packages:
+</p><table><tr><td> </td><td><pre class="example">bc, diffutils
+</pre></td></tr></table>
+
+<p>If you want to build FFmpeg with additional libraries, download Cygwin
+"Devel" packages for Ogg and Vorbis from any Cygwin packages repository:
+</p><table><tr><td> </td><td><pre class="example">libogg-devel, libvorbis-devel
+</pre></td></tr></table>
+
+<p>These library packages are only available from
+<a href="http://sourceware.org/cygwinports/">Cygwin Ports</a>:
+</p>
+<table><tr><td> </td><td><pre class="example">yasm, libSDL-devel, libfaac-devel, libaacplus-devel, libgsm-devel, libmp3lame-devel,
+libschroedinger1.0-devel, speex-devel, libtheora-devel, libxvidcore-devel
+</pre></td></tr></table>
+
+<p>The recommendation for x264 is to build it from source, as it evolves too
+quickly for Cygwin Ports to be up to date.
+</p>
+<a name="Crosscompilation-for-Windows-under-Cygwin"></a>
+<h2 class="section"><a href="platform.html#toc-Crosscompilation-for-Windows-under-Cygwin">4.5 Crosscompilation for Windows under Cygwin</a></h2>
+
+<p>With Cygwin you can create Windows binaries that do not need the cygwin1.dll.
+</p>
+<p>Just install your Cygwin as explained before, plus these additional
+"Devel" packages:
+</p><table><tr><td> </td><td><pre class="example">gcc-mingw-core, mingw-runtime, mingw-zlib
+</pre></td></tr></table>
+
+<p>and add some special flags to your configure invocation.
+</p>
+<p>For a static build run
+</p><table><tr><td> </td><td><pre class="example">./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
+</pre></td></tr></table>
+
+<p>and for a build with shared libraries
+</p><table><tr><td> </td><td><pre class="example">./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
+</pre></td></tr></table>
+
+<a name="Plan-9"></a>
+<h1 class="chapter"><a href="platform.html#toc-Plan-9">5. Plan 9</a></h1>
+
+<p>The native <a href="http://plan9.bell-labs.com/plan9/">Plan 9</a> compiler
+does not implement all the C99 features needed by FFmpeg so the gcc
+port must be used. Furthermore, a few items missing from the C
+library and shell environment need to be fixed.
+</p>
+<ul>
+<li> GNU awk, grep, make, and sed
+
+<p>Working packages of these tools can be found at
+<a href="http://code.google.com/p/ports2plan9/downloads/list">ports2plan9</a>.
+They can be installed with <a href="http://9front.org/">9front’s</a> <code>pkg</code>
+utility by setting <code>pkgpath</code> to
+<code>http://ports2plan9.googlecode.com/files/</code>.
+</p>
+</li><li> Missing/broken <code>head</code> and <code>printf</code> commands
+
+<p>Replacements adequate for building FFmpeg can be found in the
+<code>compat/plan9</code> directory. Place these somewhere they will be
+found by the shell. These are not full implementations of the
+commands and are <em>not</em> suitable for general use.
+</p>
+</li><li> Missing C99 <code>stdint.h</code> and <code>inttypes.h</code>
+
+<p>Replacement headers are available from
+<a href="http://code.google.com/p/plan9front/issues/detail?id=152">http://code.google.com/p/plan9front/issues/detail?id=152</a>.
+</p>
+</li><li> Missing or non-standard library functions
+
+<p>Some functions in the C library are missing or incomplete. The
+<code><a href="http://ports2plan9.googlecode.com/files/gcc-apelibs-1207.tbz">gcc-apelibs-1207</a></code> package from
+<a href="http://code.google.com/p/ports2plan9/downloads/list">ports2plan9</a>
+includes an updated C library, but installing the full package gives
+unusable executables. Instead, keep the files from <code>gccbin.tgz</code>
+under <code>/386/lib/gnu</code>. From the <code>libc.a</code> archive in the
+<code>gcc-apelibs-1207</code> package, extract the following object files and
+turn them into a library:
+</p>
+<ul>
+<li> <code>strerror.o</code>
+</li><li> <code>strtoll.o</code>
+</li><li> <code>snprintf.o</code>
+</li><li> <code>vsnprintf.o</code>
+</li><li> <code>vfprintf.o</code>
+</li><li> <code>_IO_getc.o</code>
+</li><li> <code>_IO_putc.o</code>
+</li></ul>
+
+<p>Use the <code>--extra-libs</code> option of <code>configure</code> to inform the
+build system of this library.
+</p>
+</li><li> FPU exceptions enabled by default
+
+<p>Unlike most other systems, Plan 9 enables FPU exceptions by default.
+These must be disabled before calling any FFmpeg functions. While the
+included tools will do this automatically, other users of the
+libraries must do it themselves.
+</p>
+</li></ul>
+
+<footer class="footer pagination-right">
+<span class="label label-info">This document was generated by <em>Kyle Schwarz</em> on <em>June 19, 2014</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.</span></footer></div></div></body>
#include "libavutil/pixfmt.h"
#include "libavutil/rational.h"
-#include "libavcodec/version.h"
+#include "version.h"
+
+#if FF_API_FAST_MALLOC
+// to provide fast_*alloc
+#include "libavutil/mem.h"
+#endif
+
/**
* @defgroup libavc Encoding/Decoding Library
* @{
/* video codecs */
AV_CODEC_ID_MPEG1VIDEO,
AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
+#if FF_API_XVMC
AV_CODEC_ID_MPEG2VIDEO_XVMC,
+#endif /* FF_API_XVMC */
AV_CODEC_ID_H261,
AV_CODEC_ID_H263,
AV_CODEC_ID_RV10,
AV_CODEC_ID_AIC,
AV_CODEC_ID_ESCAPE130_DEPRECATED,
AV_CODEC_ID_G2M_DEPRECATED,
+ AV_CODEC_ID_WEBP_DEPRECATED,
+ AV_CODEC_ID_HNM4_VIDEO,
+ AV_CODEC_ID_HEVC_DEPRECATED,
+ AV_CODEC_ID_FIC,
AV_CODEC_ID_BRENDER_PIX= MKBETAG('B','P','I','X'),
AV_CODEC_ID_Y41P = MKBETAG('Y','4','1','P'),
AV_CODEC_ID_SNOW = MKBETAG('S','N','O','W'),
AV_CODEC_ID_WEBP = MKBETAG('W','E','B','P'),
AV_CODEC_ID_SMVJPEG = MKBETAG('S','M','V','J'),
+ AV_CODEC_ID_HEVC = MKBETAG('H','2','6','5'),
+#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
/* various PCM "codecs" */
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
AV_CODEC_ID_PCM_LXF,
AV_CODEC_ID_S302M,
AV_CODEC_ID_PCM_S8_PLANAR,
+ AV_CODEC_ID_PCM_S24LE_PLANAR_DEPRECATED,
+ AV_CODEC_ID_PCM_S32LE_PLANAR_DEPRECATED,
AV_CODEC_ID_PCM_S24LE_PLANAR = MKBETAG(24,'P','S','P'),
AV_CODEC_ID_PCM_S32LE_PLANAR = MKBETAG(32,'P','S','P'),
AV_CODEC_ID_PCM_S16BE_PLANAR = MKBETAG('P','S','P',16),
AV_CODEC_ID_ADPCM_IMA_OKI = MKBETAG('O','K','I',' '),
AV_CODEC_ID_ADPCM_DTK = MKBETAG('D','T','K',' '),
AV_CODEC_ID_ADPCM_IMA_RAD = MKBETAG('R','A','D',' '),
+ AV_CODEC_ID_ADPCM_G726LE = MKBETAG('6','2','7','G'),
/* AMR */
AV_CODEC_ID_AMR_NB = 0x12000,
AV_CODEC_ID_MLP,
AV_CODEC_ID_GSM_MS, /* as found in WAV */
AV_CODEC_ID_ATRAC3,
+#if FF_API_VOXWARE
AV_CODEC_ID_VOXWARE,
+#endif
AV_CODEC_ID_APE,
AV_CODEC_ID_NELLYMOSER,
AV_CODEC_ID_MUSEPACK8,
AV_CODEC_ID_OPUS_DEPRECATED,
AV_CODEC_ID_COMFORT_NOISE,
AV_CODEC_ID_TAK_DEPRECATED,
+ AV_CODEC_ID_METASOUND,
AV_CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'),
AV_CODEC_ID_SONIC = MKBETAG('S','O','N','C'),
AV_CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'),
AV_CODEC_ID_OTF = MKBETAG( 0 ,'O','T','F'),
AV_CODEC_ID_SMPTE_KLV = MKBETAG('K','L','V','A'),
AV_CODEC_ID_DVD_NAV = MKBETAG('D','N','A','V'),
+ AV_CODEC_ID_TIMED_ID3 = MKBETAG('T','I','D','3'),
AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above
AVCOL_PRI_FILM = 8,
+ AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020
AVCOL_PRI_NB , ///< Not part of ABI
};
enum AVColorTransferCharacteristic{
- AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361
- AVCOL_TRC_UNSPECIFIED = 2,
- AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
- AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG
- AVCOL_TRC_SMPTE240M = 7,
- AVCOL_TRC_NB , ///< Not part of ABI
+ AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361
+ AVCOL_TRC_UNSPECIFIED = 2,
+ AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
+ AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG
+ AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
+ AVCOL_TRC_SMPTE240M = 7,
+ AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics"
+ AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)"
+ AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt( 10 ) : 1 range)"
+ AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4
+ AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut
+ AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC)
+ AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10 bit system
+ AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12 bit system
+ AVCOL_TRC_NB , ///< Not part of ABI
};
/**
float quality_factor;
} RcOverride;
+#if FF_API_MAX_BFRAMES
+/**
+ * @deprecated there is no libavcodec-wide limit on the number of B-frames
+ */
#define FF_MAX_B_FRAMES 16
+#endif
/* encoding support
These flags can be passed in AVCodecContext.flags before initialization.
#define CODEC_FLAG_UNALIGNED 0x0001
#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale.
#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263.
+#define CODEC_FLAG_OUTPUT_CORRUPT 0x0008 ///< Output even those frames that might be corrupted
#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_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_GRAY 0x2000 ///< Only decode/encode grayscale.
-#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges.
+#if FF_API_EMU_EDGE
+/**
+ * @deprecated edges are not used/required anymore. I.e. this flag is now always
+ * set.
+ */
+#define CODEC_FLAG_EMU_EDGE 0x4000
+#endif
#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_CAP_DR1 0x0002
#define CODEC_CAP_TRUNCATED 0x0008
-/* Codec can export data for HW decoding (XvMC). */
+#if FF_API_XVMC
+/* Codec can export data for HW decoding. This flag indicates that
+ * the codec would call get_format() with list that might contain HW accelerated
+ * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them
+ * including raw image format.
+ * The application can use the passed context to determine bitstream version,
+ * chroma format, resolution etc.
+ */
#define CODEC_CAP_HWACCEL 0x0010
+#endif /* FF_API_XVMC */
/**
* Encoder or decoder requires flushing with NULL input at the end in order to
* give the complete and correct output.
* This can be used to prevent truncation of the last audio samples.
*/
#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
+#if FF_API_CAP_VDPAU
/**
* Codec can export data for HW decoding (VDPAU).
*/
#define CODEC_CAP_HWACCEL_VDPAU 0x0080
+#endif
/**
* Codec can output multiple frames per AVPacket
* Normally demuxers return one frame at a time, demuxers which do not do
* Codec should fill in channel configuration and samplerate instead of container
*/
#define CODEC_CAP_CHANNEL_CONF 0x0400
-
+#if FF_API_NEG_LINESIZES
/**
- * Codec is able to deal with negative linesizes
+ * @deprecated no codecs use this capability
*/
#define CODEC_CAP_NEG_LINESIZES 0x0800
-
+#endif
/**
* Codec supports frame-level multithreading.
*/
*/
#define CODEC_CAP_LOSSLESS 0x80000000
+#if FF_API_MB_TYPE
//The following defines may change, don't expect compatibility if you use them.
#define MB_TYPE_INTRA4x4 0x0001
#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
#define MB_TYPE_QUANT 0x00010000
#define MB_TYPE_CBP 0x00020000
//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
+#endif
/**
* Pan Scan area.
int16_t position[3][2];
}AVPanScan;
+#if FF_API_QSCALE_TYPE
#define FF_QSCALE_TYPE_MPEG1 0
#define FF_QSCALE_TYPE_MPEG2 1
#define FF_QSCALE_TYPE_H264 2
#define FF_QSCALE_TYPE_VP56 3
+#endif
#if FF_API_GET_BUFFER
#define FF_BUFFER_TYPE_INTERNAL 1
* follow the timestamp specifier of a WebVTT cue.
*/
AV_PKT_DATA_WEBVTT_SETTINGS,
+
+ /**
+ * A list of zero terminated key/value strings. There is no end marker for
+ * the list, so it is required to rely on the side data size to stop. This
+ * side data includes updated metadata which appeared in the stream.
+ */
+ AV_PKT_DATA_METADATA_UPDATE,
};
/**
*/
int coded_width, coded_height;
+#if FF_API_ASPECT_EXTENDED
#define FF_ASPECT_EXTENDED 15
+#endif
/**
* the number of pictures in a group of pictures, or 0 for intra_only
#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
+#if FF_API_XVMC
/**
* XVideo Motion Acceleration
* - encoding: forbidden
* - decoding: set by decoder
+ * @deprecated XvMC doesn't need it anymore.
*/
- int xvmc_acceleration;
+ attribute_deprecated int xvmc_acceleration;
+#endif /* FF_API_XVMC */
/**
* macroblock decision mode
* If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused
* (read and/or written to if it is writable) later by libavcodec.
*
- * If CODEC_FLAG_EMU_EDGE is not set in s->flags, the buffer must contain an
- * edge of the size returned by avcodec_get_edge_width() on all sides.
- *
* avcodec_align_dimensions2() should be used to find the required width and
* height, as they normally need to be rounded up to the next multiple of 16.
*
+ * Some decoders do not support linesizes changing between frames.
+ *
* If frame multithreading is used and thread_safe_callbacks is set,
* this callback may be called from a different thread, but not from more
* than one at once. Does not need to be reentrant.
*/
int workaround_bugs;
#define FF_BUG_AUTODETECT 1 ///< autodetection
+#if FF_API_OLD_MSMPEG4
#define FF_BUG_OLD_MSMPEG4 2
+#endif
#define FF_BUG_XVID_ILACE 4
#define FF_BUG_UMP4 8
#define FF_BUG_NO_PADDING 16
#define FF_BUG_AMV 32
+#if FF_API_AC_VLC
#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
+#endif
#define FF_BUG_QPEL_CHROMA 64
#define FF_BUG_STD_QPEL 128
#define FF_BUG_QPEL_CHROMA2 256
#define FF_DEBUG_BITSTREAM 4
#define FF_DEBUG_MB_TYPE 8
#define FF_DEBUG_QP 16
+#if FF_API_DEBUG_MV
+/**
+ * @deprecated this option does nothing
+ */
#define FF_DEBUG_MV 32
+#endif
#define FF_DEBUG_DCT_COEFF 0x00000040
#define FF_DEBUG_SKIP 0x00000080
#define FF_DEBUG_STARTCODE 0x00000100
#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
+#if FF_API_DEBUG_MV
+#define FF_DEBUG_VIS_QP 0x00002000 ///< only access through AVOptions from outside libavcodec
+#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec
+#endif
#define FF_DEBUG_BUFFERS 0x00008000
#define FF_DEBUG_THREADS 0x00010000
+#if FF_API_DEBUG_MV
/**
* debug
+ * Code outside libavcodec should access this field using AVOptions
* - encoding: Set by user.
* - decoding: Set by user.
*/
#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
+#endif
/**
* Error recognition; may misdetect some more or less valid parts as errors.
* - decoding: Set by user.
*/
int err_recognition;
+
+/**
+ * Verify checksums embedded in the bitstream (could be of either encoded or
+ * decoded data, depending on the codec) and print an error message on mismatch.
+ * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
+ * decoder returning an error.
+ */
#define AV_EF_CRCCHECK (1<<0)
-#define AV_EF_BITSTREAM (1<<1)
-#define AV_EF_BUFFER (1<<2)
-#define AV_EF_EXPLODE (1<<3)
+#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations
+#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length
+#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection
-#define AV_EF_CAREFUL (1<<16)
-#define AV_EF_COMPLIANT (1<<17)
-#define AV_EF_AGGRESSIVE (1<<18)
+#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
+#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliancies as errors
+#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error
/**
#define FF_IDCT_SIMPLEVIS 18
#define FF_IDCT_FAAN 20
#define FF_IDCT_SIMPLENEON 22
+#if FF_API_ARCH_ALPHA
#define FF_IDCT_SIMPLEALPHA 23
+#endif
/**
* bits per sample/pixel from the demuxer (needed for huffyuv).
/**
* the picture in the bitstream
* - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
+ * - decoding: unused
*/
AVFrame *coded_frame;
*/
int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
+#if FF_API_THREAD_OPAQUE
/**
- * thread opaque
- * Can be used by execute() to store some per AVCodecContext stuff.
- * - encoding: set by execute()
- * - decoding: set by execute()
+ * @deprecated this field should not be used from outside of lavc
*/
+ attribute_deprecated
void *thread_opaque;
+#endif
/**
* noise vs. sse weight for the nsse comparsion function
#define FF_PROFILE_JPEG2000_DCINEMA_2K 3
#define FF_PROFILE_JPEG2000_DCINEMA_4K 4
+
+#define FF_PROFILE_HEVC_MAIN 1
+#define FF_PROFILE_HEVC_MAIN_10 2
+#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3
+
/**
* level
* - encoding: Set by user.
uint8_t *subtitle_header;
int subtitle_header_size;
+#if FF_API_ERROR_RATE
/**
- * Simulates errors in the bitstream to test error concealment.
- * - encoding: Set by user.
- * - decoding: unused
+ * @deprecated use the 'error_rate' private AVOption of the mpegvideo
+ * encoders
*/
+ attribute_deprecated
int error_rate;
+#endif
+#if FF_API_CODEC_PKT
/**
- * Current packet as passed into the decoder, to avoid having
- * to pass the packet into every function. Currently only valid
- * inside lavc and get/release_buffer callbacks.
- * - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
- * - encoding: unused
+ * @deprecated this field is not supposed to be accessed from outside lavc
*/
+ attribute_deprecated
AVPacket *pkt;
+#endif
/**
* VBV delay coded in the last frame (in periods of a 27 MHz clock).
#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself
#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
+ /**
+ * Skip processing alpha if supported by codec.
+ * Note that if the format uses pre-multiplied alpha (common with VP6,
+ * and recommended due to better video quality/compression)
+ * the image will look as if alpha-blended onto a black background.
+ * However for formats that do not use pre-multiplied alpha
+ * there might be serious artefacts (though e.g. libswscale currently
+ * assumes pre-multiplied alpha anyway).
+ * Code outside libavcodec should access this field using AVOptions
+ *
+ * - decoding: set by user
+ * - encoding: unused
+ */
+ int skip_alpha;
+
+ /**
+ * Number of samples to skip after a discontinuity
+ * - decoding: unused
+ * - encoding: set by libavcodec
+ */
+ int seek_preroll;
+
+#if !FF_API_DEBUG_MV
+ /**
+ * debug motion vectors
+ * Code outside libavcodec should access this field using AVOptions
+ * - 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
+#endif
+
+ /**
+ * custom intra quantization matrix
+ * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
+ * - encoding: Set by user, can be NULL.
+ * - decoding: unused.
+ */
+ uint16_t *chroma_intra_matrix;
} AVCodecContext;
AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx);
int av_codec_get_lowres(const AVCodecContext *avctx);
void av_codec_set_lowres(AVCodecContext *avctx, int val);
+int av_codec_get_seek_preroll(const AVCodecContext *avctx);
+void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);
+
+uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
+void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);
+
/**
* AVProfile.
*/
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
- uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
+#if FF_API_LOWRES
+ uint8_t max_lowres; ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()
+#endif
const AVClass *priv_class; ///< AVClass for the private context
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
void (*flush)(AVCodecContext *);
} AVCodec;
+int av_codec_get_max_lowres(const AVCodec *codec);
+
+struct MpegEncContext;
+
/**
* AVHWAccel.
*/
*
* Meaningful slice information (codec specific) is guaranteed to
* be parsed at this point. This function is mandatory.
+ * The only exception is XvMC, that works on MB level.
*
* @param avctx the codec context
* @param buf the slice data buffer base
* AVCodecContext.release_buffer().
*/
int priv_data_size;
+
+ /**
+ * Called for every Macroblock in a slice.
+ *
+ * XvMC uses it to replace the ff_MPV_decode_mb().
+ * Instead of decoding to raw picture, MB parameters are
+ * stored in an array provided by the video driver.
+ *
+ * @param s the mpeg context
+ */
+ void (*decode_mb)(struct MpegEncContext *s);
} AVHWAccel;
/**
*/
void avcodec_register_all(void);
-
-#if FF_API_ALLOC_CONTEXT
-/**
- * Allocate an AVCodecContext and set its fields to default values. The
- * resulting struct can be deallocated by simply calling av_free().
- *
- * @return An AVCodecContext filled with default values or NULL on failure.
- * @see avcodec_get_context_defaults
- *
- * @deprecated use avcodec_alloc_context3()
- */
-attribute_deprecated
-AVCodecContext *avcodec_alloc_context(void);
-
-/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
- * we WILL change its arguments and name a few times! */
-attribute_deprecated
-AVCodecContext *avcodec_alloc_context2(enum AVMediaType);
-
-/**
- * Set the fields of the given AVCodecContext to default values.
- *
- * @param s The AVCodecContext of which the fields should be set to default values.
- * @deprecated use avcodec_get_context_defaults3
- */
-attribute_deprecated
-void avcodec_get_context_defaults(AVCodecContext *s);
-
-/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
- * we WILL change its arguments and name a few times! */
-attribute_deprecated
-void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType);
-#endif
-
/**
* Allocate an AVCodecContext and set its fields to default values. The
* resulting struct can be deallocated by calling avcodec_close() on it followed
* can use this AVCodecContext to decode/encode video/audio data.
*
* @param dest target codec context, should be initialized with
- * avcodec_alloc_context3(), but otherwise uninitialized
+ * avcodec_alloc_context3(NULL), but otherwise uninitialized
* @param src source codec context
* @return AVERROR() on error (e.g. memory allocation error), 0 on success
*/
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
+#if FF_API_AVFRAME_LAVC
/**
- * Allocate an AVFrame and set its fields to default values. The resulting
- * struct must be freed using avcodec_free_frame().
- *
- * @return An AVFrame filled with default values or NULL on failure.
- * @see avcodec_get_frame_defaults
+ * @deprecated use av_frame_alloc()
*/
+attribute_deprecated
AVFrame *avcodec_alloc_frame(void);
/**
* Set the fields of the given AVFrame to default values.
*
* @param frame The AVFrame of which the fields should be set to default values.
+ *
+ * @deprecated use av_frame_unref()
*/
+attribute_deprecated
void avcodec_get_frame_defaults(AVFrame *frame);
/**
* @warning this function does NOT free the data buffers themselves
* (it does not know how, since they might have been allocated with
* a custom get_buffer()).
- */
-void avcodec_free_frame(AVFrame **frame);
-
-#if FF_API_AVCODEC_OPEN
-/**
- * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
- * function the context has to be allocated.
- *
- * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
- * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
- * retrieving a codec.
- *
- * @warning This function is not thread safe!
- *
- * @code
- * avcodec_register_all();
- * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
- * if (!codec)
- * exit(1);
*
- * context = avcodec_alloc_context3(codec);
- *
- * if (avcodec_open(context, codec) < 0)
- * exit(1);
- * @endcode
- *
- * @param avctx The context which will be set up to use the given codec.
- * @param codec The codec to use within the context.
- * @return zero on success, a negative value on error
- * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close
- *
- * @deprecated use avcodec_open2
+ * @deprecated use av_frame_free()
*/
attribute_deprecated
-int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
+void avcodec_free_frame(AVFrame **frame);
#endif
/**
int av_packet_split_side_data(AVPacket *pkt);
+/**
+ * Pack a dictionary for use in side_data.
+ *
+ * @param dict The dictionary to pack.
+ * @param size pointer to store the size of the returned data
+ * @return pointer to data if successful, NULL otherwise
+ */
+uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
+/**
+ * Unpack a dictionary from side_data.
+ *
+ * @param data data from side_data
+ * @param size size of the data
+ * @param dict the metadata storage dictionary
+ * @return 0 on success, < 0 on failure
+ */
+int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
+
+
+/**
+ * Convenience function to free all the side data stored.
+ * All the other fields stay untouched.
+ *
+ * @param pkt packet
+ */
+void av_packet_free_side_data(AVPacket *pkt);
+
+/**
+ * Setup a new reference to the data described by a given packet
+ *
+ * If src is reference-counted, setup dst as a new reference to the
+ * buffer in src. Otherwise allocate a new buffer in dst and copy the
+ * data from src into it.
+ *
+ * All the other fields are copied from src.
+ *
+ * @see av_packet_unref
+ *
+ * @param dst Destination packet
+ * @param src Source packet
+ *
+ * @return 0 on success, a negative AVERROR on error.
+ */
+int av_packet_ref(AVPacket *dst, AVPacket *src);
+
+/**
+ * Wipe the packet.
+ *
+ * Unreference the buffer referenced by the packet and reset the
+ * remaining packet fields to their default values.
+ *
+ * @param pkt The packet to be unreferenced.
+ */
+void av_packet_unref(AVPacket *pkt);
+
+/**
+ * Move every field in src to dst and reset src.
+ *
+ * @see av_packet_unref
+ *
+ * @param src Source packet, will be reset
+ * @param dst Destination packet
+ */
+void av_packet_move_ref(AVPacket *dst, AVPacket *src);
+
+/**
+ * Copy only "properties" fields from src to dst.
+ *
+ * Properties for the purpose of this function are all the fields
+ * beside those related to the packet data (buf, data, size)
+ *
+ * @param dst Destination packet
+ * @param src Source packet
+ *
+ * @return 0 on success AVERROR on failure.
+ *
+ */
+int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
/**
* @}
*/
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags);
+#if FF_API_EMU_EDGE
/**
* Return the amount of padding in pixels which the get_buffer callback must
* provide around the edge of the image for codecs which do not have the
* CODEC_FLAG_EMU_EDGE flag.
*
* @return Required padding in pixels.
+ *
+ * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer
+ * needed
*/
+attribute_deprecated
unsigned avcodec_get_edge_width(void);
+#endif
/**
* Modify width and height values so that they will result in a memory
* padding.
*
* May only be used if a codec with CODEC_CAP_DR1 has been opened.
- * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased
- * according to avcodec_get_edge_width() before.
*/
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
* line sizes are a multiple of the respective linesize_align[i].
*
* May only be used if a codec with CODEC_CAP_DR1 has been opened.
- * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased
- * according to avcodec_get_edge_width() before.
*/
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
int linesize_align[AV_NUM_DATA_POINTERS]);
* Decode the audio frame of size avpkt->size from avpkt->data into frame.
*
* Some decoders may support multiple frames in a single AVPacket. Such
- * decoders would then just decode the first frame. In this case,
- * avcodec_decode_audio4 has to be called again with an AVPacket containing
- * the remaining data in order to decode the second frame, etc...
- * Even if no frames are returned, the packet needs to be fed to the decoder
- * with remaining data until it is completely consumed or an error occurs.
+ * decoders would then just decode the first frame and the return value would be
+ * less than the packet size. In this case, avcodec_decode_audio4 has to be
+ * called again with an AVPacket containing the remaining data in order to
+ * decode the second frame, etc... Even if no frames are returned, the packet
+ * needs to be fed to the decoder with remaining data until it is completely
+ * consumed or an error occurs.
+ *
+ * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
+ * and output. This means that for some packets they will not immediately
+ * produce decoded output and need to be flushed at the end of decoding to get
+ * all the decoded data. Flushing is done by calling this function with packets
+ * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
+ * returning samples. It is safe to flush even those decoders that are not
+ * marked with CODEC_CAP_DELAY, then no samples will be returned.
*
* @warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE
* larger than the actual read bytes because some optimized bitstream
* readers read 32 or 64 bits at once and could read over the end.
*
- * @note You might have to align the input buffer. The alignment requirements
- * depend on the CPU and the decoder.
- *
* @param avctx the codec context
* @param[out] frame The AVFrame in which to store decoded audio samples.
* The decoder will allocate a buffer for the decoded frame by
* to the frame if av_frame_is_writable() returns 1.
* When AVCodecContext.refcounted_frames is set to 0, the returned
* reference belongs to the decoder and is valid only until the
- * next call to this function or until closing the decoder.
- * The caller may not write to it.
+ * next call to this function or until closing or flushing the
+ * decoder. The caller may not write to it.
* @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
- * non-zero.
+ * non-zero. Note that this field being set to zero
+ * does not mean that an error has occurred. For
+ * decoders with CODEC_CAP_DELAY set, no given decode
+ * call is guaranteed to produce a frame.
* @param[in] avpkt The input AVPacket containing the input buffer.
* At least avpkt->data and avpkt->size should be set. Some
* decoders might also require additional fields to be set.
* @warning The end of the input buffer buf should be set to 0 to ensure that
* no overreading happens for damaged MPEG streams.
*
- * @note You might have to align the input buffer avpkt->data.
- * The alignment requirements depend on the CPU: on some CPUs it isn't
- * necessary at all, on others it won't work at all if not aligned and on others
- * it will work but it will have an impact on performance.
- *
- * In practice, avpkt->data should have 4 byte alignment at minimum.
- *
* @note Codecs which have the CODEC_CAP_DELAY capability set have a delay
* between input and output, these need to be fed with avpkt->data=NULL,
* avpkt->size=0 at the end to return the remaining frames.
* to the frame if av_frame_is_writable() returns 1.
* When AVCodecContext.refcounted_frames is set to 0, the returned
* reference belongs to the decoder and is valid only until the
- * next call to this function or until closing the decoder. The
- * caller may not write to it.
+ * next call to this function or until closing or flushing the
+ * decoder. The caller may not write to it.
*
- * @param[in] avpkt The input AVpacket containing the input buffer.
+ * @param[in] avpkt The input AVPacket containing the input buffer.
* You can create such packet with av_init_packet() and by then setting
* data and size, some decoders might in addition need other fields like
* flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
* and reusing a get_buffer written for video codecs would probably perform badly
* due to a potentially very different allocation pattern.
*
+ * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
+ * and output. This means that for some packets they will not immediately
+ * produce decoded output and need to be flushed at the end of decoding to get
+ * all the decoded data. Flushing is done by calling this function with packets
+ * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
+ * returning subtitles. It is safe to flush even those decoders that are not
+ * marked with CODEC_CAP_DELAY, then no subtitles will be returned.
+ *
* @param avctx the codec context
* @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be
freed with avsubtitle_free if *got_sub_ptr is set.
* AV_PICTURE_STRUCTURE_TOP_FIELD.
*/
enum AVPictureStructure picture_structure;
+
+ /**
+ * Picture number incremented in presentation or output order.
+ * This field may be reinitialized at the first picture of a new sequence.
+ *
+ * For example, this corresponds to H.264 PicOrderCnt.
+ */
+ int output_picture_number;
} AVCodecParserContext;
typedef struct AVCodecParser {
* @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
* @return The best pixel format to convert to or -1 if none was found.
*/
-enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(enum AVPixelFormat *pix_fmt_list,
+enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
enum AVPixelFormat src_pix_fmt,
int has_alpha, int *loss_ptr);
attribute_deprecated
#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI
-enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list,
+enum AVPixelFormat avcodec_find_best_pix_fmt2(const enum AVPixelFormat *pix_fmt_list,
enum AVPixelFormat src_pix_fmt,
int has_alpha, int *loss_ptr);
#else
* @}
*/
+#if FF_API_SET_DIMENSIONS
+/**
+ * @deprecated this function is not supposed to be used from outside of lavc
+ */
+attribute_deprecated
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
+#endif
/**
* Put a string representing the codec tag codec_tag in buf.
*
+ * @param buf buffer to place codec tag in
* @param buf_size size in bytes of buf
+ * @param codec_tag codec tag to assign
* @return the length of the string that would have been generated if
* enough space had been available, excluding the trailing null
*/
int buf_size, int align);
/**
- * Flush buffers, should be called when seeking or when switching to a different stream.
+ * Reset the internal decoder state / flush internal buffers. Should be called
+ * e.g. when seeking or when switching to a different stream.
+ *
+ * @note when refcounted frames are not used (i.e. avctx->refcounted_frames is 0),
+ * this invalidates the frames previously returned from the decoder. When
+ * refcounted frames are used, the decoder just releases any references it might
+ * keep internally, but the caller's reference remains valid.
*/
void avcodec_flush_buffers(AVCodecContext *avctx);
/* memory */
-/**
- * Reallocate the given block if it is not large enough, otherwise do nothing.
- *
- * @see av_realloc
- */
-void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
-
-/**
- * Allocate a buffer, reusing the given one if large enough.
- *
- * Contrary to av_fast_realloc the current buffer contents might not be
- * preserved and on error the old buffer is freed, thus no special
- * handling to avoid memleaks is necessary.
- *
- * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
- * @param size size of the buffer *ptr points to
- * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
- * *size 0 if an error occurred.
- */
-void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
-
/**
* Same behaviour av_fast_malloc but the buffer has additional
- * FF_INPUT_BUFFER_PADDING_SIZE at the end which will will always be 0.
+ * FF_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0.
*
* In addition the whole buffer will initially and after resizes
* be 0-initialized so that no uninitialized data will ever appear.
/**
* Set up DCT.
+ *
* @param nbits size of the input array:
* (1 << nbits) for DCT-II, DCT-III and DST-I
* (1 << nbits) + 1 for DCT-I
+ * @param type the type of transform
*
* @note the first element of the input of DST-I is ignored
*/
/* video codecs */
CODEC_ID_MPEG1VIDEO,
CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
+#if FF_API_XVMC
CODEC_ID_MPEG2VIDEO_XVMC,
+#endif
CODEC_ID_H261,
CODEC_ID_H263,
CODEC_ID_RV10,
#include "libavcodec/version.h"
+// extra flags not defined in VDADecoder.h
+enum {
+ kVDADecodeInfo_Asynchronous = 1UL << 0,
+ kVDADecodeInfo_FrameDropped = 1UL << 1
+};
+
/**
* @defgroup lavc_codec_hwaccel_vda VDA
* @ingroup lavc_codec_hwaccel
#include <vdpau/vdpau.h>
#include <vdpau/vdpau_x11.h>
#include "libavutil/avconfig.h"
+#include "libavutil/attributes.h"
+#include "avcodec.h"
+#include "version.h"
+
+#if FF_API_BUFS_VDPAU
union AVVDPAUPictureInfo {
VdpPictureInfoH264 h264;
VdpPictureInfoMPEG1Or2 mpeg;
VdpPictureInfoVC1 vc1;
VdpPictureInfoMPEG4Part2 mpeg4;
};
+#endif
+
+struct AVCodecContext;
+struct AVFrame;
+
+typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *,
+ const VdpPictureInfo *, uint32_t,
+ const VdpBitstreamBuffer *);
/**
* This structure is used to share data between the libavcodec library and
* the client video application.
- * The user shall zero-allocate the structure and make it available as
+ * The user shall allocate the structure via the av_alloc_vdpau_hwaccel
+ * function and make it available as
* AVCodecContext.hwaccel_context. Members can be set by the user once
* during initialization or through each AVCodecContext.get_buffer()
* function call. In any case, they must be valid prior to calling
* decoding functions.
+ *
+ * The size of this structure is not a part of the public ABI and must not
+ * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an
+ * AVVDPAUContext.
*/
typedef struct AVVDPAUContext {
/**
*/
VdpDecoderRender *render;
+#if FF_API_BUFS_VDPAU
/**
* VDPAU picture information
*
* Set by libavcodec.
*/
+ attribute_deprecated
union AVVDPAUPictureInfo info;
/**
*
* Set by libavcodec.
*/
+ attribute_deprecated
int bitstream_buffers_allocated;
/**
*
* Set by libavcodec.
*/
+ attribute_deprecated
int bitstream_buffers_used;
/**
*
* Set by libavcodec.
*/
+ attribute_deprecated
VdpBitstreamBuffer *bitstream_buffers;
+#endif
+ AVVDPAU_Render2 render2;
} AVVDPAUContext;
+/**
+ * @brief allocation function for AVVDPAUContext
+ *
+ * Allows extending the struct without breaking API/ABI
+ */
+AVVDPAUContext *av_alloc_vdpaucontext(void);
+
+AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *);
+void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
+/**
+ * Allocate an AVVDPAUContext.
+ *
+ * @return Newly-allocated AVVDPAUContext or NULL on failure.
+ */
+AVVDPAUContext *av_vdpau_alloc_context(void);
+
+/**
+ * Get a decoder profile that should be used for initializing a VDPAU decoder.
+ * Should be called from the AVCodecContext.get_format() callback.
+ *
+ * @param avctx the codec context being used for decoding the stream
+ * @param profile a pointer into which the result will be written on success.
+ * The contents of profile are undefined if this function returns
+ * an error.
+ *
+ * @return 0 on success (non-negative), a negative AVERROR on failure.
+ */
+int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile);
+
+#if FF_API_CAP_VDPAU
/** @brief The videoSurface is used for rendering. */
#define FF_VDPAU_STATE_USED_FOR_RENDER 1
union AVVDPAUPictureInfo info;
#endif
};
+#endif
/* @}*/
* Libavcodec version macros.
*/
-#include "libavutil/avutil.h"
+#include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 55
-#define LIBAVCODEC_VERSION_MINOR 19
-#define LIBAVCODEC_VERSION_MICRO 100
+#define LIBAVCODEC_VERSION_MINOR 52
+#define LIBAVCODEC_VERSION_MICRO 102
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
#ifndef FF_API_REQUEST_CHANNELS
#define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
-#ifndef FF_API_ALLOC_CONTEXT
-#define FF_API_ALLOC_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_AVCODEC_OPEN
-#define FF_API_AVCODEC_OPEN (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
#ifndef FF_API_OLD_DECODE_AUDIO
#define FF_API_OLD_DECODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
-#ifndef FF_API_OLD_TIMECODE
-#define FF_API_OLD_TIMECODE (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-
#ifndef FF_API_OLD_ENCODE_AUDIO
#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
#ifndef FF_API_CODEC_ID
#define FF_API_CODEC_ID (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
+#ifndef FF_API_AUDIO_CONVERT
+#define FF_API_AUDIO_CONVERT (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
#ifndef FF_API_AVCODEC_RESAMPLE
-#define FF_API_AVCODEC_RESAMPLE (LIBAVCODEC_VERSION_MAJOR < 56)
+#define FF_API_AVCODEC_RESAMPLE FF_API_AUDIO_CONVERT
#endif
#ifndef FF_API_DEINTERLACE
#define FF_API_DEINTERLACE (LIBAVCODEC_VERSION_MAJOR < 56)
#ifndef FF_API_LOWRES
#define FF_API_LOWRES (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
+#ifndef FF_API_CAP_VDPAU
+#define FF_API_CAP_VDPAU (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_BUFS_VDPAU
+#define FF_API_BUFS_VDPAU (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_VOXWARE
+#define FF_API_VOXWARE (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_SET_DIMENSIONS
+#define FF_API_SET_DIMENSIONS (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_DEBUG_MV
+#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_AC_VLC
+#define FF_API_AC_VLC (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_OLD_MSMPEG4
+#define FF_API_OLD_MSMPEG4 (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_ASPECT_EXTENDED
+#define FF_API_ASPECT_EXTENDED (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_THREAD_OPAQUE
+#define FF_API_THREAD_OPAQUE (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_CODEC_PKT
+#define FF_API_CODEC_PKT (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_ARCH_ALPHA
+#define FF_API_ARCH_ALPHA (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_XVMC
+#define FF_API_XVMC (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_ERROR_RATE
+#define FF_API_ERROR_RATE (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_QSCALE_TYPE
+#define FF_API_QSCALE_TYPE (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_MB_TYPE
+#define FF_API_MB_TYPE (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_MAX_BFRAMES
+#define FF_API_MAX_BFRAMES (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_FAST_MALLOC
+#define FF_API_FAST_MALLOC (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_NEG_LINESIZES
+#define FF_API_NEG_LINESIZES (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
+#ifndef FF_API_EMU_EDGE
+#define FF_API_EMU_EDGE (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
#endif /* AVCODEC_VERSION_H */
#include <X11/extensions/XvMC.h>
+#include "libavutil/attributes.h"
+#include "version.h"
#include "avcodec.h"
/**
#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct
the number is 1337 speak for the letters IDCT MCo (motion compensation) */
-struct xvmc_pix_fmt {
+attribute_deprecated struct xvmc_pix_fmt {
/** The field contains the special constant value AV_XVMC_ID.
It is used as a test that the application correctly uses the API,
and that there is no corruption caused by pixel routines.
*/
void avdevice_register_all(void);
+typedef struct AVDeviceRect {
+ int x; /**< x coordinate of top left corner */
+ int y; /**< y coordinate of top left corner */
+ int width; /**< width */
+ int height; /**< height */
+} AVDeviceRect;
+
+/**
+ * Message types used by avdevice_app_to_dev_control_message().
+ */
+enum AVAppToDevMessageType {
+ /**
+ * Dummy message.
+ */
+ AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'),
+
+ /**
+ * Window size change message.
+ *
+ * Message is sent to the device every time the application changes the size
+ * of the window device renders to.
+ * Message should also be sent right after window is created.
+ *
+ * data: AVDeviceRect: new window size.
+ */
+ AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'),
+
+ /**
+ * Repaint request message.
+ *
+ * Message is sent to the device when window have to be rapainted.
+ *
+ * data: AVDeviceRect: area required to be repainted.
+ * NULL: whole area is required to be repainted.
+ */
+ AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A')
+};
+
+/**
+ * Message types used by avdevice_dev_to_app_control_message().
+ */
+enum AVDevToAppMessageType {
+ /**
+ * Dummy message.
+ */
+ AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'),
+
+ /**
+ * Create window buffer message.
+ *
+ * Device requests to create a window buffer. Exact meaning is device-
+ * and application-dependent. Message is sent before rendering first
+ * frame and all one-shot initializations should be done here.
+ * Application is allowed to ignore preferred window buffer size.
+ *
+ * @note: Application is obligated to inform about window buffer size
+ * with AV_APP_TO_DEV_WINDOW_SIZE message.
+ *
+ * data: AVDeviceRect: preferred size of the window buffer.
+ * NULL: no preferred size of the window buffer.
+ */
+ AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'),
+
+ /**
+ * Prepare window buffer message.
+ *
+ * Device requests to prepare a window buffer for rendering.
+ * Exact meaning is device- and application-dependent.
+ * Message is sent before rendering of each frame.
+ *
+ * data: NULL.
+ */
+ AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'),
+
+ /**
+ * Display window buffer message.
+ *
+ * Device requests to display a window buffer.
+ * Message is sent when new frame is ready to be displyed.
+ * Usually buffers need to be swapped in handler of this message.
+ *
+ * data: NULL.
+ */
+ AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'),
+
+ /**
+ * Destroy window buffer message.
+ *
+ * Device requests to destroy a window buffer.
+ * Message is sent when device is about to be destroyed and window
+ * buffer is not required anymore.
+ *
+ * data: NULL.
+ */
+ AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S')
+};
+
+/**
+ * Send control message from application to device.
+ *
+ * @param s device context.
+ * @param type message type.
+ * @param data message data. Exact type depends on message type.
+ * @param data_size size of message data.
+ * @return >= 0 on success, negative on error.
+ * AVERROR(ENOSYS) when device doesn't implement handler of the message.
+ */
+int avdevice_app_to_dev_control_message(struct AVFormatContext *s,
+ enum AVAppToDevMessageType type,
+ void *data, size_t data_size);
+
+/**
+ * Send control message from device to application.
+ *
+ * @param s device context.
+ * @param type message type.
+ * @param data message data. Can be NULL.
+ * @param data_size size of message data.
+ * @return >= 0 on success, negative on error.
+ * AVERROR(ENOSYS) when application doesn't implement handler of the message.
+ */
+int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
+ enum AVDevToAppMessageType type,
+ void *data, size_t data_size);
+
+/**
+ * Structure describes basic parameters of the device.
+ */
+typedef struct AVDeviceInfo {
+ char *device_name; /**< device name, format depends on device */
+ char *device_description; /**< human friendly name */
+} AVDeviceInfo;
+
+/**
+ * List of devices.
+ */
+typedef struct AVDeviceInfoList {
+ AVDeviceInfo **devices; /**< list of autodetected devices */
+ int nb_devices; /**< number of autodetected devices */
+ int default_device; /**< index of default device or -1 if no default */
+} AVDeviceInfoList;
+
+/**
+ * List devices.
+ *
+ * Returns available device names and their parameters.
+ *
+ * @note: Some devices may accept system-dependent device names that cannot be
+ * autodetected. The list returned by this function cannot be assumed to
+ * be always completed.
+ *
+ * @param s device context.
+ * @param[out] device_list list of autodetected devices.
+ * @return count of autodetected devices, negative on error.
+ */
+int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list);
+
+/**
+ * Convinient function to free result of avdevice_list_devices().
+ *
+ * @param devices device list to be freed.
+ */
+void avdevice_free_list_devices(AVDeviceInfoList **device_list);
+
#endif /* AVDEVICE_AVDEVICE_H */
* Libavdevice version macros
*/
-#include "libavutil/avutil.h"
+#include "libavutil/version.h"
#define LIBAVDEVICE_VERSION_MAJOR 55
-#define LIBAVDEVICE_VERSION_MINOR 3
+#define LIBAVDEVICE_VERSION_MINOR 10
#define LIBAVDEVICE_VERSION_MICRO 100
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
*
* @param frame an already allocated AVFrame
* @param samplesref an audio buffer reference
- * @return 0 in case of success, a negative AVERROR code in case of
+ * @return >= 0 in case of success, a negative AVERROR code in case of
* failure
* @deprecated Use avfilter_copy_buf_props() instead.
*/
*
* @param frame an already allocated AVFrame
* @param picref a video buffer reference
- * @return 0 in case of success, a negative AVERROR code in case of
+ * @return >= 0 in case of success, a negative AVERROR code in case of
* failure
* @deprecated Use avfilter_copy_buf_props() instead.
*/
*
* @param frame an already allocated AVFrame
* @param ref a video or audio buffer reference
- * @return 0 in case of success, a negative AVERROR code in case of
+ * @return >= 0 in case of success, a negative AVERROR code in case of
* failure
* @deprecated Use avfilter_copy_buf_props() instead.
*/
*/
int needs_fifo;
+ /**
+ * The filter expects writable frames from its input link,
+ * duplicating data buffers if needed.
+ *
+ * input pads only.
+ */
int needs_writable;
};
#endif
* @return the filter definition, if any matching one is registered.
* NULL if none found.
*/
+#if !FF_API_NOCONST_GET_NAME
+const
+#endif
AVFilter *avfilter_get_by_name(const char *name);
/**
typedef struct AVFilterGraphInternal AVFilterGraphInternal;
+/**
+ * A function pointer passed to the @ref AVFilterGraph.execute callback to be
+ * executed multiple times, possibly in parallel.
+ *
+ * @param ctx the filter context the job belongs to
+ * @param arg an opaque parameter passed through from @ref
+ * AVFilterGraph.execute
+ * @param jobnr the index of the job being executed
+ * @param nb_jobs the total number of jobs
+ *
+ * @return 0 on success, a negative AVERROR on error
+ */
+typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs);
+
+/**
+ * A function executing multiple jobs, possibly in parallel.
+ *
+ * @param ctx the filter context to which the jobs belong
+ * @param func the function to be called multiple times
+ * @param arg the argument to be passed to func
+ * @param ret a nb_jobs-sized array to be filled with return values from each
+ * invocation of func
+ * @param nb_jobs the number of jobs to execute
+ *
+ * @return 0 on success, a negative AVERROR on error
+ */
+typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func,
+ void *arg, int *ret, int nb_jobs);
+
typedef struct AVFilterGraph {
const AVClass *av_class;
#if FF_API_FOO_COUNT
*/
AVFilterGraphInternal *internal;
+ /**
+ * Opaque user data. May be set by the caller to an arbitrary value, e.g. to
+ * be used from callbacks like @ref AVFilterGraph.execute.
+ * Libavfilter will not touch this field in any way.
+ */
+ void *opaque;
+
+ /**
+ * This callback may be set by the caller immediately after allocating the
+ * graph and before adding any filters to it, to provide a custom
+ * multithreading implementation.
+ *
+ * If set, filters with slice threading capability will call this callback
+ * to execute multiple jobs in parallel.
+ *
+ * If this field is left unset, libavfilter will use its internal
+ * implementation, which may or may not be multithreaded depending on the
+ * platform and build options.
+ */
+ avfilter_execute_func *execute;
+
char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions
/**
* @return a negative AVERROR error code in case of failure, a non
* negative value otherwise
*/
-int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt,
+int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt,
const char *name, const char *args, void *opaque,
AVFilterGraph *graph_ctx);
*
* @param graphctx the filter graph
* @param log_ctx context used for logging
- * @return 0 in case of success, a negative AVERROR code otherwise
+ * @return >= 0 in case of success, a negative AVERROR code otherwise
*/
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx);
/**
* @file
+ * @ingroup lavfi_buffersink
* memory buffer sink API for audio and video
*/
#include "avfilter.h"
+/**
+ * @defgroup lavfi_buffersink Buffer sink API
+ * @ingroup lavfi
+ * @{
+ */
+
#if FF_API_AVFILTERBUFFER
/**
* Get an audio/video buffer data from buffer_sink and put it in bufref.
* @param frame pointer to an allocated frame that will be filled with data.
* The data must be freed using av_frame_unref() / av_frame_free()
*
- * @return >= 0 in case of success, a negative AVERROR code in case of
- * failure.
+ * @return
+ * - >= 0 if a frame was successfully returned.
+ * - AVERROR(EAGAIN) if no frames are available at this point; more
+ * input frames must be added to the filtergraph to get more output.
+ * - AVERROR_EOF if there will be no more output frames on this sink.
+ * - A different negative AVERROR code in other failure cases.
*/
int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame);
* frame will contain exactly nb_samples audio samples, except at
* the end of stream, when it can contain less than nb_samples.
*
+ * @return The return codes have the same meaning as for
+ * av_buffersink_get_samples().
+ *
* @warning do not mix this function with av_buffersink_get_frame(). Use only one or
* the other with a single sink, not both.
*/
int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples);
+/**
+ * @}
+ */
+
#endif /* AVFILTER_BUFFERSINK_H */
/*
*
- * This file is part of Libav.
+ * This file is part of FFmpeg.
*
- * Libav is free software; you can redistribute it and/or
+ * 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.
*
- * Libav is distributed in the hope that it will be useful,
+ * 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 Libav; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
+ * @ingroup lavfi_buffersrc
* Memory buffer source API.
*/
#include "libavcodec/avcodec.h"
#include "avfilter.h"
+/**
+ * @defgroup lavfi_buffersrc Buffer source API
+ * @ingroup lavfi
+ * @{
+ */
+
enum {
/**
#if FF_API_AVFILTERBUFFER
/**
- * Add a buffer to the filtergraph s.
+ * Add a buffer to a filtergraph.
*
+ * @param ctx an instance of the buffersrc filter
* @param buf buffer containing frame data to be passed down the filtergraph.
* This function will take ownership of buf, the user must not free it.
* A NULL buf signals EOF -- i.e. no more frames will be sent to this filter.
* @deprecated use av_buffersrc_write_frame() or av_buffersrc_add_frame()
*/
attribute_deprecated
-int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf);
+int av_buffersrc_buffer(AVFilterContext *ctx, AVFilterBufferRef *buf);
#endif
/**
* Add a frame to the buffer source.
*
- * @param s an instance of the buffersrc filter.
+ * @param ctx an instance of the buffersrc filter
* @param frame frame to be added. If the frame is reference counted, this
* function will make a new reference to it. Otherwise the frame data will be
* copied.
* This function is equivalent to av_buffersrc_add_frame_flags() with the
* AV_BUFFERSRC_FLAG_KEEP_REF flag.
*/
-int av_buffersrc_write_frame(AVFilterContext *s, const AVFrame *frame);
+int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame);
/**
* Add a frame to the buffer source.
*
- * @param s an instance of the buffersrc filter.
+ * @param ctx an instance of the buffersrc filter
* @param frame frame to be added. If the frame is reference counted, this
* function will take ownership of the reference(s) and reset the frame.
* Otherwise the frame data will be copied. If this function returns an error,
AVFrame *frame, int flags);
+/**
+ * @}
+ */
+
#endif /* AVFILTER_BUFFERSRC_H */
* Libavfilter version macros
*/
-#include "libavutil/avutil.h"
+#include "libavutil/version.h"
-#define LIBAVFILTER_VERSION_MAJOR 3
-#define LIBAVFILTER_VERSION_MINOR 82
+#define LIBAVFILTER_VERSION_MAJOR 4
+#define LIBAVFILTER_VERSION_MINOR 2
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
*/
#ifndef FF_API_AVFILTERPAD_PUBLIC
-#define FF_API_AVFILTERPAD_PUBLIC (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_AVFILTERPAD_PUBLIC (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_FOO_COUNT
-#define FF_API_FOO_COUNT (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_FOO_COUNT (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_FILL_FRAME
-#define FF_API_FILL_FRAME (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_FILL_FRAME (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_BUFFERSRC_BUFFER
-#define FF_API_BUFFERSRC_BUFFER (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_BUFFERSRC_BUFFER (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_AVFILTERBUFFER
-#define FF_API_AVFILTERBUFFER (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_AVFILTERBUFFER (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_OLD_FILTER_OPTS
-#define FF_API_OLD_FILTER_OPTS (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_OLD_FILTER_OPTS (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_ACONVERT_FILTER
-#define FF_API_ACONVERT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_ACONVERT_FILTER (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_AVFILTER_OPEN
-#define FF_API_AVFILTER_OPEN (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_AVFILTER_OPEN (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_AVFILTER_INIT_FILTER
-#define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_OLD_FILTER_REGISTER
-#define FF_API_OLD_FILTER_REGISTER (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_OLD_FILTER_REGISTER (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#ifndef FF_API_OLD_GRAPH_PARSE
-#define FF_API_OLD_GRAPH_PARSE (LIBAVFILTER_VERSION_MAJOR < 4)
+#define FF_API_OLD_GRAPH_PARSE (LIBAVFILTER_VERSION_MAJOR < 5)
+#endif
+#ifndef FF_API_DRAWTEXT_OLD_TIMELINE
+#define FF_API_DRAWTEXT_OLD_TIMELINE (LIBAVFILTER_VERSION_MAJOR < 5)
+#endif
+#ifndef FF_API_NOCONST_GET_NAME
+#define FF_API_NOCONST_GET_NAME (LIBAVFILTER_VERSION_MAJOR < 5)
+#endif
+#ifndef FF_API_INTERLACE_LOWPASS_SET
+#define FF_API_INTERLACE_LOWPASS_SET (LIBAVFILTER_VERSION_MAJOR < 5)
#endif
#endif /* AVFILTER_VERSION_H */
*
* @defgroup lavf_encoding Muxing
* @{
+ * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write
+ * it into files or other output bytestreams in the specified container format.
+ *
+ * The main API functions for muxing are avformat_write_header() for writing the
+ * file header, av_write_frame() / av_interleaved_write_frame() for writing the
+ * packets and av_write_trailer() for finalizing the file.
+ *
+ * At the beginning of the muxing process, the caller must first call
+ * avformat_alloc_context() to create a muxing context. The caller then sets up
+ * the muxer by filling the various fields in this context:
+ *
+ * - The @ref AVFormatContext.oformat "oformat" field must be set to select the
+ * muxer that will be used.
+ * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb
+ * "pb" field must be set to an opened IO context, either returned from
+ * avio_open2() or a custom one.
+ * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must
+ * be created with the avformat_new_stream() function. The caller should fill
+ * the @ref AVStream.codec "stream codec context" information, such as the
+ * codec @ref AVCodecContext.codec_type "type", @ref AVCodecContext.codec_id
+ * "id" and other parameters (e.g. width / height, the pixel or sample format,
+ * etc.) as known. The @ref AVCodecContext.time_base "codec timebase" should
+ * be set to the timebase that the caller desires to use for this stream (note
+ * that the timebase actually used by the muxer can be different, as will be
+ * described later).
+ * - The caller may fill in additional information, such as @ref
+ * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream"
+ * metadata, @ref AVFormatContext.chapters "chapters", @ref
+ * AVFormatContext.programs "programs", etc. as described in the
+ * AVFormatContext documentation. Whether such information will actually be
+ * stored in the output depends on what the container format and the muxer
+ * support.
+ *
+ * When the muxing context is fully set up, the caller must call
+ * avformat_write_header() to initialize the muxer internals and write the file
+ * header. Whether anything actually is written to the IO context at this step
+ * depends on the muxer, but this function must always be called. Any muxer
+ * private options must be passed in the options parameter to this function.
+ *
+ * The data is then sent to the muxer by repeatedly calling av_write_frame() or
+ * av_interleaved_write_frame() (consult those functions' documentation for
+ * discussion on the difference between them; only one of them may be used with
+ * a single muxing context, they should not be mixed). Do note that the timing
+ * information on the packets sent to the muxer must be in the corresponding
+ * AVStream's timebase. That timebase is set by the muxer (in the
+ * avformat_write_header() step) and may be different from the timebase the
+ * caller set on the codec context.
+ *
+ * Once all the data has been written, the caller must call av_write_trailer()
+ * to flush any buffered packets and finalize the output file, then close the IO
+ * context (if any) and finally free the muxing context with
+ * avformat_free_context().
* @}
*
* @defgroup lavf_io I/O Read/Write
struct AVFormatContext;
+struct AVDeviceInfoList;
/**
* @defgroup metadata_api Public Metadata API
* Allocate and read the payload of a packet and initialize its
* fields with default values.
*
+ * @param s associated IO context
* @param pkt packet
* @param size desired payload size
* @return >0 (read size) if OK, AVERROR_xxx otherwise
* when there is no reasonable way to know (an upper bound of)
* the final size.
*
+ * @param s associated IO context
* @param pkt packet
* @param size amount of data to read
* @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data
} AVProbeData;
#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4)
+#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1)
+
#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension
#define AVPROBE_SCORE_MAX 100 ///< maximum score
void (*get_output_timestamp)(struct AVFormatContext *s, int stream,
int64_t *dts, int64_t *wall);
+ /**
+ * Allows sending messages from application to device.
+ */
+ int (*control_message)(struct AVFormatContext *s, int type,
+ void *data, size_t data_size);
+
+ /**
+ * Write an uncoded AVFrame.
+ *
+ * See av_write_uncoded_frame() for details.
+ *
+ * The library will free *frame afterwards, but the muxer can prevent it
+ * by setting the pointer to NULL.
+ */
+ int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index,
+ AVFrame **frame, unsigned flags);
+ /**
+ * Returns device list with it properties.
+ * @see avdevice_list_devices() for more details.
+ */
+ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
} AVOutputFormat;
/**
* @}
* Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.
*/
int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
+
+ /**
+ * Returns device list with it properties.
+ * @see avdevice_list_devices() for more details.
+ */
+ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
} AVInputFormat;
/**
* @}
int64_t last_dts;
int64_t duration_gcd;
int duration_count;
+ int64_t rfps_duration_sum;
double (*duration_error)[2][MAX_STD_TIMEBASES];
int64_t codec_info_duration;
int64_t codec_info_duration_fields;
+
+ /**
+ * 0 -> decoder has not been searched for yet.
+ * >0 -> decoder found
+ * <0 -> decoder with codec_id == -found_decoder has not been found
+ */
int found_decoder;
int64_t last_duration;
int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
+#if FF_API_REFERENCE_DTS
+ /* a hack to keep ABI compatibility for ffmpeg and other applications, which accesses parser even
+ * though it should not */
+ int64_t do_not_use;
+#endif
// Timestamp generation support:
/**
* Timestamp corresponding to the last dts sync point.
* a DTS is received from the underlying container. Otherwise set to
* AV_NOPTS_VALUE by default.
*/
- int64_t reference_dts;
int64_t first_dts;
int64_t cur_dts;
int64_t last_IP_pts;
*/
int pts_wrap_behavior;
+ /**
+ * Internal data to prevent doing update_initial_durations() twice
+ */
+ int update_initial_durations_done;
+
+ /**
+ * Internal data to generate dts from pts
+ */
+ int64_t pts_reorder_error[MAX_REORDER_DELAY+1];
+ uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1];
+
+ /**
+ * Internal data to analyze DTS and detect faulty mpeg streams
+ */
+ int64_t last_dts_for_order_check;
+ uint8_t dts_ordered;
+ uint8_t dts_misordered;
+
} AVStream;
AVRational av_stream_get_r_frame_rate(const AVStream *s);
} AVChapter;
+/**
+ * Callback used by devices to communicate with application.
+ */
+typedef int (*av_format_control_message)(struct AVFormatContext *s, int type,
+ void *data, size_t data_size);
+
+
/**
* The duration of a video can be estimated through various ways, and this enum can be used
* to know how the duration was estimated.
AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate)
};
+typedef struct AVFormatInternal AVFormatInternal;
+
/**
* Format I/O context.
* New fields can be added to the end with minor version bumps.
*/
typedef struct AVFormatContext {
/**
- * A class for logging and AVOptions. Set by avformat_alloc_context().
+ * A class for logging and @ref avoptions. Set by avformat_alloc_context().
* Exports (de)muxer private options if they exist.
*/
const AVClass *av_class;
/**
- * Can only be iformat or oformat, not both at the same time.
+ * The input container format.
*
- * decoding: set by avformat_open_input().
- * encoding: set by the user.
+ * Demuxing only, set by avformat_open_input().
*/
struct AVInputFormat *iformat;
+
+ /**
+ * The output container format.
+ *
+ * Muxing only, must be set by the caller before avformat_write_header().
+ */
struct AVOutputFormat *oformat;
/**
* Format private data. This is an AVOptions-enabled struct
* if and only if iformat/oformat.priv_class is not NULL.
+ *
+ * - muxing: set by avformat_write_header()
+ * - demuxing: set by avformat_open_input()
*/
void *priv_data;
/**
* I/O context.
*
- * decoding: either set by the user before avformat_open_input() (then
- * the user must close it manually) or set by avformat_open_input().
- * encoding: set by the user.
+ * - demuxing: either set by the user before avformat_open_input() (then
+ * the user must close it manually) or set by avformat_open_input().
+ * - muxing: set by the user before avformat_write_header(). The caller must
+ * take care of closing / freeing the IO context.
*
* Do NOT set this field if AVFMT_NOFILE flag is set in
* iformat/oformat.flags. In such a case, the (de)muxer will handle
/* stream info */
int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */
+ /**
+ * Number of elements in AVFormatContext.streams.
+ *
+ * Set by avformat_new_stream(), must not be modified by any other code.
+ */
+ unsigned int nb_streams;
/**
* A list of all streams in the file. New streams are created with
* avformat_new_stream().
*
- * decoding: streams are created by libavformat in avformat_open_input().
- * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also
- * appear in av_read_frame().
- * encoding: streams are created by the user before avformat_write_header().
+ * - demuxing: streams are created by libavformat in avformat_open_input().
+ * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also
+ * appear in av_read_frame().
+ * - muxing: streams are created by the user before avformat_write_header().
+ *
+ * Freed by libavformat in avformat_free_context().
*/
- unsigned int nb_streams;
AVStream **streams;
- char filename[1024]; /**< input or output filename */
+ /**
+ * input or output filename
+ *
+ * - demuxing: set by avformat_open_input()
+ * - muxing: may be set by the caller before avformat_write_header()
+ */
+ char filename[1024];
/**
- * Decoding: position of the first frame of the component, in
+ * Position of the first frame of the component, in
* AV_TIME_BASE fractional seconds. NEVER set this value directly:
* It is deduced from the AVStream values.
+ *
+ * Demuxing only, set by libavformat.
*/
int64_t start_time;
/**
- * Decoding: duration of the stream, in AV_TIME_BASE fractional
+ * Duration of the stream, in AV_TIME_BASE fractional
* seconds. Only set this value if you know none of the individual stream
* durations and also do not set any of them. This is deduced from the
* AVStream values if not set.
+ *
+ * Demuxing only, set by libavformat.
*/
int64_t duration;
/**
- * Decoding: total stream bitrate in bit/s, 0 if not
+ * Total stream bitrate in bit/s, 0 if not
* available. Never set it directly if the file_size and the
* duration are known as FFmpeg can compute it automatically.
*/
#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible
#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
+#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet.
#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload
#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)
#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate.
/**
- * decoding: size of data to probe; encoding: unused.
+ * Maximum size of the data read from input for determining
+ * the input container format.
+ * Demuxing only, set by the caller before avformat_open_input().
*/
unsigned int probesize;
/**
- * decoding: maximum time (in AV_TIME_BASE units) during which the input should
- * be analyzed in avformat_find_stream_info().
+ * Maximum duration (in AV_TIME_BASE units) of the data read
+ * from input in avformat_find_stream_info().
+ * Demuxing only, set by the caller before avformat_find_stream_info().
*/
int max_analyze_duration;
* accurate seeking (depends on demuxer).
* Demuxers for which a full in-memory index is mandatory will ignore
* this.
- * muxing : unused
- * demuxing: set by user
+ * - muxing: unused
+ * - demuxing: set by user
*/
unsigned int max_index_size;
*/
unsigned int max_picture_buffer;
+ /**
+ * Number of chapters in AVChapter array.
+ * When muxing, chapters are normally written in the file header,
+ * so nb_chapters should normally be initialized before write_header
+ * is called. Some muxers (e.g. mov and mkv) can also write chapters
+ * in the trailer. To write chapters in the trailer, nb_chapters
+ * must be zero when write_header is called and non-zero when
+ * write_trailer is called.
+ * - muxing: set by user
+ * - demuxing: set by libavformat
+ */
unsigned int nb_chapters;
AVChapter **chapters;
+ /**
+ * Metadata that applies to the whole file.
+ *
+ * - demuxing: set by libavformat in avformat_open_input()
+ * - muxing: may be set by the caller before avformat_write_header()
+ *
+ * Freed by libavformat in avformat_free_context().
+ */
AVDictionary *metadata;
/**
* Start time of the stream in real world time, in microseconds
- * since the unix epoch (00:00 1st January 1970). That is, pts=0
- * in the stream was captured at this real world time.
- * - encoding: Set by user.
- * - decoding: Unused.
+ * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the
+ * stream was captured at this real world time.
+ * Muxing only, set by the caller before avformat_write_header().
*/
int64_t start_time_realtime;
/**
- * decoding: number of frames used to probe fps
+ * The number of frames used for determining the framerate in
+ * avformat_find_stream_info().
+ * Demuxing only, set by the caller before avformat_find_stream_info().
*/
int fps_probe_size;
/**
* Error recognition; higher values will detect more errors but may
* misdetect some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: Set by user.
+ * Demuxing only, set by the caller before avformat_open_input().
*/
int error_recognition;
/**
* Custom interrupt callbacks for the I/O layer.
*
- * decoding: set by the user before avformat_open_input().
- * encoding: set by the user before avformat_write_header()
+ * demuxing: set by the user before avformat_open_input().
+ * muxing: set by the user before avformat_write_header()
* (mainly useful for AVFMT_NOFILE formats). The callback
* should also be passed to avio_open2() if it's used to
* open the file.
int debug;
#define FF_FDEBUG_TS 0x0001
+ /**
+ * Maximum buffering duration for interleaving.
+ *
+ * To ensure all the streams are interleaved correctly,
+ * av_interleaved_write_frame() will wait until it has at least one packet
+ * for each stream before actually writing any packets to the output file.
+ * When some streams are "sparse" (i.e. there are large gaps between
+ * successive packets), this can result in excessive buffering.
+ *
+ * This field specifies the maximum difference between the timestamps of the
+ * first and the last packet in the muxing queue, above which libavformat
+ * will output a packet regardless of whether it has queued a packet for all
+ * the streams.
+ *
+ * Muxing only, set by the caller before avformat_write_header().
+ */
+ int64_t max_interleave_delta;
+
/**
* Transport stream id.
* This will be moved into demuxer private options. Thus no API/ABI compatibility
/**
* Correct single timestamp overflows
* - encoding: unused
- * - decoding: Set by user via AVOPtions (NO direct access)
+ * - decoding: Set by user via AVOptions (NO direct access)
*/
unsigned int correct_ts_overflow;
/**
* Force seeking to any (also non key) frames.
* - encoding: unused
- * - decoding: Set by user via AVOPtions (NO direct access)
+ * - decoding: Set by user via AVOptions (NO direct access)
*/
int seek2any;
*/
int flush_packets;
+ /**
+ * format probing score.
+ * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes
+ * the format.
+ * - encoding: unused
+ * - decoding: set by avformat, read by user via av_format_get_probe_score() (NO direct access)
+ */
+ int probe_score;
+
/*****************************************************************
* All fields below this line are not part of the public API. They
* may not be used outside of libavformat and can be changed and
*/
AVRational offset_timebase;
+ /**
+ * An opaque field for libavformat internal usage.
+ * Must not be accessed in any way by callers.
+ */
+ AVFormatInternal *internal;
+
/**
* IO repositioned flag.
* This is set by avformat when the underlaying IO context read pointer
* Demuxers can use the flag to detect such changes.
*/
int io_repositioned;
+
+ /**
+ * Forced video codec.
+ * This allows forcing a specific decoder, even when there are multiple with
+ * the same codec_id.
+ * Demuxing: Set by user via av_format_set_video_codec (NO direct access).
+ */
+ AVCodec *video_codec;
+
+ /**
+ * Forced audio codec.
+ * This allows forcing a specific decoder, even when there are multiple with
+ * the same codec_id.
+ * Demuxing: Set by user via av_format_set_audio_codec (NO direct access).
+ */
+ AVCodec *audio_codec;
+
+ /**
+ * Forced subtitle codec.
+ * This allows forcing a specific decoder, even when there are multiple with
+ * the same codec_id.
+ * Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access).
+ */
+ AVCodec *subtitle_codec;
+
+ /**
+ * Number of bytes to be written as padding in a metadata header.
+ * Demuxing: Unused.
+ * Muxing: Set by user via av_format_set_metadata_header_padding.
+ */
+ int metadata_header_padding;
+
+ /**
+ * User data.
+ * This is a place for some private data of the user.
+ * Mostly usable with control_message_cb or any future callbacks in device's context.
+ */
+ void *opaque;
+
+ /**
+ * Callback used by devices to communicate with application.
+ */
+ av_format_control_message control_message_cb;
+
+ /**
+ * Output timestamp offset, in microseconds.
+ * Muxing: set by user via AVOptions (NO direct access)
+ */
+ int64_t output_ts_offset;
} AVFormatContext;
+int av_format_get_probe_score(const AVFormatContext *s);
+AVCodec * av_format_get_video_codec(const AVFormatContext *s);
+void av_format_set_video_codec(AVFormatContext *s, AVCodec *c);
+AVCodec * av_format_get_audio_codec(const AVFormatContext *s);
+void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c);
+AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s);
+void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c);
+int av_format_get_metadata_header_padding(const AVFormatContext *s);
+void av_format_set_metadata_header_padding(AVFormatContext *s, int c);
+void * av_format_get_opaque(const AVFormatContext *s);
+void av_format_set_opaque(AVFormatContext *s, void *opaque);
+av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s);
+void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback);
+
/**
* Returns the method used to set ctx->duration.
*
* User is required to call avcodec_close() and avformat_free_context() to
* clean up the allocation by avformat_new_stream().
*
+ * @param s media file handle
* @param c If non-NULL, the AVCodecContext corresponding to the new stream
* will be initialized to use this codec. This is needed for e.g. codec-specific
* defaults to be set, so codec should be provided if it is known.
*/
-#if FF_API_PKT_DUMP
-attribute_deprecated void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload);
-attribute_deprecated void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt,
- int dump_payload);
-#endif
-
#if FF_API_ALLOC_OUTPUT_CONTEXT
/**
* @deprecated deprecated in favor of avformat_alloc_output_context2()
/**
* Guess the file format.
*
+ * @param pd data to be probed
* @param is_opened Whether the file is already opened; determines whether
* demuxers with or without AVFMT_NOFILE are probed.
*/
/**
* Guess the file format.
*
+ * @param pd data to be probed
* @param is_opened Whether the file is already opened; determines whether
* demuxers with or without AVFMT_NOFILE are probed.
* @param score_max A probe score larger that this is required to accept a
* @param logctx the log context
* @param offset the offset within the bytestream to probe from
* @param max_probe_size the maximum probe buffer size (zero for default)
- * @return 0 in case of success, a negative value corresponding to an
+ * @return the score in case of success, a negative value corresponding to an
+ * the maximal score is AVPROBE_SCORE_MAX
* AVERROR code otherwise
*/
+int av_probe_input_buffer2(AVIOContext *pb, AVInputFormat **fmt,
+ const char *filename, void *logctx,
+ unsigned int offset, unsigned int max_probe_size);
+
+/**
+ * Like av_probe_input_buffer2() but returns 0 on success
+ */
int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
const char *filename, void *logctx,
unsigned int offset, unsigned int max_probe_size);
/**
* Open an input stream and read the header. The codecs are not opened.
- * The stream must be closed with av_close_input_file().
+ * The stream must be closed with avformat_close_input().
*
* @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context).
* May be a pointer to NULL, in which case an AVFormatContext is allocated by this
* information possible for decoding.
*
* If pkt->buf is NULL, then the packet is valid until the next
- * av_read_frame() or until av_close_input_file(). Otherwise the packet is valid
- * indefinitely. In both cases the packet must be freed with
+ * av_read_frame() or until avformat_close_input(). Otherwise the packet
+ * is valid indefinitely. In both cases the packet must be freed with
* av_free_packet when it is no longer needed. For video, the packet contains
* exactly one frame. For audio, it contains an integer number of frames if each
* frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames
/**
* Seek to the keyframe at timestamp.
* 'timestamp' in 'stream_index'.
+ *
+ * @param s media file handle
* @param stream_index If stream_index is (-1), a default
* stream is selected, and timestamp is automatically converted
* from AV_TIME_BASE units to the stream specific time_base.
* keyframes (this may not be supported by all demuxers).
* If flags contain AVSEEK_FLAG_BACKWARD, it is ignored.
*
+ * @param s media file handle
* @param stream_index index of the stream which is used as time base reference
* @param min_ts smallest acceptable timestamp
* @param ts target timestamp
/**
* Write a packet to an output media file.
*
- * The packet shall contain one audio or video frame.
- * The packet must be correctly interleaved according to the container
- * specification, if not then av_interleaved_write_frame must be used.
+ * This function passes the packet directly to the muxer, without any buffering
+ * or reordering. The caller is responsible for correctly interleaving the
+ * packets if the format requires it. Callers that want libavformat to handle
+ * the interleaving should call av_interleaved_write_frame() instead of this
+ * function.
*
* @param s media file handle
- * @param pkt The packet, which contains the stream_index, buf/buf_size,
- * dts/pts, ...
- * This can be NULL (at any time, not just at the end), in
- * order to immediately flush data buffered within the muxer,
- * for muxers that buffer up data internally before writing it
- * to the output.
+ * @param pkt The packet containing the data to be written. Note that unlike
+ * av_interleaved_write_frame(), this function does not take
+ * ownership of the packet passed to it (though some muxers may make
+ * an internal reference to the input packet).
+ * <br>
+ * This parameter can be NULL (at any time, not just at the end), in
+ * order to immediately flush data buffered within the muxer, for
+ * muxers that buffer up data internally before writing it to the
+ * output.
+ * <br>
+ * Packet's @ref AVPacket.stream_index "stream_index" field must be
+ * set to the index of the corresponding stream in @ref
+ * AVFormatContext.streams "s->streams". It is very strongly
+ * recommended that timing information (@ref AVPacket.pts "pts", @ref
+ * AVPacket.dts "dts", @ref AVPacket.duration "duration") is set to
+ * correct values.
* @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush
+ *
+ * @see av_interleaved_write_frame()
*/
int av_write_frame(AVFormatContext *s, AVPacket *pkt);
/**
* Write a packet to an output media file ensuring correct interleaving.
*
- * The packet must contain one audio or video frame.
- * If the packets are already correctly interleaved, the application should
- * call av_write_frame() instead as it is slightly faster. It is also important
- * to keep in mind that completely non-interleaved input will need huge amounts
- * of memory to interleave with this, so it is preferable to interleave at the
- * demuxer level.
+ * This function will buffer the packets internally as needed to make sure the
+ * packets in the output file are properly interleaved in the order of
+ * increasing dts. Callers doing their own interleaving should call
+ * av_write_frame() instead of this function.
*
* @param s media file handle
- * @param pkt The packet containing the data to be written. pkt->buf must be set
- * to a valid AVBufferRef describing the packet data. Libavformat takes
- * ownership of this reference and will unref it when it sees fit. The caller
- * must not access the data through this reference after this function returns.
- * This can be NULL (at any time, not just at the end), to flush the
- * interleaving queues.
- * Packet's @ref AVPacket.stream_index "stream_index" field must be set to the
- * index of the corresponding stream in @ref AVFormatContext.streams
- * "s.streams".
- * It is very strongly recommended that timing information (@ref AVPacket.pts
- * "pts", @ref AVPacket.dts "dts" @ref AVPacket.duration "duration") is set to
- * correct values.
- *
- * @return 0 on success, a negative AVERROR on error.
+ * @param pkt The packet containing the data to be written.
+ * <br>
+ * If the packet is reference-counted, this function will take
+ * ownership of this reference and unreference it later when it sees
+ * fit.
+ * The caller must not access the data through this reference after
+ * this function returns. If the packet is not reference-counted,
+ * libavformat will make a copy.
+ * <br>
+ * This parameter can be NULL (at any time, not just at the end), to
+ * flush the interleaving queues.
+ * <br>
+ * Packet's @ref AVPacket.stream_index "stream_index" field must be
+ * set to the index of the corresponding stream in @ref
+ * AVFormatContext.streams "s->streams". It is very strongly
+ * recommended that timing information (@ref AVPacket.pts "pts", @ref
+ * AVPacket.dts "dts", @ref AVPacket.duration "duration") is set to
+ * correct values.
+ *
+ * @return 0 on success, a negative AVERROR on error. Libavformat will always
+ * take care of freeing the packet, even if this function fails.
+ *
+ * @see av_write_frame(), AVFormatContext.max_interleave_delta
*/
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
+/**
+ * Write a uncoded frame to an output media file.
+ *
+ * The frame must be correctly interleaved according to the container
+ * specification; if not, then av_interleaved_write_frame() must be used.
+ *
+ * See av_interleaved_write_frame() for details.
+ */
+int av_write_uncoded_frame(AVFormatContext *s, int stream_index,
+ AVFrame *frame);
+
+/**
+ * Write a uncoded frame to an output media file.
+ *
+ * If the muxer supports it, this function allows to write an AVFrame
+ * structure directly, without encoding it into a packet.
+ * It is mostly useful for devices and similar special muxers that use raw
+ * video or PCM data and will not serialize it into a byte stream.
+ *
+ * To test whether it is possible to use it with a given muxer and stream,
+ * use av_write_uncoded_frame_query().
+ *
+ * The caller gives up ownership of the frame and must not access it
+ * afterwards.
+ *
+ * @return >=0 for success, a negative code on error
+ */
+int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index,
+ AVFrame *frame);
+
+/**
+ * Test whether a muxer supports uncoded frame.
+ *
+ * @return >=0 if an uncoded frame can be written to that muxer and stream,
+ * <0 if not
+ */
+int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index);
+
/**
* Write the stream trailer to an output media file and free the
* file private data.
*
* @param tags list of supported codec_id-codec_tag pairs, as stored
* in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
+ * @param tag codec tag to match to a codec ID
*/
enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
*
* @param tags list of supported codec_id-codec_tag pairs, as stored
* in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
+ * @param id codec ID to match to a codec tag
*/
unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id);
/**
* Get the index for a specific timestamp.
+ *
+ * @param st stream that the timestamp belongs to
+ * @param timestamp timestamp to retrieve the index for
* @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
* to the timestamp which is <= the requested one, if backward
* is 0, then it will be >=
* Return a positive value if the given filename has one of the given
* extensions, 0 otherwise.
*
+ * @param filename file name to check against the given extensions
* @param extensions a comma-separated list of filename extensions
*/
int av_match_ext(const char *filename, const char *extensions);
/**
* Test if the given container can store a codec.
*
+ * @param ofmt container to check for compatibility
+ * @param codec_id codec to potentially store in container
* @param std_compliance standards compliance level, one of FF_COMPLIANCE_*
*
* @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot.
* @return the table mapping RIFF FourCCs for audio to AVCodecID.
*/
const struct AVCodecTag *avformat_get_riff_audio_tags(void);
+/**
+ * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID.
+ */
+const struct AVCodecTag *avformat_get_mov_video_tags(void);
+/**
+ * @return the table mapping MOV FourCCs for audio to AVCodecID.
+ */
+const struct AVCodecTag *avformat_get_mov_audio_tags(void);
/**
* @}
/* unbuffered I/O */
+/**
+ * Return the name of the protocol that will handle the passed URL.
+ *
+ * NULL is returned if no protocol could be found for the given URL.
+ *
+ * @return Name of the protocol or NULL.
+ */
+const char *avio_find_protocol_name(const char *url);
+
/**
* Return AVIO_FLAG_* access flags corresponding to the access permissions
* of the resource in url, or a negative value corresponding to an
*
* @param s Used to return the pointer to the created AVIOContext.
* In case of failure the pointed to value is set to NULL.
+ * @param url resource to access
* @param flags flags which control how the resource indicated by url
* is to be opened
- * @return 0 in case of success, a negative value corresponding to an
+ * @return >= 0 in case of success, a negative value corresponding to an
* AVERROR code in case of failure
*/
int avio_open(AVIOContext **s, const char *url, int flags);
*
* @param s Used to return the pointer to the created AVIOContext.
* In case of failure the pointed to value is set to NULL.
+ * @param url resource to access
* @param flags flags which control how the resource indicated by url
* is to be opened
* @param int_cb an interrupt callback to be used at the protocols level
* @param options A dictionary filled with protocol-private options. On return
* this parameter will be destroyed and replaced with a dict containing options
* that were not found. May be NULL.
- * @return 0 in case of success, a negative value corresponding to an
+ * @return >= 0 in case of success, a negative value corresponding to an
* AVERROR code in case of failure
*/
int avio_open2(AVIOContext **s, const char *url, int flags,
/**
* Pause and resume playing - only meaningful if using a network streaming
* protocol (e.g. MMS).
+ *
+ * @param h IO context from which to call the read_pause function pointer
* @param pause 1 for pause, 0 for resume
*/
int avio_pause(AVIOContext *h, int pause);
/**
* Seek to a given timestamp relative to some component stream.
* Only meaningful if using a network streaming protocol (e.g. MMS.).
+ *
+ * @param h IO context from which to call the seek function pointers
* @param stream_index The stream index that the timestamp is relative to.
* If stream_index is (-1) the timestamp should be in AV_TIME_BASE
* units from the beginning of the presentation.
* Libavformat version macros
*/
-#include "libavutil/avutil.h"
+#include "libavutil/version.h"
#define LIBAVFORMAT_VERSION_MAJOR 55
-#define LIBAVFORMAT_VERSION_MINOR 12
-#define LIBAVFORMAT_VERSION_MICRO 102
+#define LIBAVFORMAT_VERSION_MINOR 33
+#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
* dropped at a future version bump. The defines themselves are not part of
* the public API and may change, break or disappear at any time.
*/
-
-#ifndef FF_API_OLD_AVIO
-#define FF_API_OLD_AVIO (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_PKT_DUMP
-#define FF_API_PKT_DUMP (LIBAVFORMAT_VERSION_MAJOR < 54)
+#ifndef FF_API_REFERENCE_DTS
+#define FF_API_REFERENCE_DTS (LIBAVFORMAT_VERSION_MAJOR < 56)
#endif
+
#ifndef FF_API_ALLOC_OUTPUT_CONTEXT
#define FF_API_ALLOC_OUTPUT_CONTEXT (LIBAVFORMAT_VERSION_MAJOR < 56)
#endif
#include "attributes.h"
/**
+ * @file
+ * Public header for libavutil Adler32 hasher
+ *
* @defgroup lavu_adler32 Adler32
* @ingroup lavu_crypto
* @{
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_noinline __attribute__((noinline))
+#elif defined(_MSC_VER)
+# define av_noinline __declspec(noinline)
#else
# define av_noinline
#endif
# define av_pure
#endif
-#ifndef av_restrict
-#define av_restrict restrict
-#endif
-
#if AV_GCC_VERSION_AT_LEAST(2,6)
# define av_const __attribute__((const))
#else
# define av_cold
#endif
-#if AV_GCC_VERSION_AT_LEAST(4,1)
+#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__)
# define av_flatten __attribute__((flatten))
#else
# define av_flatten
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define attribute_deprecated __attribute__((deprecated))
+#elif defined(_MSC_VER)
+# define attribute_deprecated __declspec(deprecated)
#else
# define attribute_deprecated
#endif
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
code \
_Pragma("GCC diagnostic pop")
+#elif defined(_MSC_VER)
+# define AV_NOWARN_DEPRECATED(code) \
+ __pragma(warning(push)) \
+ __pragma(warning(disable : 4996)) \
+ code; \
+ __pragma(warning(pop))
#else
# define AV_NOWARN_DEPRECATED(code) code
#endif
* Audio FIFO
* Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
*
- * This file is part of Libav.
+ * This file is part of FFmpeg.
*
- * Libav is free software; you can redistribute it and/or
+ * 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.
*
- * Libav is distributed in the hope that it will be useful,
+ * 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 Libav; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define AVUTIL_AVSTRING_H
#include <stddef.h>
+#include <stdint.h>
#include "attributes.h"
/**
*/
size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4);
+/**
+ * Get the count of continuous non zero chars starting from the beginning.
+ *
+ * @param len maximum number of characters to check in the string, that
+ * is the maximum value which is returned by the function
+ */
+static inline size_t av_strnlen(const char *s, size_t len)
+{
+ size_t i;
+ for (i = 0; i < len && s[i]; i++)
+ ;
+ return i;
+}
+
/**
* Print arguments following specified format into a large enough auto
* allocated buffer. It is similar to GNU asprintf().
int av_escape(char **dst, const char *src, const char *special_chars,
enum AVEscapeMode mode, int flags);
+#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF
+#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF
+#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes
+#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML
+
+#define AV_UTF8_FLAG_ACCEPT_ALL \
+ AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES
+
+/**
+ * Read and decode a single UTF-8 code point (character) from the
+ * buffer in *buf, and update *buf to point to the next byte to
+ * decode.
+ *
+ * In case of an invalid byte sequence, the pointer will be updated to
+ * the next byte after the invalid sequence and the function will
+ * return an error code.
+ *
+ * Depending on the specified flags, the function will also fail in
+ * case the decoded code point does not belong to a valid range.
+ *
+ * @note For speed-relevant code a carefully implemented use of
+ * GET_UTF8() may be preferred.
+ *
+ * @param codep pointer used to return the parsed code in case of success.
+ * The value in *codep is set even in case the range check fails.
+ * @param bufp pointer to the address the first byte of the sequence
+ * to decode, updated by the function to point to the
+ * byte next after the decoded sequence
+ * @param buf_end pointer to the end of the buffer, points to the next
+ * byte past the last in the buffer. This is used to
+ * avoid buffer overreads (in case of an unfinished
+ * UTF-8 sequence towards the end of the buffer).
+ * @param flags a collection of AV_UTF8_FLAG_* flags
+ * @return >= 0 in case a sequence was successfully read, a negative
+ * value in case of invalid sequence
+ */
+int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end,
+ unsigned int flags);
+
/**
* @}
*/
* @li @ref lavu "libavutil" common utility library
* @li @ref lswr "libswresample" audio resampling, format conversion and mixing
* @li @ref lpp "libpostproc" post processing library
- * @li @ref lsws "libswscale" color conversion and scaling library
+ * @li @ref libsws "libswscale" color conversion and scaling library
*
* @section ffmpeg_versioning Versioning and compatibility
*
*
* @}
*
+ * @defgroup lavu_log Logging Facility
+ *
+ * @{
+ *
+ * @}
+ *
* @defgroup lavu_misc Other
*
* @{
* @{
*
* @}
+ *
+ * @defgroup preproc_misc Preprocessor String Macros
+ *
+ * @{
+ *
+ * @}
*/
#include "common.h"
#include "error.h"
#include "version.h"
+#include "macros.h"
#include "mathematics.h"
#include "rational.h"
-#include "intfloat_readwrite.h"
#include "log.h"
#include "pixfmt.h"
#define av_int_list_length(list, term) \
av_int_list_length_for_size(sizeof(*(list)), list, term)
+/**
+ * Open a file using a UTF-8 filename.
+ * The API of this function matches POSIX fopen(), errors are returned through
+ * errno.
+ */
+FILE *av_fopen_utf8(const char *path, const char *mode);
+
/**
* @}
* @}
#ifndef AVUTIL_BPRINT_H
#define AVUTIL_BPRINT_H
+#include <stdarg.h>
+
#include "attributes.h"
#include "avstring.h"
*/
void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3);
+/**
+ * Append a formatted string to a print buffer.
+ */
+void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg);
+
/**
* Append char c n times to a print buffer.
*/
void av_bprint_chars(AVBPrint *buf, char c, unsigned n);
+/**
+ * Append data to a print buffer.
+ *
+ * param buf bprint buffer to use
+ * param data pointer to data
+ * param size size of data
+ */
+void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size);
+
struct tm;
/**
* Append a formatted date and time to a print buffer.
#include "config.h"
-#if ARCH_ARM
+#if ARCH_AARCH64
+# include "aarch64/bswap.h"
+#elif ARCH_ARM
# include "arm/bswap.h"
#elif ARCH_AVR32
# include "avr32/bswap.h"
AV_MATRIX_ENCODING_NONE,
AV_MATRIX_ENCODING_DOLBY,
AV_MATRIX_ENCODING_DPLII,
+ AV_MATRIX_ENCODING_DPLIIX,
+ AV_MATRIX_ENCODING_DPLIIZ,
+ AV_MATRIX_ENCODING_DOLBYEX,
+ AV_MATRIX_ENCODING_DOLBYHEADPHONE,
AV_MATRIX_ENCODING_NB
};
* - a channel layout mask, in hexadecimal starting with "0x" (see the
* AV_CH_* macros).
*
- * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7"
+ * @warning Starting from the next major bump the trailing character
+ * 'c' to specify a number of channels will be required, while a
+ * channel layout mask could also be specified as a decimal number
+ * (if and only if not followed by "c").
+ *
+ * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7"
*/
uint64_t av_get_channel_layout(const char *name);
#ifndef AVUTIL_COMMON_H
#define AVUTIL_COMMON_H
+#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C)
+#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
+#endif
+
#include <errno.h>
#include <inttypes.h>
#include <limits.h>
#include <math.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
*/
static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
{
- if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (a>>63) ^ 0x7FFFFFFF;
+ if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
else return (int32_t)a;
}
*/
static av_always_inline av_const int av_popcount64_c(uint64_t x)
{
- return av_popcount((uint32_t)x) + av_popcount(x >> 32);
+ return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32));
}
#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
* input, this could be *ptr++.
* @param ERROR Expression to be evaluated on invalid input,
* typically a goto statement.
+ *
+ * @warning ERROR should not contain a loop control statement which
+ * could interact with the internal while loop, and should force an
+ * exit from the macro code (e.g. through a goto or a return) in order
+ * to prevent undefined results.
*/
#define GET_UTF8(val, GET_BYTE, ERROR)\
val= GET_BYTE;\
#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
+ ///< than regular MMX/SSE (e.g. Core1)
#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
+ ///< than regular MMX/SSE (e.g. Core1)
#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
// #else
// #define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction
// #endif
+#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used
+#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions
+#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1
+#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
*/
int av_cpu_count(void);
-/* 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 */
* entries and finally av_dict_free() to free the dictionary
* and all its contents.
*
- * @code
- * AVDictionary *d = NULL; // "create" an empty dictionary
- * av_dict_set(&d, "foo", "bar", 0); // add an entry
- *
- * char *k = av_strdup("key"); // if your strings are already allocated,
- * char *v = av_strdup("value"); // you can avoid copying them like this
- * av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
- *
- * AVDictionaryEntry *t = NULL;
- * while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
- * <....> // iterate over all entries in d
- * }
- *
- * av_dict_free(&d);
- * @endcode
+ @code
+ AVDictionary *d = NULL; // "create" an empty dictionary
+ AVDictionaryEntry *t = NULL;
+
+ av_dict_set(&d, "foo", "bar", 0); // add an entry
+
+ char *k = av_strdup("key"); // if your strings are already allocated,
+ char *v = av_strdup("value"); // you can avoid copying them like this
+ av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
+
+ while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
+ <....> // iterate over all entries in d
+ }
+ av_dict_free(&d);
+ @endcode
*
*/
-#define AV_DICT_MATCH_CASE 1
-#define AV_DICT_IGNORE_SUFFIX 2
+#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */
+#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key,
+ ignoring the suffix of the found key string. Only relevant in av_dict_get(). */
#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been
- allocated with av_malloc() and children. */
+ allocated with av_malloc() or another memory allocation function. */
#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been
- allocated with av_malloc() and chilren. */
+ allocated with av_malloc() or another memory allocation function. */
#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries.
#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
delimiter is added, the strings are simply concatenated. */
/**
* Get a dictionary entry with matching key.
*
+ * The returned entry key or value must not be changed, or it will
+ * cause undefined behavior.
+ *
+ * To iterate through all the dictionary entries, you can set the matching key
+ * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag.
+ *
* @param prev Set to the previous matching element to find the next.
* If set to NULL the first matching element is returned.
- * @param flags Allows case as well as suffix-insensitive comparisons.
- * @return Found entry or NULL, changing key or value leads to undefined behavior.
+ * @param key matching key
+ * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved
+ * @return found entry or NULL in case no matching entry was found in the dictionary
*/
AVDictionaryEntry *
av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags);
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
/**
- * Parse the key/value pairs list and add to a dictionary.
+ * Parse the key/value pairs list and add the parsed entries to a dictionary.
+ *
+ * In case of failure, all the successfully set entries are stored in
+ * *pm. You may need to manually free the created dictionary.
*
* @param key_val_sep a 0-terminated list of characters used to separate
* key from value
--- /dev/null
+/*
+ * Copyright (c) 2014 Tim Walker <tdskywalker@gmail.com>
+ *
+ * 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_DOWNMIX_INFO_H
+#define AVUTIL_DOWNMIX_INFO_H
+
+#include "frame.h"
+
+/**
+ * @file
+ * audio downmix medatata
+ */
+
+/**
+ * @addtogroup lavu_audio
+ * @{
+ */
+
+/**
+ * @defgroup downmix_info Audio downmix metadata
+ * @{
+ */
+
+/**
+ * Possible downmix types.
+ */
+enum AVDownmixType {
+ AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */
+ AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */
+ AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */
+ AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */
+ AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */
+};
+
+/**
+ * This structure describes optional metadata relevant to a downmix procedure.
+ *
+ * All fields are set by the decoder to the value indicated in the audio
+ * bitstream (if present), or to a "sane" default otherwise.
+ */
+typedef struct AVDownmixInfo {
+ /**
+ * Type of downmix preferred by the mastering engineer.
+ */
+ enum AVDownmixType preferred_downmix_type;
+
+ /**
+ * Absolute scale factor representing the nominal level of the center
+ * channel during a regular downmix.
+ */
+ double center_mix_level;
+
+ /**
+ * Absolute scale factor representing the nominal level of the center
+ * channel during an Lt/Rt compatible downmix.
+ */
+ double center_mix_level_ltrt;
+
+ /**
+ * Absolute scale factor representing the nominal level of the surround
+ * channels during a regular downmix.
+ */
+ double surround_mix_level;
+
+ /**
+ * Absolute scale factor representing the nominal level of the surround
+ * channels during an Lt/Rt compatible downmix.
+ */
+ double surround_mix_level_ltrt;
+
+ /**
+ * Absolute scale factor representing the level at which the LFE data is
+ * mixed into L/R channels during downmixing.
+ */
+ double lfe_mix_level;
+} AVDownmixInfo;
+
+/**
+ * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
+ *
+ * The side data is created and added to the frame if it's absent.
+ *
+ * @param frame the frame for which the side data is to be obtained.
+ *
+ * @return the AVDownmixInfo structure to be edited by the caller.
+ */
+AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#endif /* AVUTIL_DOWNMIX_INFO_H */
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
* @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
* @param log_ctx parent logging context
- * @return 0 in case of success, a negative value corresponding to an
+ * @return >= 0 in case of success, a negative value corresponding to an
* AVERROR code otherwise
*/
int av_expr_parse_and_eval(double *res, const char *s,
* @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
* @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
* @param log_ctx parent logging context
- * @return 0 in case of success, a negative value corresponding to an
+ * @return >= 0 in case of success, a negative value corresponding to an
* AVERROR code otherwise
*/
int av_expr_parse(AVExpr **expr, const char *s,
--- /dev/null
+#ifndef AVUTIL_FFVERSION_H
+#define AVUTIL_FFVERSION_H
+#define FFMPEG_VERSION "2.2.3"
+#endif /* AVUTIL_FFVERSION_H */
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+/**
+ * @file
+ * @ingroup lavu_frame
+ * reference-counted frame API
+ */
+
#ifndef AVUTIL_FRAME_H
#define AVUTIL_FRAME_H
#include <stdint.h>
-#include "libavcodec/version.h"
-
#include "avutil.h"
#include "buffer.h"
#include "dict.h"
#include "rational.h"
#include "samplefmt.h"
+#include "version.h"
+
enum AVColorSpace{
- AVCOL_SPC_RGB = 0,
- AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
- AVCOL_SPC_UNSPECIFIED = 2,
- AVCOL_SPC_FCC = 4,
- AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
- AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
- AVCOL_SPC_SMPTE240M = 7,
- AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
- AVCOL_SPC_NB , ///< Not part of ABI
+ AVCOL_SPC_RGB = 0,
+ AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
+ AVCOL_SPC_UNSPECIFIED = 2,
+ AVCOL_SPC_FCC = 4,
+ AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
+ AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
+ AVCOL_SPC_SMPTE240M = 7,
+ AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
+ AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system
+ AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system
+ AVCOL_SPC_NB , ///< Not part of ABI
};
#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG
AVCOL_RANGE_NB , ///< Not part of ABI
};
+
+/**
+ * @defgroup lavu_frame AVFrame
+ * @ingroup lavu_data
+ *
+ * @{
+ * AVFrame is an abstraction for reference-counted raw multimedia data.
+ */
+
enum AVFrameSideDataType {
/**
* The data is the AVPanScan struct defined in libavcodec.
*/
AV_FRAME_DATA_PANSCAN,
+ /**
+ * ATSC A53 Part 4 Closed Captions.
+ * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data.
+ * The number of bytes of CC data is AVFrameSideData.size.
+ */
+ AV_FRAME_DATA_A53_CC,
+ /**
+ * Stereoscopic 3d metadata.
+ * The data is the AVStereo3D struct defined in libavutil/stereo3d.h.
+ */
+ AV_FRAME_DATA_STEREO3D,
+ /**
+ * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h.
+ */
+ AV_FRAME_DATA_MATRIXENCODING,
+ /**
+ * Metadata relevant to a downmix procedure.
+ * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h.
+ */
+ AV_FRAME_DATA_DOWNMIX_INFO,
};
typedef struct AVFrameSideData {
* preference, this is 16 or 32 for modern desktop CPUs.
* Some code requires such alignment other code can be slower without
* correct alignment, for yet other it makes no difference.
+ *
+ * @note The linesize may be larger than the size of usable data -- there
+ * may be extra padding present for performance reasons.
*/
int linesize[AV_NUM_DATA_POINTERS];
AVFrameSideData **side_data;
int nb_side_data;
+/**
+ * @defgroup lavu_frame_flags AV_FRAME_FLAGS
+ * Flags describing additional frame properties.
+ *
+ * @{
+ */
+
+/**
+ * The frame data may be corrupted, e.g. due to decoding errors.
+ */
+#define AV_FRAME_FLAG_CORRUPT (1 << 0)
+/**
+ * @}
+ */
+
+ /**
+ * Frame flags, a combination of @ref lavu_frame_flags
+ */
+ int flags;
+
/**
* frame timestamp estimated using various heuristics, in stream time base
* Code outside libavcodec should access this field using:
enum AVColorRange av_frame_get_color_range(const AVFrame *frame);
void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val);
+/**
+ * Get the name of a colorspace.
+ * @return a static string identifying the colorspace; can be NULL.
+ */
+const char *av_get_colorspace_name(enum AVColorSpace val);
+
/**
* Allocate an AVFrame and set its fields to default values. The resulting
* struct must be freed using av_frame_free().
void av_frame_free(AVFrame **frame);
/**
- * Setup a new reference to the data described by an given frame.
+ * Set up a new reference to the data described by the source frame.
*
* Copy frame properties from src to dst and create a new reference for each
* AVBufferRef from src.
*
* @return 0 on success, a negative AVERROR on error
*/
-int av_frame_ref(AVFrame *dst, AVFrame *src);
+int av_frame_ref(AVFrame *dst, const AVFrame *src);
/**
* Create a new frame that references the same data as src.
*
* @return newly created AVFrame on success, NULL on error.
*/
-AVFrame *av_frame_clone(AVFrame *src);
+AVFrame *av_frame_clone(const AVFrame *src);
/**
* Unreference all the buffers referenced by frame and reset the frame fields.
*/
int av_frame_make_writable(AVFrame *frame);
+/**
+ * Copy the frame data from src to dst.
+ *
+ * This function does not allocate anything, dst must be already initialized and
+ * allocated with the same parameters as src.
+ *
+ * This function only copies the frame data (i.e. the contents of the data /
+ * extended data arrays), not any other properties.
+ *
+ * @return >= 0 on success, a negative AVERROR on error.
+ */
+int av_frame_copy(AVFrame *dst, const AVFrame *src);
+
/**
* Copy only "metadata" fields from src to dst.
*
* @return a pointer to the side data of a given type on success, NULL if there
* is no side data with such type in this frame.
*/
-AVFrameSideData *av_frame_get_side_data(AVFrame *frame,
+AVFrameSideData *av_frame_get_side_data(const AVFrame *frame,
enum AVFrameSideDataType type);
+/**
+ * @}
+ */
+
#endif /* AVUTIL_FRAME_H */
/*
* Copyright (c) 2011 Mans Rullgard
*
- * This file is part of Libav.
+ * This file is part of FFmpeg.
*
- * Libav is free software; you can redistribute it and/or
+ * 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.
*
- * Libav is distributed in the hope that it will be useful,
+ * 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 Libav; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define AVUTIL_INTFLOAT_READWRITE_H
#include <stdint.h>
+
#include "attributes.h"
+#include "version.h"
+#if FF_API_INTFLOAT
/* IEEE 80 bits extended float */
typedef struct AVExtFloat {
uint8_t exponent[2];
attribute_deprecated int64_t av_dbl2int(double d) av_const;
attribute_deprecated int32_t av_flt2int(float d) av_const;
attribute_deprecated AVExtFloat av_dbl2ext(double d) av_const;
+#endif /* FF_API_INTFLOAT */
#endif /* AVUTIL_INTFLOAT_READWRITE_H */
int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags);
} AVClass;
-/* av_log API */
+/**
+ * @addtogroup lavu_log
+ *
+ * @{
+ *
+ * @defgroup lavu_log_constants Logging Constants
+ *
+ * @{
+ */
+/**
+ * Print no output.
+ */
#define AV_LOG_QUIET -8
/**
*/
#define AV_LOG_WARNING 24
+/**
+ * Standard information.
+ */
#define AV_LOG_INFO 32
+
+/**
+ * Detailed information.
+ */
#define AV_LOG_VERBOSE 40
/**
#define AV_LOG_MAX_OFFSET (AV_LOG_DEBUG - AV_LOG_QUIET)
+/**
+ * @}
+ */
+
/**
* Send the specified message to the log if the level is less than or equal
* to the current av_log_level. By default, all logging messages are sent to
- * stderr. This behavior can be altered by setting a different av_vlog callback
+ * stderr. This behavior can be altered by setting a different logging callback
* function.
+ * @see av_log_set_callback
*
* @param avcl A pointer to an arbitrary struct of which the first field is a
- * pointer to an AVClass struct.
- * @param level The importance level of the message, lower values signifying
- * higher importance.
+ * pointer to an AVClass struct.
+ * @param level The importance level of the message expressed using a @ref
+ * lavu_log_constants "Logging Constant".
* @param fmt The format string (printf-compatible) that specifies how
- * subsequent arguments are converted to output.
- * @see av_vlog
+ * subsequent arguments are converted to output.
*/
void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
-void av_vlog(void *avcl, int level, const char *fmt, va_list);
+
+/**
+ * Send the specified message to the log if the level is less than or equal
+ * to the current av_log_level. By default, all logging messages are sent to
+ * stderr. This behavior can be altered by setting a different logging callback
+ * function.
+ * @see av_log_set_callback
+ *
+ * @param avcl A pointer to an arbitrary struct of which the first field is a
+ * pointer to an AVClass struct.
+ * @param level The importance level of the message expressed using a @ref
+ * lavu_log_constants "Logging Constant".
+ * @param fmt The format string (printf-compatible) that specifies how
+ * subsequent arguments are converted to output.
+ * @param vl The arguments referenced by the format string.
+ */
+void av_vlog(void *avcl, int level, const char *fmt, va_list vl);
+
+/**
+ * Get the current log level
+ *
+ * @see lavu_log_constants
+ *
+ * @return Current log level
+ */
int av_log_get_level(void);
-void av_log_set_level(int);
-void av_log_set_callback(void (*)(void*, int, const char*, va_list));
-void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
+
+/**
+ * Set the log level
+ *
+ * @see lavu_log_constants
+ *
+ * @param level Logging level
+ */
+void av_log_set_level(int level);
+
+/**
+ * Set the logging callback
+ *
+ * @note The callback must be thread safe, even if the application does not use
+ * threads itself as some codecs are multithreaded.
+ *
+ * @see av_log_default_callback
+ *
+ * @param callback A logging function with a compatible signature.
+ */
+void av_log_set_callback(void (*callback)(void*, int, const char*, va_list));
+
+/**
+ * Default logging callback
+ *
+ * It prints the message to stderr, optionally colorizing it.
+ *
+ * @param avcl A pointer to an arbitrary struct of which the first field is a
+ * pointer to an AVClass struct.
+ * @param level The importance level of the message expressed using a @ref
+ * lavu_log_constants "Logging Constant".
+ * @param fmt The format string (printf-compatible) that specifies how
+ * subsequent arguments are converted to output.
+ * @param vl The arguments referenced by the format string.
+ */
+void av_log_default_callback(void *avcl, int level, const char *fmt,
+ va_list vl);
+
+/**
+ * Return the context name
+ *
+ * @param ctx The AVClass context
+ *
+ * @return The AVClass class_name
+ */
const char* av_default_item_name(void* ctx);
AVClassCategory av_default_get_category(void *ptr);
#define AV_LOG_SKIP_REPEATED 1
void av_log_set_flags(int arg);
+/**
+ * @}
+ */
+
#endif /* AVUTIL_LOG_H */
--- /dev/null
+/*
+ * 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
+ */
+
+/**
+ * @file
+ * @ingroup lavu
+ * Utility Preprocessor macros
+ */
+
+#ifndef AVUTIL_MACROS_H
+#define AVUTIL_MACROS_H
+
+/**
+ * @addtogroup preproc_misc Preprocessor String Macros
+ *
+ * String manipulation macros
+ *
+ * @{
+ */
+
+#define AV_STRINGIFY(s) AV_TOSTRING(s)
+#define AV_TOSTRING(s) #s
+
+#define AV_GLUE(a, b) a ## b
+#define AV_JOIN(a, b) AV_GLUE(a, b)
+
+/**
+ * @}
+ */
+
+#define AV_PRAGMA(s) _Pragma(#s)
+
+#endif /* AVUTIL_MACROS_H */
#ifndef M_PI
#define M_PI 3.14159265358979323846 /* pi */
#endif
+#ifndef M_PI_2
+#define M_PI_2 1.57079632679489661923 /* pi/2 */
+#endif
#ifndef M_SQRT1_2
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
#endif
* Rescale a timestamp while preserving known durations.
*
* @param in_ts Input timestamp
- * @param in_tb Input timesbase
+ * @param in_tb Input timebase
* @param fs_tb Duration and *last timebase
* @param duration duration till the next call
- * @param out_tb Output timesbase
+ * @param out_tb Output timebase
*/
int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb);
/**
+ * Add a value to a timestamp.
+ *
+ * This function gurantees that when the same value is repeatly added that
+ * no accumulation of rounding errors occurs.
+ *
+ * @param ts Input timestamp
+ * @param ts_tb Input timestamp timebase
+ * @param inc value to add to ts
+ * @param inc_tb inc timebase
+ */
+int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc);
+
+
+ /**
* @}
*/
void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
/**
- * Helper function to allocate a block of size * nmemb bytes with
- * using av_malloc()
+ * Allocate a block of size * nmemb bytes with av_malloc().
* @param nmemb Number of elements
* @param size Size of the single element
* @return Pointer to the allocated block, NULL if the block cannot
*/
av_alloc_size(1, 2) static inline void *av_malloc_array(size_t nmemb, size_t size)
{
- if (size <= 0 || nmemb >= INT_MAX / size)
+ if (!size || nmemb >= INT_MAX / size)
return NULL;
return av_malloc(nmemb * size);
}
* If ptr is NULL and size > 0, allocate a new block. If
* size is zero, free the memory block pointed to by ptr.
* @param ptr Pointer to a memory block already allocated with
- * av_malloc(z)() or av_realloc() or NULL.
- * @param size Size in bytes for the memory block to be allocated or
+ * av_realloc() or NULL.
+ * @param size Size in bytes of the memory block to be allocated or
* reallocated.
- * @return Pointer to a newly reallocated block or NULL if the block
+ * @return Pointer to a newly-reallocated block or NULL if the block
* cannot be reallocated or the function is used to free the memory block.
+ * @warning Pointers originating from the av_malloc() family of functions must
+ * not be passed to av_realloc(). The former can be implemented using
+ * memalign() (or other functions), and there is no guarantee that
+ * pointers from such functions can be passed to realloc() at all.
+ * The situation is undefined according to POSIX and may crash with
+ * some libc implementations.
* @see av_fast_realloc()
*/
void *av_realloc(void *ptr, size_t size) av_alloc_size(2);
*/
void *av_realloc_f(void *ptr, size_t nelem, size_t elsize);
+/**
+ * Allocate or reallocate a block of memory.
+ * If *ptr is NULL and size > 0, allocate a new block. If
+ * size is zero, free the memory block pointed to by ptr.
+ * @param ptr Pointer to a pointer to a memory block already allocated
+ * with av_realloc(), or pointer to a pointer to NULL.
+ * The pointer is updated on success, or freed on failure.
+ * @param size Size in bytes for the memory block to be allocated or
+ * reallocated
+ * @return Zero on success, an AVERROR error code on failure.
+ * @warning Pointers originating from the av_malloc() family of functions must
+ * not be passed to av_reallocp(). The former can be implemented using
+ * memalign() (or other functions), and there is no guarantee that
+ * pointers from such functions can be passed to realloc() at all.
+ * The situation is undefined according to POSIX and may crash with
+ * some libc implementations.
+ */
+int av_reallocp(void *ptr, size_t size);
+
/**
* Allocate or reallocate an array.
* If ptr is NULL and nmemb > 0, allocate a new block. If
* nmemb is zero, free the memory block pointed to by ptr.
* @param ptr Pointer to a memory block already allocated with
- * av_malloc(z)() or av_realloc() or NULL.
+ * av_realloc() or NULL.
* @param nmemb Number of elements
* @param size Size of the single element
- * @return Pointer to a newly reallocated block or NULL if the block
+ * @return Pointer to a newly-reallocated block or NULL if the block
* cannot be reallocated or the function is used to free the memory block.
+ * @warning Pointers originating from the av_malloc() family of functions must
+ * not be passed to av_realloc(). The former can be implemented using
+ * memalign() (or other functions), and there is no guarantee that
+ * pointers from such functions can be passed to realloc() at all.
+ * The situation is undefined according to POSIX and may crash with
+ * some libc implementations.
*/
av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size);
/**
- * Allocate or reallocate an array.
+ * Allocate or reallocate an array through a pointer to a pointer.
* If *ptr is NULL and nmemb > 0, allocate a new block. If
* nmemb is zero, free the memory block pointed to by ptr.
* @param ptr Pointer to a pointer to a memory block already allocated
- * with av_malloc(z)() or av_realloc(), or pointer to a pointer to NULL.
+ * with av_realloc(), or pointer to a pointer to NULL.
* The pointer is updated on success, or freed on failure.
* @param nmemb Number of elements
* @param size Size of the single element
* @return Zero on success, an AVERROR error code on failure.
+ * @warning Pointers originating from the av_malloc() family of functions must
+ * not be passed to av_realloc(). The former can be implemented using
+ * memalign() (or other functions), and there is no guarantee that
+ * pointers from such functions can be passed to realloc() at all.
+ * The situation is undefined according to POSIX and may crash with
+ * some libc implementations.
*/
av_alloc_size(2, 3) int av_reallocp_array(void *ptr, size_t nmemb, size_t size);
void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib;
/**
- * Helper function to allocate a block of size * nmemb bytes with
- * using av_mallocz()
+ * Allocate a block of size * nmemb bytes with av_mallocz().
* @param nmemb Number of elements
* @param size Size of the single element
* @return Pointer to the allocated block, NULL if the block cannot
*/
av_alloc_size(1, 2) static inline void *av_mallocz_array(size_t nmemb, size_t size)
{
- if (size <= 0 || nmemb >= INT_MAX / size)
+ if (!size || nmemb >= INT_MAX / size)
return NULL;
return av_mallocz(nmemb * size);
}
/**
* Duplicate the string s.
* @param s string to be duplicated
- * @return Pointer to a newly allocated string containing a
+ * @return Pointer to a newly-allocated string containing a
* copy of s or NULL if the string cannot be allocated.
*/
char *av_strdup(const char *s) av_malloc_attrib;
void av_max_alloc(size_t max);
/**
- * @brief deliberately overlapping memcpy implementation
+ * deliberately overlapping memcpy implementation
* @param dst destination buffer
* @param back how many bytes back we start (the initial size of the overlapping window), must be > 0
* @param cnt number of bytes to copy, must be >= 0
*/
void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
+/**
+ * Reallocate the given block if it is not large enough, otherwise do nothing.
+ *
+ * @see av_realloc
+ */
+void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
+
+/**
+ * Allocate a buffer, reusing the given one if large enough.
+ *
+ * Contrary to av_fast_realloc the current buffer contents might not be
+ * preserved and on error the old buffer is freed, thus no special
+ * handling to avoid memleaks is necessary.
+ *
+ * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
+ * @param size size of the buffer *ptr points to
+ * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
+ * *size 0 if an error occurred.
+ */
+void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
+
/**
* @}
*/
PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range
PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range
PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range
+#if FF_API_XVMC
PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing
PIX_FMT_XVMC_MPEG2_IDCT,
+#endif /* FF_API_XVMC */
PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range
PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
+#if FF_API_VDPAU
PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
+#endif
PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
+#if FF_API_VDPAU
PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
+#endif
PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
* int bin_len;
* } test_struct;
*
- * static const AVOption options[] = {
+ * static const AVOption test_options[] = {
* { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt),
* AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX },
* { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt),
* static const AVClass test_class = {
* .class_name = "test class",
* .item_name = av_default_item_name,
- * .option = options,
+ * .option = test_options,
* .version = LIBAVUTIL_VERSION_INT,
* };
* @endcode
*
* @subsection avoptions_implement_named_constants Named constants
* It is possible to create named constants for options. Simply set the unit
- * field of the option the constants should apply to to a string and
+ * field of the option the constants should apply to a string and
* create the constants themselves as options of type AV_OPT_TYPE_CONST
* with their unit field set to the same string.
* Their default_val field should contain the value of the named
AV_OPT_TYPE_VIDEO_RATE = MKBETAG('V','R','A','T'), ///< offset must point to AVRational
AV_OPT_TYPE_DURATION = MKBETAG('D','U','R',' '),
AV_OPT_TYPE_COLOR = MKBETAG('C','O','L','R'),
+ AV_OPT_TYPE_CHANNEL_LAYOUT = MKBETAG('C','H','L','A'),
#if FF_API_OLD_AVOPTIONS
FF_OPT_TYPE_FLAGS = 0,
FF_OPT_TYPE_INT,
int flags;
#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
+#if FF_API_OPT_TYPE_METADATA
#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ...
+#endif
#define AV_OPT_FLAG_AUDIO_PARAM 8
#define AV_OPT_FLAG_VIDEO_PARAM 16
#define AV_OPT_FLAG_SUBTITLE_PARAM 32
+/**
+ * The option is inteded for exporting values to the caller.
+ */
+#define AV_OPT_FLAG_EXPORT 64
+/**
+ * The option may not be set through the AVOptions API, only read.
+ * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set.
+ */
+#define AV_OPT_FLAG_READONLY 128
#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering
//FIXME think about enc-audio, ... style flags
/**
* Look for an option in obj. Look only for the options which
* have the flags set as specified in mask and flags (that is,
- * for which it is the case that opt->flags & mask == flags).
+ * for which it is the case that (opt->flags & mask) == flags).
*
* @param[in] obj a pointer to a struct whose first element is a
* pointer to an AVClass
int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
+int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags);
/**
* Set a binary option to an integer list.
* @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN
* is passed here, then the option may be found in a child of obj.
* @param[out] out_val value of the option will be written here
- * @return 0 on success, a negative error code otherwise
+ * @return >=0 on success, a negative error code otherwise
*/
/**
- * @note the returned string will av_malloc()ed and must be av_free()ed by the caller
+ * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller
*/
int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val);
int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val);
int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt);
int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt);
int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val);
+int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout);
/**
* @}
*/
int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
void *log_ctx);
+/**
+ * Get the name of a color from the internal table of hard-coded named
+ * colors.
+ *
+ * This function is meant to enumerate the color names recognized by
+ * av_parse_color().
+ *
+ * @param color_idx index of the requested color, starting from 0
+ * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB
+ * @return the color name string or NULL if color_idx is not in the array
+ */
+const char *av_get_known_color_name(int color_idx, const uint8_t **rgb);
+
/**
* Parse timestr and return in *time a corresponding number of
* microseconds.
* @endcode
* @param duration flag which tells how to interpret timestr, if not
* zero timestr is interpreted as a duration, otherwise as a date
- * @return 0 in case of success, a negative value corresponding to an
+ * @return >= 0 in case of success, a negative value corresponding to an
* AVERROR code otherwise
*/
int av_parse_time(int64_t *timeval, const char *timestr, int duration);
#if FF_API_PIX_FMT
/**
- * @deprecate use the AV_PIX_FMT_FLAG_* flags
+ * @deprecated use the AV_PIX_FMT_FLAG_* flags
*/
#define PIX_FMT_BE AV_PIX_FMT_FLAG_BE
#define PIX_FMT_PAL AV_PIX_FMT_FLAG_PAL
/**
* Print in buf the string corresponding to the pixel format with
- * number pix_fmt, or an header if pix_fmt is negative.
+ * number pix_fmt, or a header if pix_fmt is negative.
*
* @param buf the buffer where to write the string
* @param buf_size the size of buf
*/
#include "libavutil/avconfig.h"
-#include "libavutil/version.h"
+#include "version.h"
#define AVPALETTE_SIZE 1024
#define AVPALETTE_COUNT 256
* allocating the picture.
*
* @note
- * Make sure that all newly added big-endian formats have pix_fmt & 1 == 1
- * and that all newly added little-endian formats have pix_fmt & 1 == 0.
+ * Make sure that all newly added big-endian formats have (pix_fmt & 1) == 1
+ * and that all newly added little-endian formats have (pix_fmt & 1) == 0.
* This allows simpler detection of big vs little-endian.
*/
enum AVPixelFormat {
AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range
AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range
AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range
+#if FF_API_XVMC
AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing
AV_PIX_FMT_XVMC_MPEG2_IDCT,
+#define AV_PIX_FMT_XVMC AV_PIX_FMT_XVMC_MPEG2_IDCT
+#endif /* FF_API_XVMC */
AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range
AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
+#if FF_API_VDPAU
AV_PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
AV_PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
AV_PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
AV_PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
AV_PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
+#endif
AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
+#if FF_API_VDPAU
AV_PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
+#endif
AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
- //the following 10 formats have the disadvantage of needing 1 format for each bit depth, thus
- //If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately
- //is better
+ /**
+ * The following 12 formats have the disadvantage of needing 1 format for each bit depth.
+ * Notice that each 9/10 bits sample is stored in 16 bits with extra padding.
+ * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better.
+ */
AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0
AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0
+ AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
+ AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
+ AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
#ifndef AV_PIX_FMT_ABI_GIT_MASTER
AV_PIX_FMT_RGBA64BE=0x123, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian
AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian
AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of PIX_FMT_YUV411P and setting color_range
+
+ AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */
+ AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */
+ AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */
+ AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */
+ AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */
+ AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */
+ AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */
+ AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */
+ AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */
+ AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */
+ AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */
+ AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */
+#if !FF_API_XVMC
+ AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing
+#endif /* !FF_API_XVMC */
+
AV_PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
#if FF_API_PIX_FMT
#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE)
#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE)
#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE)
+#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE)
+
+#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE)
+#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE)
+#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE)
+#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE)
+
#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE)
#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE)
#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE)
#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE)
+#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE)
#if FF_API_PIX_FMT
#define PixelFormat AVPixelFormat
int den; ///< denominator
} AVRational;
+/**
+ * Create a rational.
+ * Useful for compilers that do not support compound literals.
+ * @note The return value is not reduced.
+ */
+static inline AVRational av_make_q(int num, int den)
+{
+ AVRational r = { num, den };
+ return r;
+}
+
/**
* Compare two rationals.
* @param a first rational
static inline int av_cmp_q(AVRational a, AVRational b){
const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
- if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1;
+ if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1;
else if(b.den && a.den) return 0;
else if(a.num && b.num) return (a.num>>31) - (b.num>>31);
else return INT_MIN;
--- /dev/null
+/*
+ * Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * 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
+ */
+
+#include <stdint.h>
+
+#include "frame.h"
+
+/**
+ * List of possible 3D Types
+ */
+enum AVStereo3DType {
+ /**
+ * Video is not stereoscopic (and metadata has to be there).
+ */
+ AV_STEREO3D_2D,
+
+ /**
+ * Views are next to each other.
+ *
+ * LLLLRRRR
+ * LLLLRRRR
+ * LLLLRRRR
+ * ...
+ */
+ AV_STEREO3D_SIDEBYSIDE,
+
+ /**
+ * Views are on top of each other.
+ *
+ * LLLLLLLL
+ * LLLLLLLL
+ * RRRRRRRR
+ * RRRRRRRR
+ */
+ AV_STEREO3D_TOPBOTTOM,
+
+ /**
+ * Views are alternated temporally.
+ *
+ * frame0 frame1 frame2 ...
+ * LLLLLLLL RRRRRRRR LLLLLLLL
+ * LLLLLLLL RRRRRRRR LLLLLLLL
+ * LLLLLLLL RRRRRRRR LLLLLLLL
+ * ... ... ...
+ */
+ AV_STEREO3D_FRAMESEQUENCE,
+
+ /**
+ * Views are packed in a checkerboard-like structure per pixel.
+ *
+ * LRLRLRLR
+ * RLRLRLRL
+ * LRLRLRLR
+ * ...
+ */
+ AV_STEREO3D_CHECKERBOARD,
+
+ /**
+ * Views are next to each other, but when upscaling
+ * apply a checkerboard pattern.
+ *
+ * LLLLRRRR L L L L R R R R
+ * LLLLRRRR => L L L L R R R R
+ * LLLLRRRR L L L L R R R R
+ * LLLLRRRR L L L L R R R R
+ */
+ AV_STEREO3D_SIDEBYSIDE_QUINCUNX,
+
+ /**
+ * Views are packed per line, as if interlaced.
+ *
+ * LLLLLLLL
+ * RRRRRRRR
+ * LLLLLLLL
+ * ...
+ */
+ AV_STEREO3D_LINES,
+
+ /**
+ * Views are packed per column.
+ *
+ * LRLRLRLR
+ * LRLRLRLR
+ * LRLRLRLR
+ * ...
+ */
+ AV_STEREO3D_COLUMNS,
+};
+
+
+/**
+ * Inverted views, Right/Bottom represents the left view.
+ */
+#define AV_STEREO3D_FLAG_INVERT (1 << 0)
+
+/**
+ * Stereo 3D type: this structure describes how two videos are packed
+ * within a single video surface, with additional information as needed.
+ *
+ * @note The struct must be allocated with av_stereo3d_alloc() and
+ * its size is not a part of the public ABI.
+ */
+typedef struct AVStereo3D {
+ /**
+ * How views are packed within the video.
+ */
+ enum AVStereo3DType type;
+
+ /**
+ * Additional information about the frame packing.
+ */
+ int flags;
+} AVStereo3D;
+
+/**
+ * Allocate an AVStereo3D structure and set its fields to default values.
+ * The resulting struct can be freed using av_freep().
+ *
+ * @return An AVStereo3D filled with default values or NULL on failure.
+ */
+AVStereo3D *av_stereo3d_alloc(void);
+
+/**
+ * Allocate a complete AVFrameSideData and add it to the frame.
+ *
+ * @param frame The frame which side data is added to.
+ *
+ * @return The AVStereo3D structure to be filled by caller.
+ */
+AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame);
#include "common.h"
+#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64)
+#error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS
+#endif
+
#define AV_TS_MAX_STRING_SIZE 32
/**
#ifndef AVUTIL_VERSION_H
#define AVUTIL_VERSION_H
-/**
- * @defgroup preproc_misc Preprocessor String Macros
- *
- * String manipulation macros
- *
- * @{
- */
-
-#define AV_STRINGIFY(s) AV_TOSTRING(s)
-#define AV_TOSTRING(s) #s
-
-#define AV_GLUE(a, b) a ## b
-#define AV_JOIN(a, b) AV_GLUE(a, b)
-
-#define AV_PRAGMA(s) _Pragma(#s)
-
-/**
- * @}
- */
+#include "macros.h"
/**
* @defgroup version_utils Library Version Macros
* @}
*/
-
/**
* @file
* @ingroup lavu
*/
#define LIBAVUTIL_VERSION_MAJOR 52
-#define LIBAVUTIL_VERSION_MINOR 40
+#define LIBAVUTIL_VERSION_MINOR 66
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
*/
#ifndef FF_API_GET_BITS_PER_SAMPLE_FMT
-#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_FIND_OPT
-#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_OLD_AVOPTIONS
-#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_PIX_FMT
-#define FF_API_PIX_FMT (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_PIX_FMT (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_CONTEXT_SIZE
-#define FF_API_CONTEXT_SIZE (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_CONTEXT_SIZE (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_PIX_FMT_DESC
-#define FF_API_PIX_FMT_DESC (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_PIX_FMT_DESC (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_AV_REVERSE
-#define FF_API_AV_REVERSE (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_AV_REVERSE (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_AUDIOCONVERT
-#define FF_API_AUDIOCONVERT (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_AUDIOCONVERT (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_CPU_FLAG_MMX2
-#define FF_API_CPU_FLAG_MMX2 (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_CPU_FLAG_MMX2 (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_SAMPLES_UTILS_RETURN_ZERO
-#define FF_API_SAMPLES_UTILS_RETURN_ZERO (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_SAMPLES_UTILS_RETURN_ZERO (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_LLS_PRIVATE
-#define FF_API_LLS_PRIVATE (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_LLS_PRIVATE (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_LLS1
+#define FF_API_LLS1 (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
#ifndef FF_API_AVFRAME_LAVC
-#define FF_API_AVFRAME_LAVC (LIBAVUTIL_VERSION_MAJOR < 53)
+#define FF_API_AVFRAME_LAVC (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_VDPAU
+#define FF_API_VDPAU (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_GET_CHANNEL_LAYOUT_COMPAT
+#define FF_API_GET_CHANNEL_LAYOUT_COMPAT (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_OLD_OPENCL
+#define FF_API_OLD_OPENCL (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_XVMC
+#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_INTFLOAT
+#define FF_API_INTFLOAT (LIBAVUTIL_VERSION_MAJOR < 54)
+#endif
+#ifndef FF_API_OPT_TYPE_METADATA
+#define FF_API_OPT_TYPE_METADATA (LIBAVUTIL_VERSION_MAJOR < 54)
#endif
/**
#include <stdint.h>
/**
+ * @file
+ * @brief Public header for libavutil XTEA algorithm
* @defgroup lavu_xtea XTEA
* @ingroup lavu_crypto
* @{
* matrix):
* @code
* SwrContext *swr = swr_alloc();
- * av_opt_set_int(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0);
- * av_opt_set_int(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0);
+ * av_opt_set_channel_layout(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0);
+ * av_opt_set_channel_layout(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0);
* av_opt_set_int(swr, "in_sample_rate", 48000, 0);
* av_opt_set_int(swr, "out_sample_rate", 44100, 0);
* av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0);
* input, in_samples);
* handle_output(output, out_samples);
* av_freep(&output);
- * }
- * @endcode
+ * }
+ * @endcode
*
* When the conversion is finished, the conversion
* context and everything associated with it must be freed with swr_free().
*/
int swr_init(struct SwrContext *s);
+/**
+ * Check whether an swr context has been initialized or not.
+ *
+ * @return positive if it has been initialized, 0 if not initialized
+ */
+int swr_is_initialized(struct SwrContext *s);
+
/**
* Allocate SwrContext if needed and set/reset common parameters.
*
#include "libavutil/avutil.h"
#define LIBSWRESAMPLE_VERSION_MAJOR 0
-#define LIBSWRESAMPLE_VERSION_MINOR 17
-#define LIBSWRESAMPLE_VERSION_MICRO 103
+#define LIBSWRESAMPLE_VERSION_MINOR 18
+#define LIBSWRESAMPLE_VERSION_MICRO 100
#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
LIBSWRESAMPLE_VERSION_MINOR, \
/**
* @file
- * @ingroup lsws
+ * @ingroup libsws
* external API header
*/
-/**
- * @defgroup lsws Libswscale
- * @{
- */
-
#include <stdint.h>
#include "libavutil/avutil.h"
#include "version.h"
/**
+ * @defgroup libsws Color conversion and scaling
+ * @{
+ *
* Return the LIBSWSCALE_VERSION_INT constant.
*/
unsigned swscale_version(void);
* swscale version macros
*/
-#include "libavutil/avutil.h"
+#include "libavutil/version.h"
#define LIBSWSCALE_VERSION_MAJOR 2
-#define LIBSWSCALE_VERSION_MINOR 4
-#define LIBSWSCALE_VERSION_MICRO 100
+#define LIBSWSCALE_VERSION_MINOR 5
+#define LIBSWSCALE_VERSION_MICRO 102
#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \
LIBSWSCALE_VERSION_MINOR, \
--- /dev/null
+EXPORTS
+ audio_resample
+ audio_resample_close
+ av_audio_convert
+ av_audio_convert_alloc
+ av_audio_convert_free
+ av_audio_resample_init
+ av_bitstream_filter_close
+ av_bitstream_filter_filter
+ av_bitstream_filter_init
+ av_bitstream_filter_next
+ av_codec_get_chroma_intra_matrix
+ av_codec_get_codec_descriptor
+ av_codec_get_lowres
+ av_codec_get_max_lowres
+ av_codec_get_pkt_timebase
+ av_codec_get_seek_preroll
+ av_codec_is_decoder
+ av_codec_is_encoder
+ av_codec_next
+ av_codec_set_chroma_intra_matrix
+ av_codec_set_codec_descriptor
+ av_codec_set_lowres
+ av_codec_set_pkt_timebase
+ av_codec_set_seek_preroll
+ av_copy_packet
+ av_copy_packet_side_data
+ av_dct_calc
+ av_dct_end
+ av_dct_init
+ av_destruct_packet
+ av_dup_packet
+ av_fast_malloc@LIBAVCODEC_55
+ av_fast_padded_malloc
+ av_fast_padded_mallocz
+ av_fast_realloc@LIBAVCODEC_55
+ av_fft_calc
+ av_fft_end
+ av_fft_init
+ av_fft_permute
+ av_free_packet
+ av_get_audio_frame_duration
+ av_get_bits_per_sample
+ av_get_codec_tag_string
+ av_get_exact_bits_per_sample
+ av_get_pcm_codec
+ av_get_profile_name
+ av_grow_packet
+ av_hwaccel_next
+ av_imdct_calc
+ av_imdct_half
+ av_init_packet
+ av_lockmgr_register
+ av_log_ask_for_sample
+ av_log_missing_feature
+ av_mdct_calc
+ av_mdct_end
+ av_mdct_init
+ av_new_packet
+ av_packet_copy_props
+ av_packet_free_side_data
+ av_packet_from_data
+ av_packet_get_side_data
+ av_packet_merge_side_data
+ av_packet_move_ref
+ av_packet_new_side_data
+ av_packet_pack_dictionary
+ av_packet_ref
+ av_packet_shrink_side_data
+ av_packet_split_side_data
+ av_packet_unpack_dictionary
+ av_packet_unref
+ av_parser_change
+ av_parser_close
+ av_parser_init
+ av_parser_next
+ av_parser_parse2
+ av_picture_copy
+ av_picture_crop
+ av_picture_pad
+ av_rdft_calc
+ av_rdft_end
+ av_rdft_init
+ av_register_bitstream_filter
+ av_register_codec_parser
+ av_register_hwaccel
+ av_resample
+ av_resample_close
+ av_resample_compensate
+ av_resample_init
+ av_shrink_packet
+ av_xiphlacing
+ available_bits
+ avcodec_align_dimensions
+ avcodec_align_dimensions2
+ avcodec_alloc_context3
+ avcodec_alloc_frame
+ avcodec_chroma_pos_to_enum
+ avcodec_close
+ avcodec_configuration
+ avcodec_copy_context
+ avcodec_decode_audio3
+ avcodec_decode_audio4
+ avcodec_decode_subtitle2
+ avcodec_decode_video2
+ avcodec_default_execute
+ avcodec_default_execute2
+ avcodec_default_get_buffer
+ avcodec_default_get_buffer2
+ avcodec_default_get_format
+ avcodec_default_reget_buffer
+ avcodec_default_release_buffer
+ avcodec_descriptor_get
+ avcodec_descriptor_get_by_name
+ avcodec_descriptor_next
+ avcodec_encode_audio
+ avcodec_encode_audio2
+ avcodec_encode_subtitle
+ avcodec_encode_video
+ avcodec_encode_video2
+ avcodec_enum_to_chroma_pos
+ avcodec_fill_audio_frame
+ avcodec_find_best_pix_fmt2
+ avcodec_find_best_pix_fmt_of_2
+ avcodec_find_best_pix_fmt_of_list
+ avcodec_find_decoder
+ avcodec_find_decoder_by_name
+ avcodec_find_encoder
+ avcodec_find_encoder_by_name
+ avcodec_flush_buffers
+ avcodec_free_frame
+ avcodec_get_chroma_sub_sample
+ avcodec_get_class
+ avcodec_get_context_defaults3
+ avcodec_get_edge_width
+ avcodec_get_frame_class
+ avcodec_get_frame_defaults
+ avcodec_get_name
+ avcodec_get_pix_fmt_loss
+ avcodec_get_subtitle_rect_class
+ avcodec_get_type
+ avcodec_is_open
+ avcodec_license
+ avcodec_open2
+ avcodec_pix_fmt_to_codec_tag
+ avcodec_register
+ avcodec_register_all
+ avcodec_set_dimensions
+ avcodec_string
+ avcodec_version
+ aver_isf_history
+ avpicture_alloc
+ avpicture_deinterlace
+ avpicture_fill
+ avpicture_free
+ avpicture_get_size
+ avpicture_layout
+ avpriv_aac_parse_header
+ avpriv_ac3_channel_layout_tab DATA
+ avpriv_ac3_parse_header
+ avpriv_ac3_parse_header2
+ avpriv_adx_decode_header
+ avpriv_align_put_bits
+ avpriv_bprint_to_extradata
+ avpriv_color_frame
+ avpriv_copy_bits
+ avpriv_copy_pce_data
+ avpriv_dca_sample_rates DATA
+ avpriv_dirac_parse_sequence_header
+ avpriv_dnxhd_get_frame_size
+ avpriv_do_elbg
+ avpriv_dsputil_init
+ avpriv_dv_codec_profile
+ avpriv_dv_frame_profile
+ avpriv_dv_frame_profile2
+ avpriv_find_pix_fmt
+ avpriv_find_start_code
+ avpriv_flac_is_extradata_valid
+ avpriv_flac_parse_block_header
+ avpriv_flac_parse_streaminfo
+ avpriv_h264_has_num_reorder_frames
+ avpriv_init_elbg
+ avpriv_lock_avformat
+ avpriv_mjpeg_bits_ac_chrominance DATA
+ avpriv_mjpeg_bits_ac_luminance DATA
+ avpriv_mjpeg_bits_dc_chrominance DATA
+ avpriv_mjpeg_bits_dc_luminance DATA
+ avpriv_mjpeg_val_ac_chrominance DATA
+ avpriv_mjpeg_val_ac_luminance DATA
+ avpriv_mjpeg_val_dc DATA
+ avpriv_mpa_bitrate_tab DATA
+ avpriv_mpa_decode_header
+ avpriv_mpa_decode_header2
+ avpriv_mpa_freq_tab DATA
+ avpriv_mpeg4audio_get_config
+ avpriv_mpeg4audio_sample_rates DATA
+ avpriv_mpegaudio_decode_header
+ avpriv_put_string
+ avpriv_split_xiph_headers
+ avpriv_tak_parse_streaminfo
+ avpriv_toupper4
+ avpriv_unlock_avformat
+ avpriv_vorbis_parse_extradata
+ avpriv_vorbis_parse_frame
+ avpriv_vorbis_parse_frame_flags
+ avpriv_vorbis_parse_reset
+ avsubtitle_free
+ dsputil_init
+ ff_aanscales DATA
+ ff_dct32_fixed
+ ff_dct32_float
+ ff_dct32_float_avx DATA
+ ff_dct32_float_sse DATA
+ ff_dct32_float_sse2 DATA
+ ff_dct_common_init
+ ff_dct_encode_init
+ ff_dct_encode_init_x86
+ ff_dct_end
+ ff_dct_init
+ ff_dct_init_x86
+ ff_dct_quantize_c
+ ff_dnxhd_cid_table DATA
+ ff_dnxhd_get_cid_table
+ ff_dsputil_init
+ ff_faandct
+ ff_faandct248
+ ff_faanidct
+ ff_faanidct_add
+ ff_faanidct_put
+ ff_fdct248_islow_10
+ ff_fdct248_islow_8
+ ff_fdct_ifast
+ ff_fdct_ifast248
+ ff_fdct_mmx
+ ff_fdct_mmxext
+ ff_fdct_sse2
+ ff_fft_calc_avx DATA
+ ff_fft_calc_sse DATA
+ ff_fft_end
+ ff_fft_end_fixed
+ ff_fft_end_fixed_32
+ ff_fft_init
+ ff_fft_init_fixed
+ ff_fft_init_fixed_32
+ ff_fft_init_x86
+ ff_fft_lut_init
+ ff_fft_permute_sse DATA
+ ff_idct_xvid_mmx
+ ff_idct_xvid_mmx_add
+ ff_idct_xvid_mmx_put
+ ff_idct_xvid_mmxext
+ ff_idct_xvid_mmxext_add
+ ff_idct_xvid_mmxext_put
+ ff_idct_xvid_sse2
+ ff_idct_xvid_sse2_add
+ ff_idct_xvid_sse2_put
+ ff_jpeg_fdct_islow_10
+ ff_jpeg_fdct_islow_8
+ ff_mdct_calc_c
+ ff_mdct_calc_c_fixed
+ ff_mdct_calc_c_fixed_32
+ ff_mdct_calcw_c
+ ff_mdct_end
+ ff_mdct_end_fixed
+ ff_mdct_end_fixed_32
+ ff_mdct_init
+ ff_mdct_init_fixed
+ ff_mdct_init_fixed_32
+ ff_mdct_win_fixed DATA
+ ff_mdct_win_float DATA
+ ff_prores_idct_put_10_sse2 DATA
+ ff_raw_pix_fmt_tags DATA
+ ff_rdft_end
+ ff_rdft_init
+ ff_simple_idct248_put
+ ff_simple_idct44_add
+ ff_simple_idct48_add
+ ff_simple_idct84_add
+ ff_simple_idct_10
+ ff_simple_idct_12
+ ff_simple_idct_8
+ ff_simple_idct_add_10
+ ff_simple_idct_add_12
+ ff_simple_idct_add_8
+ ff_simple_idct_add_mmx
+ ff_simple_idct_mmx
+ ff_simple_idct_put_10
+ ff_simple_idct_put_12
+ ff_simple_idct_put_8
+ ff_simple_idct_put_mmx
--- /dev/null
+EXPORTS
+ avdevice_app_to_dev_control_message
+ avdevice_configuration
+ avdevice_dev_to_app_control_message
+ avdevice_free_list_devices
+ avdevice_license
+ avdevice_list_devices
+ avdevice_register_all
+ avdevice_version
--- /dev/null
+EXPORTS
+ av_2_vs_pixel_format
+ av_abuffersink_params_alloc
+ av_buffersink_get_buffer_ref
+ av_buffersink_get_frame
+ av_buffersink_get_frame_flags
+ av_buffersink_get_frame_rate
+ av_buffersink_get_samples
+ av_buffersink_params_alloc
+ av_buffersink_poll_frame
+ av_buffersink_read
+ av_buffersink_read_samples
+ av_buffersink_set_frame_size
+ av_buffersrc_add_frame
+ av_buffersrc_add_frame_flags
+ av_buffersrc_add_ref
+ av_buffersrc_buffer
+ av_buffersrc_get_nb_failed_requests
+ av_buffersrc_write_frame
+ av_filter_next
+ avfilter_add_matrix
+ avfilter_all_channel_layouts DATA
+ avfilter_config_links
+ avfilter_configuration
+ avfilter_copy_buf_props
+ avfilter_copy_buffer_ref_props
+ avfilter_copy_frame_props
+ avfilter_fill_frame_from_audio_buffer_ref
+ avfilter_fill_frame_from_buffer_ref
+ avfilter_fill_frame_from_video_buffer_ref
+ avfilter_free
+ avfilter_get_audio_buffer_ref_from_arrays
+ avfilter_get_audio_buffer_ref_from_arrays_channels
+ avfilter_get_audio_buffer_ref_from_frame
+ avfilter_get_buffer_ref_from_frame
+ avfilter_get_by_name
+ avfilter_get_class
+ avfilter_get_matrix
+ avfilter_get_video_buffer_ref_from_arrays
+ avfilter_get_video_buffer_ref_from_frame
+ avfilter_graph_add_filter
+ avfilter_graph_alloc
+ avfilter_graph_alloc_filter
+ avfilter_graph_config
+ avfilter_graph_create_filter
+ avfilter_graph_dump
+ avfilter_graph_free
+ avfilter_graph_get_filter
+ avfilter_graph_parse
+ avfilter_graph_parse2
+ avfilter_graph_parse_ptr
+ avfilter_graph_queue_command
+ avfilter_graph_request_oldest
+ avfilter_graph_send_command
+ avfilter_graph_set_auto_convert
+ avfilter_init_dict
+ avfilter_init_filter
+ avfilter_init_str
+ avfilter_inout_alloc
+ avfilter_inout_free
+ avfilter_insert_filter
+ avfilter_license
+ avfilter_link
+ avfilter_link_free
+ avfilter_link_get_channels
+ avfilter_link_set_closed
+ avfilter_make_format64_list
+ avfilter_mul_matrix
+ avfilter_next
+ avfilter_open
+ avfilter_pad_count
+ avfilter_pad_get_name
+ avfilter_pad_get_type
+ avfilter_process_command
+ avfilter_ref_buffer
+ avfilter_ref_get_channels
+ avfilter_register
+ avfilter_register_all
+ avfilter_sub_matrix
+ avfilter_transform
+ avfilter_uninit
+ avfilter_unref_buffer
+ avfilter_unref_bufferp
+ avfilter_version
+ ff_default_query_formats
--- /dev/null
+EXPORTS
+ av_add_index_entry
+ av_append_packet
+ av_close_input_file
+ av_codec_get_id
+ av_codec_get_tag
+ av_codec_get_tag2
+ av_convert_lang_to
+ av_demuxer_open
+ av_dump_format
+ av_filename_number_test
+ av_find_best_stream
+ av_find_default_stream_index
+ av_find_input_format
+ av_find_program_from_stream
+ av_find_stream_info
+ av_fmt_ctx_get_duration_estimation_method
+ av_format_get_audio_codec
+ av_format_get_control_message_cb
+ av_format_get_metadata_header_padding
+ av_format_get_opaque
+ av_format_get_probe_score
+ av_format_get_subtitle_codec
+ av_format_get_video_codec
+ av_format_set_audio_codec
+ av_format_set_control_message_cb
+ av_format_set_metadata_header_padding
+ av_format_set_opaque
+ av_format_set_subtitle_codec
+ av_format_set_video_codec
+ av_get_frame_filename
+ av_get_output_timestamp
+ av_get_packet
+ av_guess_codec
+ av_guess_format
+ av_guess_frame_rate
+ av_guess_sample_aspect_ratio
+ av_hex_dump
+ av_hex_dump_log
+ av_iformat_next
+ av_index_search_timestamp
+ av_interleaved_write_frame
+ av_interleaved_write_uncoded_frame
+ av_match_ext
+ av_new_program
+ av_new_stream
+ av_oformat_next
+ av_pkt_dump2
+ av_pkt_dump_log2
+ av_probe_input_buffer
+ av_probe_input_buffer2
+ av_probe_input_format
+ av_probe_input_format2
+ av_probe_input_format3
+ av_read_frame
+ av_read_packet
+ av_read_pause
+ av_read_play
+ av_register_all
+ av_register_input_format
+ av_register_output_format
+ av_sdp_create
+ av_seek_frame
+ av_set_pts_info
+ av_stream_get_r_frame_rate
+ av_stream_set_r_frame_rate
+ av_url_split
+ av_write_frame
+ av_write_trailer
+ av_write_uncoded_frame
+ av_write_uncoded_frame_query
+ avformat_alloc_context
+ avformat_alloc_output_context
+ avformat_alloc_output_context2
+ avformat_close_input
+ avformat_configuration
+ avformat_find_stream_info
+ avformat_free_context
+ avformat_get_class
+ avformat_get_mov_audio_tags
+ avformat_get_mov_video_tags
+ avformat_get_riff_audio_tags
+ avformat_get_riff_video_tags
+ avformat_license
+ avformat_match_stream_specifier
+ avformat_network_deinit
+ avformat_network_init
+ avformat_new_stream
+ avformat_open_input
+ avformat_query_codec
+ avformat_queue_attached_pictures
+ avformat_seek_file
+ avformat_version
+ avformat_write_header
+ avio_alloc_context
+ avio_check
+ avio_close
+ avio_close_dyn_buf
+ avio_closep
+ avio_enum_protocols
+ avio_find_protocol_name
+ avio_flush
+ avio_get_str
+ avio_get_str16be
+ avio_get_str16le
+ avio_open
+ avio_open2
+ avio_open_dyn_buf
+ avio_pause
+ avio_printf
+ avio_put_str
+ avio_put_str16le
+ avio_r8
+ avio_rb16
+ avio_rb24
+ avio_rb32
+ avio_rb64
+ avio_read
+ avio_rl16
+ avio_rl24
+ avio_rl32
+ avio_rl64
+ avio_seek
+ avio_seek_time
+ avio_size
+ avio_skip
+ avio_w8
+ avio_wb16
+ avio_wb24
+ avio_wb32
+ avio_wb64
+ avio_wl16
+ avio_wl24
+ avio_wl32
+ avio_wl64
+ avio_write
+ avpriv_dv_get_packet
+ avpriv_dv_init_demux
+ avpriv_dv_produce_packet
+ avpriv_new_chapter
+ avpriv_set_pts_info
+ ff_codec_get_id
+ ff_inet_aton
+ ff_mpegts_parse_close
+ ff_mpegts_parse_open
+ ff_mpegts_parse_packet
+ ff_rtp_get_local_rtcp_port
+ ff_rtp_get_local_rtp_port
+ ff_rtsp_parse_line
+ ff_socket_nonblock
+ ffio_open_dyn_packet_buf
+ ffio_set_buf_size
+ ffurl_close
+ ffurl_open
+ ffurl_protocol_next
+ ffurl_read_complete
+ ffurl_seek
+ ffurl_size
+ ffurl_write
+ get_codec_guid
+ get_crc_table
+ get_extension
+ url_feof
--- /dev/null
+EXPORTS
+ av_add_q
+ av_add_stable
+ av_adler32_update
+ av_aes_alloc
+ av_aes_crypt
+ av_aes_init
+ av_aes_size DATA
+ av_asprintf
+ av_audio_fifo_alloc
+ av_audio_fifo_drain
+ av_audio_fifo_free
+ av_audio_fifo_read
+ av_audio_fifo_realloc
+ av_audio_fifo_reset
+ av_audio_fifo_size
+ av_audio_fifo_space
+ av_audio_fifo_write
+ av_base64_decode
+ av_base64_encode
+ av_basename
+ av_blowfish_crypt
+ av_blowfish_crypt_ecb
+ av_blowfish_init
+ av_bmg_get
+ av_bprint_append_data
+ av_bprint_channel_layout
+ av_bprint_chars
+ av_bprint_clear
+ av_bprint_escape
+ av_bprint_finalize
+ av_bprint_get_buffer
+ av_bprint_init
+ av_bprint_init_for_buffer
+ av_bprint_strftime
+ av_bprintf
+ av_buffer_alloc
+ av_buffer_allocz
+ av_buffer_create
+ av_buffer_default_free
+ av_buffer_get_opaque
+ av_buffer_get_ref_count
+ av_buffer_is_writable
+ av_buffer_make_writable
+ av_buffer_pool_get
+ av_buffer_pool_init
+ av_buffer_pool_uninit
+ av_buffer_realloc
+ av_buffer_ref
+ av_buffer_unref
+ av_calloc
+ av_channel_layout_extract_channel
+ av_compare_mod
+ av_compare_ts
+ av_cpu_count
+ av_crc
+ av_crc_get_table
+ av_crc_init
+ av_ctz
+ av_d2q
+ av_d2str
+ av_dbl2ext
+ av_dbl2int
+ av_default_get_category
+ av_default_item_name
+ av_des_crypt
+ av_des_init
+ av_des_mac
+ av_dict_copy
+ av_dict_count
+ av_dict_free
+ av_dict_get
+ av_dict_parse_string
+ av_dict_set
+ av_dirname
+ av_div_q
+ av_downmix_info_update_side_data
+ av_dynarray2_add
+ av_dynarray_add
+ av_escape
+ av_evaluate_lls
+ av_expr_eval
+ av_expr_free
+ av_expr_parse
+ av_expr_parse_and_eval
+ av_ext2dbl
+ av_fast_malloc
+ av_fast_realloc
+ av_fifo_alloc
+ av_fifo_drain
+ av_fifo_free
+ av_fifo_generic_read
+ av_fifo_generic_write
+ av_fifo_grow
+ av_fifo_realloc2
+ av_fifo_reset
+ av_fifo_size
+ av_fifo_space
+ av_file_map
+ av_file_unmap
+ av_find_info_tag
+ av_find_nearest_q_idx
+ av_find_opt
+ av_flt2int
+ av_fopen_utf8
+ av_force_cpu_flags
+ av_frame_alloc
+ av_frame_clone
+ av_frame_copy
+ av_frame_copy_props
+ av_frame_free
+ av_frame_get_best_effort_timestamp
+ av_frame_get_buffer
+ av_frame_get_channel_layout
+ av_frame_get_channels
+ av_frame_get_color_range
+ av_frame_get_colorspace
+ av_frame_get_decode_error_flags
+ av_frame_get_metadata
+ av_frame_get_pkt_duration
+ av_frame_get_pkt_pos
+ av_frame_get_pkt_size
+ av_frame_get_plane_buffer
+ av_frame_get_qp_table
+ av_frame_get_sample_rate
+ av_frame_get_side_data
+ av_frame_is_writable
+ av_frame_make_writable
+ av_frame_move_ref
+ av_frame_new_side_data
+ av_frame_ref
+ av_frame_set_best_effort_timestamp
+ av_frame_set_channel_layout
+ av_frame_set_channels
+ av_frame_set_color_range
+ av_frame_set_colorspace
+ av_frame_set_decode_error_flags
+ av_frame_set_metadata
+ av_frame_set_pkt_duration
+ av_frame_set_pkt_pos
+ av_frame_set_pkt_size
+ av_frame_set_qp_table
+ av_frame_set_sample_rate
+ av_frame_unref
+ av_free
+ av_freep
+ av_gcd
+ av_get_alt_sample_fmt
+ av_get_bits_per_pixel
+ av_get_bits_per_sample_fmt
+ av_get_bytes_per_sample
+ av_get_channel_description
+ av_get_channel_layout
+ av_get_channel_layout_channel_index
+ av_get_channel_layout_nb_channels
+ av_get_channel_layout_string
+ av_get_channel_name
+ av_get_colorspace_name
+ av_get_cpu_flags
+ av_get_default_channel_layout
+ av_get_double
+ av_get_int
+ av_get_known_color_name
+ av_get_media_type_string
+ av_get_packed_sample_fmt
+ av_get_padded_bits_per_pixel
+ av_get_picture_type_char
+ av_get_pix_fmt
+ av_get_pix_fmt_name
+ av_get_pix_fmt_string
+ av_get_planar_sample_fmt
+ av_get_q
+ av_get_random_seed
+ av_get_sample_fmt
+ av_get_sample_fmt_name
+ av_get_sample_fmt_string
+ av_get_standard_channel_layout
+ av_get_string
+ av_get_token
+ av_gettime
+ av_hash_alloc
+ av_hash_final
+ av_hash_freep
+ av_hash_get_name
+ av_hash_get_size
+ av_hash_init
+ av_hash_names
+ av_hash_update
+ av_hmac_alloc
+ av_hmac_calc
+ av_hmac_final
+ av_hmac_free
+ av_hmac_init
+ av_hmac_update
+ av_image_alloc
+ av_image_check_size
+ av_image_copy
+ av_image_copy_plane
+ av_image_copy_to_buffer
+ av_image_fill_arrays
+ av_image_fill_linesizes
+ av_image_fill_max_pixsteps
+ av_image_fill_pointers
+ av_image_get_buffer_size
+ av_image_get_linesize
+ av_init_lls
+ av_int2dbl
+ av_int2flt
+ av_int_list_length_for_size
+ av_isdigit
+ av_isgraph
+ av_isspace
+ av_isxdigit
+ av_lfg_init
+ av_log
+ av_log2
+ av_log2_16bit
+ av_log_default_callback
+ av_log_format_line
+ av_log_get_level
+ av_log_set_callback
+ av_log_set_flags
+ av_log_set_level
+ av_lzo1x_decode
+ av_malloc
+ av_mallocz
+ av_max_alloc
+ av_md5_alloc
+ av_md5_final
+ av_md5_init
+ av_md5_size DATA
+ av_md5_sum
+ av_md5_update
+ av_memcpy_backptr
+ av_memdup
+ av_mul_q
+ av_murmur3_alloc
+ av_murmur3_final
+ av_murmur3_init
+ av_murmur3_init_seeded
+ av_murmur3_update
+ av_nearer_q
+ av_next_option
+ av_opt_child_class_next
+ av_opt_child_next
+ av_opt_eval_double
+ av_opt_eval_flags
+ av_opt_eval_float
+ av_opt_eval_int
+ av_opt_eval_int64
+ av_opt_eval_q
+ av_opt_find
+ av_opt_find2
+ av_opt_flag_is_set
+ av_opt_free
+ av_opt_freep_ranges
+ av_opt_get
+ av_opt_get_channel_layout
+ av_opt_get_double
+ av_opt_get_image_size
+ av_opt_get_int
+ av_opt_get_key_value
+ av_opt_get_pixel_fmt
+ av_opt_get_q
+ av_opt_get_sample_fmt
+ av_opt_get_video_rate
+ av_opt_next
+ av_opt_ptr
+ av_opt_query_ranges
+ av_opt_query_ranges_default
+ av_opt_set
+ av_opt_set_bin
+ av_opt_set_channel_layout
+ av_opt_set_defaults
+ av_opt_set_defaults2
+ av_opt_set_dict
+ av_opt_set_double
+ av_opt_set_from_string
+ av_opt_set_image_size
+ av_opt_set_int
+ av_opt_set_pixel_fmt
+ av_opt_set_q
+ av_opt_set_sample_fmt
+ av_opt_set_video_rate
+ av_opt_show2
+ av_parse_color
+ av_parse_cpu_caps
+ av_parse_cpu_flags
+ av_parse_ratio
+ av_parse_time
+ av_parse_video_rate
+ av_parse_video_size
+ av_pix_fmt_count_planes
+ av_pix_fmt_desc_get
+ av_pix_fmt_desc_get_id
+ av_pix_fmt_desc_next
+ av_pix_fmt_descriptors DATA
+ av_pix_fmt_get_chroma_sub_sample
+ av_pix_fmt_swap_endianness
+ av_rc4_crypt
+ av_rc4_init
+ av_read_image_line
+ av_realloc
+ av_realloc_array
+ av_realloc_f
+ av_reallocp
+ av_reallocp_array
+ av_reduce
+ av_rescale
+ av_rescale_delta
+ av_rescale_q
+ av_rescale_q_rnd
+ av_rescale_rnd
+ av_reverse DATA
+ av_ripemd_alloc
+ av_ripemd_final
+ av_ripemd_init
+ av_ripemd_size DATA
+ av_ripemd_update
+ av_sample_fmt_is_planar
+ av_samples_alloc
+ av_samples_alloc_array_and_samples
+ av_samples_copy
+ av_samples_fill_arrays
+ av_samples_get_buffer_size
+ av_samples_set_silence
+ av_set_cpu_flags_mask
+ av_set_double
+ av_set_int
+ av_set_options_string
+ av_set_q
+ av_set_string3
+ av_sha512_alloc
+ av_sha512_final
+ av_sha512_init
+ av_sha512_size DATA
+ av_sha512_update
+ av_sha_alloc
+ av_sha_final
+ av_sha_init
+ av_sha_size DATA
+ av_sha_update
+ av_small_strptime
+ av_solve_lls
+ av_stereo3d_alloc
+ av_stereo3d_create_side_data
+ av_strcasecmp
+ av_strdup
+ av_strerror
+ av_stristart
+ av_stristr
+ av_strlcat
+ av_strlcatf
+ av_strlcpy
+ av_strncasecmp
+ av_strnstr
+ av_strstart
+ av_strtod
+ av_strtok
+ av_sub_q
+ av_tempfile
+ av_timecode_adjust_ntsc_framenum2
+ av_timecode_check_frame_rate
+ av_timecode_get_smpte_from_framenum
+ av_timecode_init
+ av_timecode_init_from_string
+ av_timecode_make_mpeg_tc_string
+ av_timecode_make_smpte_tc_string
+ av_timecode_make_string
+ av_timegm
+ av_tree_destroy
+ av_tree_enumerate
+ av_tree_find
+ av_tree_insert
+ av_tree_node_alloc
+ av_tree_node_size DATA
+ av_update_lls
+ av_usleep
+ av_utf8_decode
+ av_vbprintf
+ av_vlog
+ av_write_image_line
+ av_xtea_crypt
+ av_xtea_init
+ avpriv_cga_font DATA
+ avpriv_emms_yasm DATA
+ avpriv_evaluate_lls
+ avpriv_float_dsp_init
+ avpriv_frame_get_metadatap
+ avpriv_init_lls
+ avpriv_init_lls2
+ avpriv_open
+ avpriv_report_missing_feature
+ avpriv_request_sample
+ avpriv_scalarproduct_float_c
+ avpriv_set_systematic_pal2
+ avpriv_solve_lls
+ avpriv_solve_lls2
+ avpriv_update_lls
+ avpriv_vga16_font DATA
+ avutil_configuration
+ avutil_license
+ avutil_version
+ ff_butterflies_float_sse DATA
+ ff_check_pixfmt_descriptors
+ ff_cpu_cpuid DATA
+ ff_cpu_xgetbv DATA
+ ff_evaluate_lls_sse2 DATA
+ ff_float_dsp_init_x86
+ ff_get_channel_layout
+ ff_get_cpu_flags_x86
+ ff_init_lls_x86
+ ff_log2_tab DATA
+ ff_scalarproduct_float_sse DATA
+ ff_update_lls_avx DATA
+ ff_update_lls_sse2 DATA
+ ff_vector_dmul_scalar_avx DATA
+ ff_vector_dmul_scalar_sse2 DATA
+ ff_vector_fmac_scalar_avx DATA
+ ff_vector_fmac_scalar_sse DATA
+ ff_vector_fmul_add_avx DATA
+ ff_vector_fmul_add_sse DATA
+ ff_vector_fmul_avx DATA
+ ff_vector_fmul_reverse_avx DATA
+ ff_vector_fmul_reverse_sse DATA
+ ff_vector_fmul_scalar_sse DATA
+ ff_vector_fmul_sse DATA
--- /dev/null
+EXPORTS
+ postproc_configuration
+ postproc_license
+ postproc_version
+ pp_free_context
+ pp_free_mode
+ pp_get_context
+ pp_get_mode_by_name_and_quality
+ pp_help DATA
+ pp_postprocess
--- /dev/null
+EXPORTS
+ ff_float_to_int16_a_sse2 DATA
+ ff_float_to_int16_u_sse2 DATA
+ ff_float_to_int32_a_sse2 DATA
+ ff_float_to_int32_u_sse2 DATA
+ ff_int16_to_float_a_sse2 DATA
+ ff_int16_to_float_u_sse2 DATA
+ ff_int16_to_int32_a_mmx DATA
+ ff_int16_to_int32_a_sse2 DATA
+ ff_int16_to_int32_u_mmx DATA
+ ff_int16_to_int32_u_sse2 DATA
+ ff_int32_to_float_a_avx DATA
+ ff_int32_to_float_a_sse2 DATA
+ ff_int32_to_float_u_avx DATA
+ ff_int32_to_float_u_sse2 DATA
+ ff_int32_to_int16_a_mmx DATA
+ ff_int32_to_int16_a_sse2 DATA
+ ff_int32_to_int16_u_mmx DATA
+ ff_int32_to_int16_u_sse2 DATA
+ ff_log2_tab DATA
+ ff_mix_1_1_a_float_avx DATA
+ ff_mix_1_1_a_float_sse DATA
+ ff_mix_1_1_a_int16_mmx DATA
+ ff_mix_1_1_a_int16_sse2 DATA
+ ff_mix_1_1_u_float_avx DATA
+ ff_mix_1_1_u_float_sse DATA
+ ff_mix_1_1_u_int16_mmx DATA
+ ff_mix_1_1_u_int16_sse2 DATA
+ ff_mix_2_1_a_float_avx DATA
+ ff_mix_2_1_a_float_sse DATA
+ ff_mix_2_1_a_int16_mmx DATA
+ ff_mix_2_1_a_int16_sse2 DATA
+ ff_mix_2_1_u_float_avx DATA
+ ff_mix_2_1_u_float_sse DATA
+ ff_mix_2_1_u_int16_mmx DATA
+ ff_mix_2_1_u_int16_sse2 DATA
+ ff_pack_2ch_float_to_int16_a_sse2 DATA
+ ff_pack_2ch_float_to_int16_u_sse2 DATA
+ ff_pack_2ch_float_to_int32_a_sse2 DATA
+ ff_pack_2ch_float_to_int32_u_sse2 DATA
+ ff_pack_2ch_int16_to_float_a_sse2 DATA
+ ff_pack_2ch_int16_to_float_u_sse2 DATA
+ ff_pack_2ch_int16_to_int16_a_sse2 DATA
+ ff_pack_2ch_int16_to_int16_u_sse2 DATA
+ ff_pack_2ch_int16_to_int32_a_sse2 DATA
+ ff_pack_2ch_int16_to_int32_u_sse2 DATA
+ ff_pack_2ch_int32_to_float_a_sse2 DATA
+ ff_pack_2ch_int32_to_float_u_sse2 DATA
+ ff_pack_2ch_int32_to_int16_a_sse2 DATA
+ ff_pack_2ch_int32_to_int16_u_sse2 DATA
+ ff_pack_2ch_int32_to_int32_a_sse2 DATA
+ ff_pack_2ch_int32_to_int32_u_sse2 DATA
+ ff_pack_6ch_float_to_float_a_avx DATA
+ ff_pack_6ch_float_to_float_a_mmx DATA
+ ff_pack_6ch_float_to_float_a_sse4 DATA
+ ff_pack_6ch_float_to_float_u_avx DATA
+ ff_pack_6ch_float_to_float_u_mmx DATA
+ ff_pack_6ch_float_to_float_u_sse4 DATA
+ ff_pack_6ch_float_to_int32_a_avx DATA
+ ff_pack_6ch_float_to_int32_a_sse4 DATA
+ ff_pack_6ch_float_to_int32_u_avx DATA
+ ff_pack_6ch_float_to_int32_u_sse4 DATA
+ ff_pack_6ch_int32_to_float_a_avx DATA
+ ff_pack_6ch_int32_to_float_a_sse4 DATA
+ ff_pack_6ch_int32_to_float_u_avx DATA
+ ff_pack_6ch_int32_to_float_u_sse4 DATA
+ ff_resample_int16_rounder DATA
+ ff_unpack_2ch_float_to_int16_a_sse2 DATA
+ ff_unpack_2ch_float_to_int16_u_sse2 DATA
+ ff_unpack_2ch_float_to_int32_a_sse2 DATA
+ ff_unpack_2ch_float_to_int32_u_sse2 DATA
+ ff_unpack_2ch_int16_to_float_a_sse2 DATA
+ ff_unpack_2ch_int16_to_float_a_ssse3 DATA
+ ff_unpack_2ch_int16_to_float_u_sse2 DATA
+ ff_unpack_2ch_int16_to_float_u_ssse3 DATA
+ ff_unpack_2ch_int16_to_int16_a_sse2 DATA
+ ff_unpack_2ch_int16_to_int16_a_ssse3 DATA
+ ff_unpack_2ch_int16_to_int16_u_sse2 DATA
+ ff_unpack_2ch_int16_to_int16_u_ssse3 DATA
+ ff_unpack_2ch_int16_to_int32_a_sse2 DATA
+ ff_unpack_2ch_int16_to_int32_a_ssse3 DATA
+ ff_unpack_2ch_int16_to_int32_u_sse2 DATA
+ ff_unpack_2ch_int16_to_int32_u_ssse3 DATA
+ ff_unpack_2ch_int32_to_float_a_sse2 DATA
+ ff_unpack_2ch_int32_to_float_u_sse2 DATA
+ ff_unpack_2ch_int32_to_int16_a_sse2 DATA
+ ff_unpack_2ch_int32_to_int16_u_sse2 DATA
+ ff_unpack_2ch_int32_to_int32_a_sse2 DATA
+ ff_unpack_2ch_int32_to_int32_u_sse2 DATA
+ swr_alloc
+ swr_alloc_set_opts
+ swr_convert
+ swr_drop_output
+ swr_free
+ swr_get_class
+ swr_get_delay
+ swr_init
+ swr_inject_silence
+ swr_is_initialized
+ swr_next_pts
+ swr_set_channel_mapping
+ swr_set_compensation
+ swr_set_matrix
+ swresample_configuration
+ swresample_license
+ swresample_version
--- /dev/null
+EXPORTS
+ sws_addVec
+ sws_allocVec
+ sws_alloc_context
+ sws_cloneVec
+ sws_context_class DATA
+ sws_convVec
+ sws_convertPalette8ToPacked24
+ sws_convertPalette8ToPacked32
+ sws_format_name
+ sws_freeContext
+ sws_freeFilter
+ sws_freeVec
+ sws_getCachedContext
+ sws_getCoefficients
+ sws_getColorspaceDetails
+ sws_getConstVec
+ sws_getContext
+ sws_getDefaultFilter
+ sws_getGaussianVec
+ sws_getIdentityVec
+ sws_get_class
+ sws_init_context
+ sws_isSupportedEndiannessConversion
+ sws_isSupportedInput
+ sws_isSupportedOutput
+ sws_normalizeVec
+ sws_printVec2
+ sws_rgb2rgb_init
+ sws_scale
+ sws_scaleVec
+ sws_setColorspaceDetails
+ sws_shiftVec
+ sws_subVec
+ swscale_configuration
+ swscale_license
+ swscale_version
--- /dev/null
+
+--------------------------------------------------------------------------
+
+This program, "bzip2", the associated library "libbzip2", and all
+documentation, are copyright (C) 1996-2010 Julian R Seward. All
+rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Julian Seward, jseward@bzip.org
+bzip2/libbzip2 version 1.0.6 of 6 September 2010
+
+--------------------------------------------------------------------------
--- /dev/null
+fontconfig/COPYING
+
+Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard
+Copyright © 2005 Patrick Lam
+Copyright © 2009 Roozbeh Pournader
+Copyright © 2008,2009 Red Hat, Inc.
+Copyright © 2008 Danilo Šegan
+
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of the author(s) not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. The authors make no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+
+THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
--- /dev/null
+ The FreeType Project LICENSE
+ ----------------------------
+
+ 2006-Jan-27
+
+ Copyright 1996-2002, 2006 by
+ David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+ The FreeType Project is distributed in several archive packages;
+ some of them may contain, in addition to the FreeType font engine,
+ various tools and contributions which rely on, or relate to, the
+ FreeType Project.
+
+ This license applies to all files found in such packages, and
+ which do not fall under their own explicit license. The license
+ affects thus the FreeType font engine, the test programs,
+ documentation and makefiles, at the very least.
+
+ This license was inspired by the BSD, Artistic, and IJG
+ (Independent JPEG Group) licenses, which all encourage inclusion
+ and use of free software in commercial and freeware products
+ alike. As a consequence, its main points are that:
+
+ o We don't promise that this software works. However, we will be
+ interested in any kind of bug reports. (`as is' distribution)
+
+ o You can use this software for whatever you want, in parts or
+ full form, without having to pay us. (`royalty-free' usage)
+
+ o You may not pretend that you wrote this software. If you use
+ it, or only parts of it, in a program, you must acknowledge
+ somewhere in your documentation that you have used the
+ FreeType code. (`credits')
+
+ We specifically permit and encourage the inclusion of this
+ software, with or without modifications, in commercial products.
+ We disclaim all warranties covering The FreeType Project and
+ assume no liability related to The FreeType Project.
+
+
+ Finally, many people asked us for a preferred form for a
+ credit/disclaimer to use in compliance with this license. We thus
+ encourage you to use the following text:
+
+ """
+ Portions of this software are copyright © <year> The FreeType
+ Project (www.freetype.org). All rights reserved.
+ """
+
+ Please replace <year> with the value from the FreeType version you
+ actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+ Throughout this license, the terms `package', `FreeType Project',
+ and `FreeType archive' refer to the set of files originally
+ distributed by the authors (David Turner, Robert Wilhelm, and
+ Werner Lemberg) as the `FreeType Project', be they named as alpha,
+ beta or final release.
+
+ `You' refers to the licensee, or person using the project, where
+ `using' is a generic term including compiling the project's source
+ code as well as linking it to form a `program' or `executable'.
+ This program is referred to as `a program using the FreeType
+ engine'.
+
+ This license applies to all files distributed in the original
+ FreeType Project, including all source code, binaries and
+ documentation, unless otherwise stated in the file in its
+ original, unmodified form as distributed in the original archive.
+ If you are unsure whether or not a particular file is covered by
+ this license, you must contact us to verify this.
+
+ The FreeType Project is copyright (C) 1996-2000 by David Turner,
+ Robert Wilhelm, and Werner Lemberg. All rights reserved except as
+ specified below.
+
+1. No Warranty
+--------------
+
+ THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
+ USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+ This license grants a worldwide, royalty-free, perpetual and
+ irrevocable right and license to use, execute, perform, compile,
+ display, copy, create derivative works of, distribute and
+ sublicense the FreeType Project (in both source and object code
+ forms) and derivative works thereof for any purpose; and to
+ authorize others to exercise some or all of the rights granted
+ herein, subject to the following conditions:
+
+ o Redistribution of source code must retain this license file
+ (`FTL.TXT') unaltered; any additions, deletions or changes to
+ the original files must be clearly indicated in accompanying
+ documentation. The copyright notices of the unaltered,
+ original files must be preserved in all copies of source
+ files.
+
+ o Redistribution in binary form must provide a disclaimer that
+ states that the software is based in part of the work of the
+ FreeType Team, in the distribution documentation. We also
+ encourage you to put an URL to the FreeType web page in your
+ documentation, though this isn't mandatory.
+
+ These conditions apply to any software derived from or based on
+ the FreeType Project, not just the unmodified files. If you use
+ our work, you must acknowledge us. However, no fee need be paid
+ to us.
+
+3. Advertising
+--------------
+
+ Neither the FreeType authors and contributors nor you shall use
+ the name of the other for commercial, advertising, or promotional
+ purposes without specific prior written permission.
+
+ We suggest, but do not require, that you use one or more of the
+ following phrases to refer to this software in your documentation
+ or advertising materials: `FreeType Project', `FreeType Engine',
+ `FreeType library', or `FreeType Distribution'.
+
+ As you have not signed this license, you are not required to
+ accept it. However, as the FreeType Project is copyrighted
+ material, only this license, or another one contracted with the
+ authors, grants you the right to use, distribute, and modify it.
+ Therefore, by using, distributing, or modifying the FreeType
+ Project, you indicate that you understand and accept all the terms
+ of this license.
+
+4. Contacts
+-----------
+
+ There are two mailing lists related to FreeType:
+
+ o freetype@nongnu.org
+
+ Discusses general use and applications of FreeType, as well as
+ future and wanted additions to the library and distribution.
+ If you are looking for support, start in this list if you
+ haven't found anything to help you in the documentation.
+
+ o freetype-devel@nongnu.org
+
+ Discusses bugs, as well as engine internals, design issues,
+ specific licenses, porting, etc.
+
+ Our home page can be found at
+
+ http://www.freetype.org
+
+
+--- end of FTL.TXT ---
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library 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.
+
+ This library 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 this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
--- /dev/null
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar
+ 14 rue de Plaisance, 75014 Paris, France
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
+
--- /dev/null
+Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
+Technische Universitaet Berlin
+
+Any use of this software is permitted provided that this notice is not
+removed and that neither the authors nor the Technische Universitaet Berlin
+are deemed to have made any representations as to the suitability of this
+software for any purpose nor are held responsible for any defects of
+this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+
+As a matter of courtesy, the authors request to be informed about uses
+this software has found, about bugs in this software, and about any
+improvements that may be of general interest.
+
+Berlin, 28.11.1994
+Jutta Degener
+Carsten Bormann
+
+ oOo
+
+Since the original terms of 15 years ago maybe do not make our
+intentions completely clear given today's refined usage of the legal
+terms, we append this additional permission:
+
+ Permission to use, copy, modify, and distribute this software
+ for any purpose with or without fee is hereby granted,
+ provided that this notice is not removed and that neither
+ the authors nor the Technische Universitaet Berlin are
+ deemed to have made any representations as to the suitability
+ of this software for any purpose nor are held responsible
+ for any defects of this software. THERE IS ABSOLUTELY NO
+ WARRANTY FOR THIS SOFTWARE.
+
+Berkeley/Bremen, 05.04.2009
+Jutta Degener
+Carsten Bormann
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+Copyright (c) 2011, The WebRTC project authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of Google nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+ModPlug-XMMS and libmodplug are now in the public domain.
--- /dev/null
+Copyright (C) 2002-2009 Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+Copyright (c) 2002-2008 Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+Copyright (c) 2010, The WebM Project authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of Google, nor the WebM Project, nor the names
+ of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
--- /dev/null
+Copyright (c) 2010, Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of Google nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
--- /dev/null
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with
+that entity. For the purposes of this definition, "control" means (i) the
+power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty
+percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled
+object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the
+Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as
+a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or
+merely link (or bind by name) to the interfaces of, the Work and Derivative
+Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the
+purposes of this definition, "submitted" means any form of electronic,
+verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that
+are managed by, or on behalf of, the Licensor for the purpose of discussing
+and improving the Work, but excluding communication that is conspicuously
+marked or otherwise designated in writing by the copyright owner as "Not a
+Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable copyright license to
+reproduce, prepare Derivative Works of, publicly display, publicly perform,
+sublicense, and distribute the Work and such Derivative Works in Source or
+Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
+this section) patent license to make, have made, use, offer to sell, sell,
+import, and otherwise transfer the Work, where such license applies only to
+those patent claims licensable by such Contributor that are necessarily
+infringed by their Contribution(s) alone or by combination of their
+Contribution(s) with the Work to which such Contribution(s) was submitted.
+If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or
+contributory patent infringement, then any patent licenses granted to You
+under this License for that Work shall terminate as of the date such
+litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or
+Derivative Works thereof in any medium, with or without modifications, and
+in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a
+copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating
+that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from
+the Source form of the Work, excluding those notices that do not pertain to
+any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must include a
+readable copy of the attribution notices contained within such NOTICE file,
+excluding those notices that do not pertain to any part of the Derivative
+Works, in at least one of the following places: within a NOTICE text file
+distributed as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or, within a
+display generated by the Derivative Works, if and wherever such third-party
+notices normally appear. The contents of the NOTICE file are for
+informational purposes only and do not modify the License. You may add Your
+own attribution notices within Derivative Works that You distribute,
+alongside or as an addendum to the NOTICE text from the Work, provided that
+such additional attribution notices cannot be construed as modifying the
+License.
+
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated in
+this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any
+Contribution intentionally submitted for inclusion in the Work by You to
+the Licensor shall be under the terms and conditions of this License,
+without any additional terms or conditions. Notwithstanding the above,
+nothing herein shall supersede or modify the terms of any separate license
+agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor, except
+as required for reasonable and customary use in describing the origin of
+the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to
+in writing, Licensor provides the Work (and each Contributor provides its
+Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied, including, without limitation, any
+warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or
+FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for
+determining the appropriateness of using or redistributing the Work and
+assume any risks associated with Your exercise of permissions under this
+License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether
+in tort (including negligence), contract, or otherwise, unless required by
+applicable law (such as deliberate and grossly negligent acts) or agreed to
+in writing, shall any Contributor be liable to You for damages, including
+any direct, indirect, special, incidental, or consequential damages of any
+character arising as a result of this License or out of the use or
+inability to use the Work (including but not limited to damages for loss of
+goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor has been
+advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the
+Work or Derivative Works thereof, You may choose to offer, and charge a fee
+for, acceptance of support, warranty, indemnity, or other liability
+obligations and/or rights consistent with this License. However, in
+accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if
+You agree to indemnify, defend, and hold each Contributor harmless for any
+liability incurred by, or claims asserted against, such Contributor by
+reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included
+on the same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain a
+ copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable
+ law or agreed to in writing, software distributed under the License is
+ distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
--- /dev/null
+/*
+ * Copyright (c) 2002-2012, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2012, Professor Benoit Macq
+ * Copyright (c) 2003-2012, Antonin Descampe
+ * Copyright (c) 2003-2009, Francois-Olivier Devaux
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
+ * Copyright (c) 2012, CS Systemes d'Information, France
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
--- /dev/null
+Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,
+ Jean-Marc Valin, Timothy B. Terriberry,
+ CSIRO, Gregory Maxwell, Mark Borgerding,
+ Erik de Castro Lopo
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of Internet Society, IETF or IETF Trust, nor the
+names of specific contributors, may be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Opus is subject to the royalty-free patent licenses which are
+specified at:
+
+Xiph.Org Foundation:
+https://datatracker.ietf.org/ipr/1524/
+
+Microsoft Corporation:
+https://datatracker.ietf.org/ipr/1914/
+
+Broadcom Corporation:
+https://datatracker.ietf.org/ipr/1526/
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
--- /dev/null
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
--- /dev/null
+SoX Resampler Library Copyright (c) 2007-13 robs@users.sourceforge.net
+
+This library 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.
+
+This library 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 this library; if not, write to the Free Software Foundation,
+Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+Notes
+
+1. Re software in the `examples' directory: works that are not resampling
+examples but are based on the given examples -- for example, applications using
+the library -- shall not be considered to be derivative works of the examples.
+
+2. If building with pffft.c, see the licence embedded in that file.
--- /dev/null
+Copyright 2002-2008 Xiph.org Foundation
+Copyright 2002-2008 Jean-Marc Valin
+Copyright 2005-2007 Analog Devices Inc.
+Copyright 2005-2008 Commonwealth Scientific and Industrial Research
+ Organisation (CSIRO)
+Copyright 1993, 2002, 2006 David Rowe
+Copyright 2003 EpicGames
+Copyright 1992-1994 Jutta Degener, Carsten Bormann
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library 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.
+
+ This library 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 this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null
+In this project is open source in the sense of the GPL.
+
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * *
+ * This program 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 General Public License for more details. *
--- /dev/null
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with
+that entity. For the purposes of this definition, "control" means (i) the
+power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty
+percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled
+object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the
+Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as
+a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or
+merely link (or bind by name) to the interfaces of, the Work and Derivative
+Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the
+purposes of this definition, "submitted" means any form of electronic,
+verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that
+are managed by, or on behalf of, the Licensor for the purpose of discussing
+and improving the Work, but excluding communication that is conspicuously
+marked or otherwise designated in writing by the copyright owner as "Not a
+Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable copyright license to
+reproduce, prepare Derivative Works of, publicly display, publicly perform,
+sublicense, and distribute the Work and such Derivative Works in Source or
+Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
+this section) patent license to make, have made, use, offer to sell, sell,
+import, and otherwise transfer the Work, where such license applies only to
+those patent claims licensable by such Contributor that are necessarily
+infringed by their Contribution(s) alone or by combination of their
+Contribution(s) with the Work to which such Contribution(s) was submitted.
+If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or
+contributory patent infringement, then any patent licenses granted to You
+under this License for that Work shall terminate as of the date such
+litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or
+Derivative Works thereof in any medium, with or without modifications, and
+in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a
+copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating
+that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from
+the Source form of the Work, excluding those notices that do not pertain to
+any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must include a
+readable copy of the attribution notices contained within such NOTICE file,
+excluding those notices that do not pertain to any part of the Derivative
+Works, in at least one of the following places: within a NOTICE text file
+distributed as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or, within a
+display generated by the Derivative Works, if and wherever such third-party
+notices normally appear. The contents of the NOTICE file are for
+informational purposes only and do not modify the License. You may add Your
+own attribution notices within Derivative Works that You distribute,
+alongside or as an addendum to the NOTICE text from the Work, provided that
+such additional attribution notices cannot be construed as modifying the
+License.
+
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated in
+this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any
+Contribution intentionally submitted for inclusion in the Work by You to
+the Licensor shall be under the terms and conditions of this License,
+without any additional terms or conditions. Notwithstanding the above,
+nothing herein shall supersede or modify the terms of any separate license
+agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor, except
+as required for reasonable and customary use in describing the origin of
+the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to
+in writing, Licensor provides the Work (and each Contributor provides its
+Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied, including, without limitation, any
+warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or
+FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for
+determining the appropriateness of using or redistributing the Work and
+assume any risks associated with Your exercise of permissions under this
+License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether
+in tort (including negligence), contract, or otherwise, unless required by
+applicable law (such as deliberate and grossly negligent acts) or agreed to
+in writing, shall any Contributor be liable to You for damages, including
+any direct, indirect, special, incidental, or consequential damages of any
+character arising as a result of this License or out of the use or
+inability to use the Work (including but not limited to damages for loss of
+goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor has been
+advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the
+Work or Derivative Works thereof, You may choose to offer, and charge a fee
+for, acceptance of support, warranty, indemnity, or other liability
+obligations and/or rights consistent with this License. However, in
+accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if
+You agree to indemnify, defend, and hold each Contributor harmless for any
+liability incurred by, or claims asserted against, such Contributor by
+reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included
+on the same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain a
+ copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable
+ law or agreed to in writing, software distributed under the License is
+ distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
--- /dev/null
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with
+that entity. For the purposes of this definition, "control" means (i) the
+power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty
+percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled
+object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the
+Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as
+a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or
+merely link (or bind by name) to the interfaces of, the Work and Derivative
+Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the
+purposes of this definition, "submitted" means any form of electronic,
+verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that
+are managed by, or on behalf of, the Licensor for the purpose of discussing
+and improving the Work, but excluding communication that is conspicuously
+marked or otherwise designated in writing by the copyright owner as "Not a
+Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable copyright license to
+reproduce, prepare Derivative Works of, publicly display, publicly perform,
+sublicense, and distribute the Work and such Derivative Works in Source or
+Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this
+License, each Contributor hereby grants to You a perpetual, worldwide,
+non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
+this section) patent license to make, have made, use, offer to sell, sell,
+import, and otherwise transfer the Work, where such license applies only to
+those patent claims licensable by such Contributor that are necessarily
+infringed by their Contribution(s) alone or by combination of their
+Contribution(s) with the Work to which such Contribution(s) was submitted.
+If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or
+contributory patent infringement, then any patent licenses granted to You
+under this License for that Work shall terminate as of the date such
+litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or
+Derivative Works thereof in any medium, with or without modifications, and
+in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a
+copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating
+that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from
+the Source form of the Work, excluding those notices that do not pertain to
+any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must include a
+readable copy of the attribution notices contained within such NOTICE file,
+excluding those notices that do not pertain to any part of the Derivative
+Works, in at least one of the following places: within a NOTICE text file
+distributed as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or, within a
+display generated by the Derivative Works, if and wherever such third-party
+notices normally appear. The contents of the NOTICE file are for
+informational purposes only and do not modify the License. You may add Your
+own attribution notices within Derivative Works that You distribute,
+alongside or as an addendum to the NOTICE text from the Work, provided that
+such additional attribution notices cannot be construed as modifying the
+License.
+
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated in
+this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any
+Contribution intentionally submitted for inclusion in the Work by You to
+the Licensor shall be under the terms and conditions of this License,
+without any additional terms or conditions. Notwithstanding the above,
+nothing herein shall supersede or modify the terms of any separate license
+agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor, except
+as required for reasonable and customary use in describing the origin of
+the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to
+in writing, Licensor provides the Work (and each Contributor provides its
+Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied, including, without limitation, any
+warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or
+FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for
+determining the appropriateness of using or redistributing the Work and
+assume any risks associated with Your exercise of permissions under this
+License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether
+in tort (including negligence), contract, or otherwise, unless required by
+applicable law (such as deliberate and grossly negligent acts) or agreed to
+in writing, shall any Contributor be liable to You for damages, including
+any direct, indirect, special, incidental, or consequential damages of any
+character arising as a result of this License or out of the use or
+inability to use the Work (including but not limited to damages for loss of
+goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor has been
+advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the
+Work or Derivative Works thereof, You may choose to offer, and charge a fee
+for, acceptance of support, warranty, indemnity, or other liability
+obligations and/or rights consistent with this License. However, in
+accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if
+You agree to indemnify, defend, and hold each Contributor harmless for any
+liability incurred by, or claims asserted against, such Contributor by
+reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included
+on the same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain a
+ copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable
+ law or agreed to in writing, software distributed under the License is
+ distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
--- /dev/null
+ Copyright (c) 1998 - 2009 Conifer Software
+ All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Conifer Software nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+This program is also available under a commercial proprietary license.
+For more information, contact us at licensing@multicorewareinc.com.
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.2.7, May 2nd, 2012
+
+ Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+*/
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.ffmpeg.org/schema/ffprobe"
+ xmlns:ffprobe="http://www.ffmpeg.org/schema/ffprobe">
+
+ <xsd:element name="ffprobe" type="ffprobe:ffprobeType"/>
+
+ <xsd:complexType name="ffprobeType">
+ <xsd:sequence>
+ <xsd:element name="packets" type="ffprobe:packetsType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="frames" type="ffprobe:framesType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="streams" type="ffprobe:streamsType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="programs" type="ffprobe:programsType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="chapters" type="ffprobe:chaptersType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="format" type="ffprobe:formatType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="error" type="ffprobe:errorType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="program_version" type="ffprobe:programVersionType" minOccurs="0" maxOccurs="1" />
+ <xsd:element name="library_versions" type="ffprobe:libraryVersionsType" minOccurs="0" maxOccurs="1" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="packetsType">
+ <xsd:sequence>
+ <xsd:element name="packet" type="ffprobe:packetType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="framesType">
+ <xsd:sequence>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="frame" type="ffprobe:frameType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="subtitle" type="ffprobe:subtitleType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="packetType">
+ <xsd:attribute name="codec_type" type="xsd:string" use="required" />
+ <xsd:attribute name="stream_index" type="xsd:int" use="required" />
+ <xsd:attribute name="pts" type="xsd:long" />
+ <xsd:attribute name="pts_time" type="xsd:float" />
+ <xsd:attribute name="dts" type="xsd:long" />
+ <xsd:attribute name="dts_time" type="xsd:float" />
+ <xsd:attribute name="duration" type="xsd:long" />
+ <xsd:attribute name="duration_time" type="xsd:float" />
+ <xsd:attribute name="convergence_duration" type="xsd:long" />
+ <xsd:attribute name="convergence_duration_time" type="xsd:float" />
+ <xsd:attribute name="size" type="xsd:long" use="required" />
+ <xsd:attribute name="pos" type="xsd:long" />
+ <xsd:attribute name="flags" type="xsd:string" use="required" />
+ <xsd:attribute name="data" type="xsd:string" />
+ </xsd:complexType>
+
+ <xsd:complexType name="frameType">
+ <xsd:attribute name="media_type" type="xsd:string" use="required"/>
+ <xsd:attribute name="key_frame" type="xsd:int" use="required"/>
+ <xsd:attribute name="pts" type="xsd:long" />
+ <xsd:attribute name="pts_time" type="xsd:float"/>
+ <xsd:attribute name="pkt_pts" type="xsd:long" />
+ <xsd:attribute name="pkt_pts_time" type="xsd:float"/>
+ <xsd:attribute name="pkt_dts" type="xsd:long" />
+ <xsd:attribute name="pkt_dts_time" type="xsd:float"/>
+ <xsd:attribute name="best_effort_timestamp" type="xsd:long" />
+ <xsd:attribute name="best_effort_timestamp_time" type="xsd:float" />
+ <xsd:attribute name="pkt_duration" type="xsd:long" />
+ <xsd:attribute name="pkt_duration_time" type="xsd:float"/>
+ <xsd:attribute name="pkt_pos" type="xsd:long" />
+ <xsd:attribute name="pkt_size" type="xsd:int" />
+
+ <!-- audio attributes -->
+ <xsd:attribute name="sample_fmt" type="xsd:string"/>
+ <xsd:attribute name="nb_samples" type="xsd:long" />
+ <xsd:attribute name="channels" type="xsd:int" />
+ <xsd:attribute name="channel_layout" type="xsd:string"/>
+
+ <!-- video attributes -->
+ <xsd:attribute name="width" type="xsd:long" />
+ <xsd:attribute name="height" type="xsd:long" />
+ <xsd:attribute name="pix_fmt" type="xsd:string"/>
+ <xsd:attribute name="sample_aspect_ratio" type="xsd:string"/>
+ <xsd:attribute name="pict_type" type="xsd:string"/>
+ <xsd:attribute name="coded_picture_number" type="xsd:long" />
+ <xsd:attribute name="display_picture_number" type="xsd:long" />
+ <xsd:attribute name="interlaced_frame" type="xsd:int" />
+ <xsd:attribute name="top_field_first" type="xsd:int" />
+ <xsd:attribute name="repeat_pict" type="xsd:int" />
+ </xsd:complexType>
+
+ <xsd:complexType name="subtitleType">
+ <xsd:attribute name="media_type" type="xsd:string" fixed="subtitle" use="required"/>
+ <xsd:attribute name="pts" type="xsd:long" />
+ <xsd:attribute name="pts_time" type="xsd:float"/>
+ <xsd:attribute name="format" type="xsd:int" />
+ <xsd:attribute name="start_display_time" type="xsd:int" />
+ <xsd:attribute name="end_display_time" type="xsd:int" />
+ <xsd:attribute name="num_rects" type="xsd:int" />
+ </xsd:complexType>
+
+ <xsd:complexType name="streamsType">
+ <xsd:sequence>
+ <xsd:element name="stream" type="ffprobe:streamType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="programsType">
+ <xsd:sequence>
+ <xsd:element name="program" type="ffprobe:programType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="streamDispositionType">
+ <xsd:attribute name="default" type="xsd:int" use="required" />
+ <xsd:attribute name="dub" type="xsd:int" use="required" />
+ <xsd:attribute name="original" type="xsd:int" use="required" />
+ <xsd:attribute name="comment" type="xsd:int" use="required" />
+ <xsd:attribute name="lyrics" type="xsd:int" use="required" />
+ <xsd:attribute name="karaoke" type="xsd:int" use="required" />
+ <xsd:attribute name="forced" type="xsd:int" use="required" />
+ <xsd:attribute name="hearing_impaired" type="xsd:int" use="required" />
+ <xsd:attribute name="visual_impaired" type="xsd:int" use="required" />
+ <xsd:attribute name="clean_effects" type="xsd:int" use="required" />
+ <xsd:attribute name="attached_pic" type="xsd:int" use="required" />
+ </xsd:complexType>
+
+ <xsd:complexType name="streamType">
+ <xsd:sequence>
+ <xsd:element name="disposition" type="ffprobe:streamDispositionType" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="tag" type="ffprobe:tagType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+
+ <xsd:attribute name="index" type="xsd:int" use="required"/>
+ <xsd:attribute name="codec_name" type="xsd:string" />
+ <xsd:attribute name="codec_long_name" type="xsd:string" />
+ <xsd:attribute name="profile" type="xsd:string" />
+ <xsd:attribute name="codec_type" type="xsd:string" />
+ <xsd:attribute name="codec_time_base" type="xsd:string" use="required"/>
+ <xsd:attribute name="codec_tag" type="xsd:string" use="required"/>
+ <xsd:attribute name="codec_tag_string" type="xsd:string" use="required"/>
+ <xsd:attribute name="extradata" type="xsd:string" />
+
+ <!-- video attributes -->
+ <xsd:attribute name="width" type="xsd:int"/>
+ <xsd:attribute name="height" type="xsd:int"/>
+ <xsd:attribute name="has_b_frames" type="xsd:int"/>
+ <xsd:attribute name="sample_aspect_ratio" type="xsd:string"/>
+ <xsd:attribute name="display_aspect_ratio" type="xsd:string"/>
+ <xsd:attribute name="pix_fmt" type="xsd:string"/>
+ <xsd:attribute name="level" type="xsd:int"/>
+ <xsd:attribute name="timecode" type="xsd:string"/>
+
+ <!-- audio attributes -->
+ <xsd:attribute name="sample_fmt" type="xsd:string"/>
+ <xsd:attribute name="sample_rate" type="xsd:int"/>
+ <xsd:attribute name="channels" type="xsd:int"/>
+ <xsd:attribute name="channel_layout" type="xsd:string"/>
+ <xsd:attribute name="bits_per_sample" type="xsd:int"/>
+
+ <xsd:attribute name="id" type="xsd:string"/>
+ <xsd:attribute name="r_frame_rate" type="xsd:string" use="required"/>
+ <xsd:attribute name="avg_frame_rate" type="xsd:string" use="required"/>
+ <xsd:attribute name="time_base" type="xsd:string" use="required"/>
+ <xsd:attribute name="start_pts" type="xsd:long"/>
+ <xsd:attribute name="start_time" type="xsd:float"/>
+ <xsd:attribute name="duration_ts" type="xsd:long"/>
+ <xsd:attribute name="duration" type="xsd:float"/>
+ <xsd:attribute name="bit_rate" type="xsd:int"/>
+ <xsd:attribute name="nb_frames" type="xsd:int"/>
+ <xsd:attribute name="nb_read_frames" type="xsd:int"/>
+ <xsd:attribute name="nb_read_packets" type="xsd:int"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="programType">
+ <xsd:sequence>
+ <xsd:element name="tag" type="ffprobe:tagType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="streams" type="ffprobe:streamsType" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+
+ <xsd:attribute name="program_id" type="xsd:int" use="required"/>
+ <xsd:attribute name="program_num" type="xsd:int" use="required"/>
+ <xsd:attribute name="nb_streams" type="xsd:int" use="required"/>
+ <xsd:attribute name="start_time" type="xsd:float"/>
+ <xsd:attribute name="start_pts" type="xsd:long"/>
+ <xsd:attribute name="end_time" type="xsd:float"/>
+ <xsd:attribute name="end_pts" type="xsd:long"/>
+ <xsd:attribute name="pmt_pid" type="xsd:int" use="required"/>
+ <xsd:attribute name="pcr_pid" type="xsd:int" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="formatType">
+ <xsd:sequence>
+ <xsd:element name="tag" type="ffprobe:tagType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+
+ <xsd:attribute name="filename" type="xsd:string" use="required"/>
+ <xsd:attribute name="nb_streams" type="xsd:int" use="required"/>
+ <xsd:attribute name="nb_programs" type="xsd:int" use="required"/>
+ <xsd:attribute name="format_name" type="xsd:string" use="required"/>
+ <xsd:attribute name="format_long_name" type="xsd:string"/>
+ <xsd:attribute name="start_time" type="xsd:float"/>
+ <xsd:attribute name="duration" type="xsd:float"/>
+ <xsd:attribute name="size" type="xsd:long"/>
+ <xsd:attribute name="bit_rate" type="xsd:long"/>
+ <xsd:attribute name="probe_score" type="xsd:int"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="tagType">
+ <xsd:attribute name="key" type="xsd:string" use="required"/>
+ <xsd:attribute name="value" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="errorType">
+ <xsd:attribute name="code" type="xsd:int" use="required"/>
+ <xsd:attribute name="string" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="programVersionType">
+ <xsd:attribute name="version" type="xsd:string" use="required"/>
+ <xsd:attribute name="copyright" type="xsd:string" use="required"/>
+ <xsd:attribute name="build_date" type="xsd:string" use="required"/>
+ <xsd:attribute name="build_time" type="xsd:string" use="required"/>
+ <xsd:attribute name="compiler_type" type="xsd:string" use="required"/>
+ <xsd:attribute name="compiler_version" type="xsd:string" use="required"/>
+ <xsd:attribute name="configuration" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="chaptersType">
+ <xsd:sequence>
+ <xsd:element name="chapter" type="ffprobe:chapterType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="chapterType">
+ <xsd:sequence>
+ <xsd:element name="tag" type="ffprobe:tagType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+
+ <xsd:attribute name="id" type="xsd:int" use="required"/>
+ <xsd:attribute name="time_base" type="xsd:string" use="required"/>
+ <xsd:attribute name="start" type="xsd:int" use="required"/>
+ <xsd:attribute name="start_time" type="xsd:float"/>
+ <xsd:attribute name="end" type="xsd:int" use="required"/>
+ <xsd:attribute name="end_time" type="xsd:float" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="libraryVersionType">
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ <xsd:attribute name="major" type="xsd:int" use="required"/>
+ <xsd:attribute name="minor" type="xsd:int" use="required"/>
+ <xsd:attribute name="micro" type="xsd:int" use="required"/>
+ <xsd:attribute name="version" type="xsd:int" use="required"/>
+ <xsd:attribute name="ident" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="libraryVersionsType">
+ <xsd:sequence>
+ <xsd:element name="library_version" type="ffprobe:libraryVersionType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>
--- /dev/null
+vcodec=libvpx
+
+g=120
+lag-in-frames=16
+deadline=good
+cpu-used=0
+vprofile=1
+qmax=51
+qmin=11
+slices=4
+b=2M
+
+#ignored unless using -pass 2
+maxrate=24M
+minrate=100k
+auto-alt-ref=1
+arnr-maxframes=7
+arnr-strength=5
+arnr-type=centered
--- /dev/null
+vcodec=libvpx
+
+g=120
+lag-in-frames=25
+deadline=good
+cpu-used=0
+vprofile=1
+qmax=51
+qmin=11
+slices=4
+b=2M
+
+#ignored unless using -pass 2
+maxrate=24M
+minrate=100k
+auto-alt-ref=1
+arnr-maxframes=7
+arnr-strength=5
+arnr-type=centered
--- /dev/null
+vcodec=libvpx
+
+g=120
+lag-in-frames=16
+deadline=good
+cpu-used=0
+vprofile=0
+qmax=63
+qmin=0
+b=768k
+
+#ignored unless using -pass 2
+maxrate=1.5M
+minrate=40k
+auto-alt-ref=1
+arnr-maxframes=7
+arnr-strength=5
+arnr-type=centered
--- /dev/null
+vcodec=libvpx
+
+g=120
+lag-in-frames=16
+deadline=good
+cpu-used=0
+vprofile=0
+qmax=51
+qmin=11
+slices=4
+b=2M
+
+#ignored unless using -pass 2
+maxrate=24M
+minrate=100k
+auto-alt-ref=1
+arnr-maxframes=7
+arnr-strength=5
+arnr-type=centered
--- /dev/null
+vcodec=libvpx
+
+g=120
+lag-in-frames=25
+deadline=good
+cpu-used=0
+vprofile=0
+qmax=51
+qmin=11
+slices=4
+b=2M
+
+#ignored unless using -pass 2
+maxrate=24M
+minrate=100k
+auto-alt-ref=1
+arnr-maxframes=7
+arnr-strength=5
+arnr-type=centered
--- /dev/null
+vcodec=libx264
+
+vprofile=baseline
+level=13
+maxrate=768000
+bufsize=3000000
--- /dev/null
+vcodec=libx264
+
+vprofile=baseline
+level=30
+maxrate=10000000
+bufsize=10000000
<ForcedIncludeFiles>common/compiler/vs/disable_silly_warnings.h</ForcedIncludeFiles>\r
</ClCompile>\r
<Link>\r
- <OptimizeReferences>true</OptimizeReferences>\r
+ <OptimizeReferences>false</OptimizeReferences>\r
<AdditionalDependencies>alibcof64.lib;freetype250.lib;sfml-system.lib;sfml-window.lib;sfml-graphics.lib;Winmm.lib;Ws2_32.lib;avformat.lib;avcodec.lib;avutil.lib;avfilter.lib;swscale.lib;swresample.lib;tbb.lib;OpenGL32.lib;glew32.lib;openal32.lib;freeimage.lib</AdditionalDependencies>\r
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
<GenerateDebugInformation>true</GenerateDebugInformation>\r